【问题标题】:DynamoDB equivalent to find().sort()DynamoDB 等效于 find().sort()
【发布时间】: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


【解决方案1】:

DynamoDB 应用的唯一排序是按分区内的范围键。没有按任意字段排序结果的功能,您需要在应用程序代码中对自己的结果进行排序。即在客户端进行扫描并对结果进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2010-09-20
    • 2017-03-19
    • 2020-01-01
    • 2016-01-12
    • 2016-05-15
    相关资源
    最近更新 更多