DynamoDB 扫描中的订单结果

Order results in DynamoDB scan

scanning DynamoDB table 时,是否可以在将数据返回给用户之前对结果进行排序?

SQL 中,可以 运行 像 SELECT * FROM posts ORDER BY creationDate DESC 这样的查询。是否可以使用 scan (or with a query 执行此操作,但我认为这行不通,因为我不知道 AWS DynamoDB 中的散列键值)?

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

有什么方法可以按 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 table 时是否可以对结果进行排序?将创建日期(作为 Int)设置为哈希键,将随机 UID 设置为范围键是否可行?是否有任何(更好的)hacks 可以用来绕过 DynamoDB 没有排序功能的事实?

唯一的方法是查询索引。您可能必须将全局二级索引添加到 "hack" 您正在尝试做的事情,但这可能不是一个好的设计。它需要成为索引的原因是 Dynamo 按范围的顺序将每个项目存储在哈希中。因此,如果您有一个您知道的哈希(可能向每个具有相同值的文档添加一个 属性 并将其作为哈希键),那么它会按范围排序(您将创建您感兴趣的时间戳) ).那么一切就都顺理成章了。你可能 运行 遇到这个问题,但如果像你说的那样,你正在寻找 hack 这应该有用。