我正在使用Dynamo并希望使用filter.Is扫描一个表,例如,可以通过使用全局辅助索引来扫描表中的特定行吗?
发布于 2017-12-19 09:41:01
如果您正在扫描一个二分的属性(您说状态为空或不为空),那么如果您使用稀疏索引并且效率要高得多,这是可能的!
来自AWS文档“GSI的最佳实践”
利用稀疏索引 对于表中的任何项,只有在项中存在索引键值时,DynamoDB才会向全局辅助索引写入相应的条目。对于全局辅助索引,这是索引分区键及其排序键(如果存在的话)。如果索引键值没有出现在每个表项中,则该索引称为稀疏索引。 您可以使用稀疏的全局辅助索引来有效地定位具有不常见属性的表项。为此,您可以利用以下事实:不包含全局辅助索引属性的表项根本没有索引。例如,在GameScores表中,某些球员可能在一场比赛中取得了特殊的成就--比如“冠军”--但大多数球员却没有。与扫描整个GameScores表中的Champs不同,您可以创建一个全局辅助索引,其中一个分区键为Champ,另一个键为UserId。这将使通过查询索引而不是扫描表来轻松找到所有Champs。 这样的查询非常有效,因为索引中的项数将大大少于表中的项数。此外,您在索引中投影的表属性越少,从索引中消耗的读取容量单位就越少。
发布于 2017-12-19 05:57:20
这不可能!扫描总是针对基表中的所有行,当您作为响应扫描索引表时,您将只获得包含在该索引表中的属性。
示例:如果您有一个包含1000行和属性的表: id、name、姓氏、年份、城市、邮政编码,然后使用主键" city“为该表创建GSI,并将" zipcode”作为投影属性,并且当您再次扫描该索引表时,将处理所有1000行,但作为响应,您将得到每个行的"city“和"zipcode”。增益降低了吞吐率,但在创建GSI时,您将花费每月的读写能力单元。
https://stackoverflow.com/questions/47885903
复制相似问题