【发布时间】:2018-08-23 19:44:06
【问题描述】:
在 mongoDB 中,可以将所有文档按特定字段按 asc/desc 排序,如下所示:
db.collection_name.find().sort({field: sort_order})
query() 需要指定分区键,如果想查询非键属性,可以创建 GSI 并在其上运行查询,与此处解释的相同:Query on non-key attribute
scan() 可以完成这项工作,但不提供对任何字段进行排序的选项。
这里描述的解决方案之一:Dynamodb scan in sorted order 是为所有文档提供一个公共密钥并在属性上创建一个 GSI。
但正如其中一个解决方案的 cmets 中列出的那样,我引用“DynamoDB 表的性能特征同样适用于 GSI。具有单个哈希键“OK”的 GSI 只会使用一个分区。这将失去 DynamoDB 的所有扩展特性“。
有没有办法实现上述规模化?
【问题讨论】:
-
DynamoDB 应用的唯一排序是按范围键。没有按任意字段排序的功能,您需要在应用程序代码中对自己的结果进行排序。即在客户端进行扫描并对结果进行排序。
-
但是如果数据很大,scan() 不会返回所有文档。它限制为最大 1MB。
-
如果您直接使用 API,则需要使用 LastEvaluatedKey 对结果进行分页。然而,SDK 会在幕后为您完成所有这些工作。如此有效,您实际上可以在一次扫描操作中获得所有结果。至少分页的机制被 SDK 抽象掉了。
-
好的。所以这是我想的唯一方法。你能回答这个问题,以便我可以用一个接受的答案来结束这个问题
标签: mongodb amazon-web-services amazon-dynamodb