Indexing 扫描Dynamo DB中的特定行

Indexing 扫描Dynamo DB中的特定行,indexing,nosql,amazon-dynamodb,Indexing,Nosql,Amazon Dynamodb,我正在使用Dynamo DB,希望使用筛选器扫描一个表。例如,是否可以使用全局二级索引仅扫描表中的特定行?这是不可能的!扫描始终针对基表中的所有行,当您作为响应扫描索引表时,将只获得该索引表中包含的属性 例如: 如果您有一个包含1000行和属性(id、姓名、姓氏、年份、城市、zipcode)的表,并且您使用主键“city”为该表创建GSI,并将“zipcode”作为投影属性,当您再次扫描该索引表时,将处理所有1000行,但作为响应,您将只得到“city”和“zipcode”对于每一行。增益降低了

我正在使用Dynamo DB,希望使用筛选器扫描一个表。例如,是否可以使用全局二级索引仅扫描表中的特定行?

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

例如:
如果您有一个包含1000行和属性(id、姓名、姓氏、年份、城市、zipcode)的表,并且您使用主键“city”为该表创建GSI,并将“zipcode”作为投影属性,当您再次扫描该索引表时,将处理所有1000行,但作为响应,您将只得到“city”和“zipcode”对于每一行。增益降低了吞吐量,但在创建GSI时设置的读写容量单元每月都会增加成本

如果您正在扫描一个二分法的属性,即status是否为null,那么如果您使用稀疏索引并且效率更高,这是可能的

来自AWS文件“

利用稀疏索引

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

您可以使用稀疏全局二级索引有效地定位具有不常见属性的表项。要做到这一点,您可以利用这样一个事实,即不包含全局二级索引属性的表项根本不被索引。例如,在GameScores表中,某些玩家可能已经在游戏中获得了特定的成就,例如“Champ”,但大多数玩家没有。您可以创建一个全局二级索引,分区键为Champ,排序键为UserId,而不是扫描整个GameScores表中的Champ。这将使得通过查询索引而不是扫描表来查找所有CHAMP变得容易

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


“特定行”是什么意思。你能举个例子吗?例如,我的表有50行,我只想扫描一些属性(“status”)为null的行,假设有15行的“status”值为null。所以我想以某种方式扫描这15行,但请描述一下表哈希/范围键,并描述一下您的查询。谢谢CanSahin。我试过了,效果很好。再次感谢。