13

我目前正在使用 DynamoDB,但扫描时遇到问题。我可以使用 ExclusiveStartKey 以转发顺序获得分页结果。但是,无论我设置ScanIndexForwardtrue 还是 false,我都会从我的扫描操作中获得正向的结果。如何从ScanDynamoDB 中以相反的顺序获取结果?

4

2 回答 2

15

ScanIndexForward是通过您正在查询的表或索引的范围键以降序获取项目的正确方法。来自AWS API 参考

指定索引的升序 (true) 或降序 (false) 遍历的值。DynamoDB 返回反映由范围键确定的请求顺序的结果。如果数据类型是数字,则以数字顺序返回结果。对于 String 类型,结果按 ASCII 字符代码值的顺序返回。对于 Binary 类型,DynamoDB 在比较二进制值时将二进制数据的每个字节视为无符号。

根据Scan 的文档,我得出结论,没有办法反向扫描。但是,如果您需要这样做,我会说您没有正确使用 DynamoDB。在为 DyanmoDB 之类的数据库设计架构时,您应该根据预期的查询来规划架构,以确保几乎所有应用程序查询都具有良好的索引。扫描更多地用于系统管理员操作或用于输入 MapReduce 或分析。“扫描操作总是扫描整个表,然后过滤掉值以提供所需的结果,本质上增加了从结果集中删除数据的额外步骤。” (查询和扫描性能)这可能会导致性能问题和其他问题

使用 DynamoDB 与使用传统的关系数据库有着根本的不同,并且需要对使用它的方式进行重大改变。您需要确定 DynamoDB 在存储和性能、可靠性和可用性方面的可用性优势是否值得接受其局限性。

于 2014-10-25T15:22:16.653 回答
6

截至目前,dynamoDB 扫描无法返回您排序的结果。

您需要使用带有哈希键和范围字段的新全局二级索引 (GSI) 的查询。诀窍是使用为表中的所有数据分配相同值的哈希键。

我建议为所有数据创建一个新字段并将其称为“状态”并将值设置为“确定”或类似的值。

然后,您对所有结果进行排序的查询将如下所示:

{
    TableName: "YourTable",
    IndexName: "Status-YourRange-index",
    KeyConditions: {
        Status: {
            ComparisonOperator: "EQ", 
            AttributeValueList: [ 
                "OK"
            ]
        }
    },
    ScanIndexForward: false
}

有关如何编写 GSI 查询的文档可在此处找到:http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying

于 2017-03-22T06:29:54.470 回答