【问题标题】:Order results in DynamoDB scanDynamoDB 扫描中的订单结果
【发布时间】:2015-02-21 04:37:30
【问题描述】:

是否可以在scanning DynamoDB 表时对结果进行排序,然后再将数据返回给用户?

SQL 中,可以运行SELECT * FROM posts ORDER BY creationDate DESC 之类的查询。是否可以在AWS DynamoDB 中使用scan(或query,但我认为这行不通,因为我不知道哈希键值)?

虽然可以从数据库中获取所有结果,然后对它们进行排序,但我预计会有很多帖子。如果有很多帖子,那么会花费很多时间,因为我只想加载一定数量的帖子,直到用户决定加载更多。

有没有办法按range keylocal or global secondary index 对结果进行排序?

我正在尝试找到一个 hack 来解决似乎无法订购结果的事实,而不是寻找这样的东西:

AWSDynamoDBScanInput.order = NSSortDescriptor(key: "creationDate", ascending: true)

除非它存在,尽管从我所看到的情况来看,它似乎是不可能的。

看起来结果默认是按哈希键排序的,所以,我想将哈希键设置为项目创建日期,范围键为 UID,但AWS DynamoDB documentation 似乎警告不要这样做:

将哈希键设置为创建日期:

var creationDate: Int = Int(NSDate().timeIntervalSince1970)

随机 UID 的范围键可以对帖子进行排序?

scanning DynamoDB 表时是否可以排序结果?将创建日期(作为Int)设置为哈希键,将随机 UID 设置为范围键有效吗?有没有(更好的)hacks 可以用来绕过DynamoDB 没有排序功能的事实?

【问题讨论】:

    标签: ios swift amazon-web-services amazon-dynamodb


    【解决方案1】:

    做到这一点的唯一方法是查询索引。您可能必须添加一个全局二级索引来“破解”您正在尝试做的事情,但这可能不是一个好的设计。之所以需要它是一个 Index 是因为 Dynamo 将每个项目按 Range 的顺序存储在一个 Hash 中。因此,如果您有一个您知道的 Hash(可能为每个具有相同值的文档添加一个属性并将其设为 Hash Key),那么它将按 Range 排序(您将创建您感兴趣的 Timestamp)。那么它就会有条不紊。你可能会遇到这个问题,但如果像你说的那样,你正在寻找一个hack,这应该可以工作。

    【讨论】:

    • 太好了,谢谢。这将是一个相当大规模的应用程序,所以你知道问题会有多大吗?此外,scan 是否默认以任何方式排序(如哈希键的降序),还是只是随机的?
    • 随机扫描订单。除了备份类型的目的,不要计划在生产中进行扫描。当您需要按键搜索时计划查询,按另一个字段排序
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2022-10-12
    • 2014-12-08
    相关资源
    最近更新 更多