在 GSI 上扫描与在 DynamoDB 中扫描整个 table

Scanning on GSI Vs Scanning the entire table in DynamoDB

我在 DynamoDB 中关注 table。 ID 是分区键,Category 是排序键。 IDs-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     

我将在这个 table 中总共有大约 10K 个条目。

在 GSI 上扫描和在 DynamoDB 中扫描整个 table 有什么区别?

谢谢

如果整个数据模式相同,则在 RCU(读取信用单位)方面扫描两者的成本仍然相同。 GSI 将拥有自己的积分,因此将从其积分池中扣除。

查看您的数据,我可以看到一些值缺少该属性,根据 documentation 这意味着它们不会被包括在内。由于这个原因,扫描会稍微便宜一些,因为 GSI

中的数据较少

A global secondary index only tracks data items where its key attributes actually exist. For example, suppose that you added another new item to the GameScores table, but only provided the required primary key attributes.

此外,如果小于 attributes are projected,这可能会影响成本(对于 4KB 的项目,1 RCU 等于 1 次强一致性读取或 2 次最终一致性读取)因此如果您的项目大小更改为低于 4kb GSI 中的属性越少,您支付的费用就越少。