【问题标题】:How To sort data in dynamodb with boto3 and get results with greatest values?如何使用 boto3 对 dynamodb 中的数据进行排序并获得最大值的结果?
【发布时间】:2021-09-21 19:29:24
【问题描述】:

我有一个书桌,我想买 5 本书最贵的书!就像我们在 MySQL 中所做的那样:SELECT * FROM (SELECT * FROM Books ORDER BY Price DESC) Books LIMIT 5

【问题讨论】:

  • 你当前的python代码是什么?为什么它不起作用?你得到什么错误?

标签: python amazon-dynamodb boto3 dynamodb-queries


【解决方案1】:

一般而言,DynamoDB 并非旨在对整个表进行排序。尽管您可以Scan 整个表,但它们将以看似随机的顺序呈现,而不是按任何熟悉的键排序。 DynamoDB documentation 说明了为什么会这样:

DynamoDB 使用分区键值作为内部哈希函数的输入。哈希函数的输出决定了存储项目的分区(DynamoDB 内部的物理存储)。具有相同分区键值的所有项存储在一起,按排序键值排序。

遗憾的是,Scan 操作的文档没有解释这对扫描结果排序的影响。基本上,Scan 没有任何方法对数据库的所有分区进行全局排序(可能有数十亿个并且分布在许多不同的服务器之间),并且每个服务器只能看到分区的一个子集,按此伪排序随机散列函数排序,因此您在扫描中看到的排序受此影响。

DynamoDB 允许 允许您使用附加 sort key(除了分区键)。排序键将允许您检索共享由所选排序键排序的相同分区键的所有项目。但它仍然不是数据库中的所有项目 - 只是一个分区中的项目。

当然,您可以通过将所有物品放在一个分区中来“作弊”,然后将它们分类。这适用于小型数据库,但不会扩展到大量数据。 DynamoDB officially limits 单个分区的性能达到 3,000 RCU 和 1,000 WCU(基本上是每秒读取和写入),因此可扩展的数据库需要有许多分区 - 而不仅仅是一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多