扫描Dynamo DB中的特定行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扫描Dynamo DB中的特定行相关的知识,希望对你有一定的参考价值。

我正在使用Dynamo DB并希望使用filter扫描一个表。例如,可以使用全局二级索引从表中扫描特定行吗?

答案

如果你正在扫描一个二分属性,你说状态是否为空,那么你可以使用稀疏索引并且效率更高!!

来自AWS文档'best practices for GSI'

利用稀疏索引

对于表中的任何项,如果项中存在索引键值,DynamoDB将仅将相应的条目写入全局二级索引。对于全局二级索引,这是索引分区键及其排序键(如果存在)。如果索引键值没有出现在每个表项中,则称该索引是稀疏的。

您可以使用稀疏全局二级索引来有效地查找具有不常见属性的表项。为此,您可以利用不包含全局二级索引属性的表项根本不编制索引的事实。例如,在GameScores表中,某些玩家可能已经为游戏赢得了特定的成就 - 例如“冠军” - 但大多数玩家没有。您可以创建一个全局二级索引,其分区键为Champ,排序键为UserId,而不是扫描整个GameScores表中的Champs。这样可以通过查询索引而不是扫描表来轻松找到所有冠军。

这样的查询可以非常有效,因为索引中的项目数量将远远少于表格中的项目数量。此外,您投射到索引中的表属性越少,您将从索引中消耗的读取容量单位就越少。

另一答案

这是不可能的!扫描总是针对基表中的所有行,当您将索引表作为响应进行扫描时,您将只获得该索引表中包含的属性。

示例:如果您有一个包含1000行和属性的表:id,name,surname,year,city,zipcode,并使用主键“city”为该表创建GSI,并将“zipcode”作为投影属性包含在内再次扫描该索引表,将处理所有1000行,但作为响应,您将获得每行的“city”和“zipcode”。增益是降低吞吐量,但是在创建GSI时您将设置的读写容量单位每月花费您。

以上是关于扫描Dynamo DB中的特定行的主要内容,如果未能解决你的问题,请参考以下文章

如何在仅更新特定字段的dynamo db中进行批量更新

使用 AWS Appsync 和 GraphQL 查询 Dynamo DB 中的多个表

Dynamo DB 中的 AWS AppSync 简单 graphql 解析器无法正常工作,这让我发疯

Kotlin Dynamo DB 自定义转换器

从 Parse 迁移到 AWS Dynamo DB

密钥上的条件数是带有节点js的无效dynamo db