我在DynamoDB中有下表。 ID是分区键,Category是排序键。 ID-1和ID-2是GSI。 IDs-1和IDs-2中的值采用字符串形式,例如“ list1,list2”。我有一种情况,我必须在IDs-1和IDs-2列中进行搜索。例如,我想查看在任何列中是否存在list7。
在这种情况下,
ID[Number] Category[String] IDs-1[String] IDs-2[String]
1 category1 list1, list2
2 category2 list7, list8
3 category1 list3, list4
4 category2 list5, list6
此表中总共约有1万个条目。
在GSI上进行扫描与在DynamoDB中扫描整个表有什么区别?
谢谢
答案 0 :(得分:2)
如果整个数据模式相同,那么就RCU(已读信用单位)而言,对两者进行扫描的成本仍然相同。 GSI将拥有自己的信用额度,因此将从其信用额中扣除。
查看您的数据,我看到一些值缺少该属性,根据documentation,这意味着它们将不包含在内。因此,由于GSI中的数据较少,因此扫描会便宜一些
全局二级索引仅跟踪其关键属性实际存在的数据项。例如,假设您向GameScores表中添加了另一个新项目,但仅提供了必需的主键属性。
另外,如果attributes are projected较小,则可能会影响成本(1 RCU等于4KB的项目等于1个强一致性读取或2个最终的一致性读取),因此如果您的项目大小更改为小于4kb, GSI中的属性越少,您支付的费用就越少。