Amazon dynamodb 如何在DynamoDB中反向扫描索引?

Amazon dynamodb 如何在DynamoDB中反向扫描索引?,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我目前正在使用DynamoDB,扫描时出现问题。我可以通过使用ExclusiveStartKey按向前顺序获得分页结果。但是,无论我是向前设置ScanIndexForwardtrue还是false,我都会从扫描操作中按正向顺序获得结果。如何从DynamoDB中的扫描中以相反顺序获得结果 ScanIndexForward是通过正在查询的表或索引的范围键按降序获取项目的正确方法。从: 指定升序(true)或降序(false)的值 遍历索引。DynamoDB返回反映 请求的顺序由范围键确定。如果数据类

我目前正在使用DynamoDB,扫描时出现问题。我可以通过使用ExclusiveStartKey按向前顺序获得分页结果。但是,无论我是向前设置
ScanIndexForward
true还是false,我都会从扫描操作中按正向顺序获得结果。如何从DynamoDB中的
扫描中以相反顺序获得结果

ScanIndexForward
是通过正在查询的表或索引的范围键按降序获取项目的正确方法。从:

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

基于这一点,我得出结论,没有反向扫描的方法。但是,如果您需要这样做,我会说您没有正确使用DynamoDB。在为DyanmoDB这样的数据库设计模式时,您应该根据预期的查询来规划模式,以确保几乎所有的应用程序查询都具有良好的索引。扫描更多的是用于系统管理操作或输入MapReduce或analytics。“扫描操作总是扫描整个表,然后过滤掉值以提供所需的结果,实质上增加了从结果集中删除数据的额外步骤。”()这可能导致错误


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

目前,DynamoDB扫描无法返回排序结果

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

我建议为所有数据创建一个新字段,并将其称为“Status”,并将值设置为“OK”或类似值

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

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

有关如何编写GSI查询的文档可在此处找到:

请显示您的代码您使用哪个API访问DynamoDB?Most不允许您为扫描操作指定
ScanIndexForward
。您是否直接进行web服务调用?是的,您是对的,但ScanIndexForward适用于查询,而不适用于扫描。使用查询,我们只能在哈希键和范围键上设置筛选器,而不能在其他字段上设置筛选器。完全受够了DynamoDB。您可以对H/R键以外的属性/字段使用查询筛选器。澄清评论。查询操作必须仅采用哈希和范围键条件,并且只能对其起作用。有一个可选的查询筛选器,可以对其他字段进行筛选。但是,查询操作仍在读取与哈希和范围键条件匹配的每个项。它只返回与筛选器匹配的行。理想情况下,散列和范围键条件应尽可能窄,以避免读取太多行。@Bharabhushan,您是如何解决此问题的?你想解释一下吗?我不同意你的评论,如果你需要的话,没有正确使用DynamoDB。我想在日期属性上创建一个二级索引,并返回具有最新日期的项(首先是最大值)。这怎么会是误用呢?所以会有一个索引键,它不会导致热点吗?也许最好使用从同一前缀开始的内容,并使用BEGINS_WITH代替EQ?你想再试一次吗?对GSI哈希键使用相同的表值是完全无用的。请记住,在构造表时,您不需要同时提供这两种数据。你可以有一个你真正想要的哈希键。或者使用连接字段作为散列键。让dynamodb做合理事情的各种丑陋的把戏。