DynamoDB 中的非多样化全局二级索引

Non diverse Global Secondary Index in DynamoDB

假设我有一个具有以下属性的表:

  • 唯一 user_id(主哈希键)
  • category_id(GSI 哈希索引)
  • timestamp

我会有很多用户,但只有几个类别。

1
2
3
4
5
6
7
user_id  |  category_id
1           1
3           1
4           1
5           3
..          ..
50000000    1

是否可以存储数百万条具有与全局二级索引相同的 category_id 值的记录?我应该期待任何限制吗?

我想知道扫描是否是一个不错的选择。我将每天只使用一次 category_id 过滤。扫描数百万条记录的成本(时间和金钱)是多少?

谢谢!


根据限制文档,唯一的限制是:

No practical limit for tables without local secondary indexes.

For a table with local secondary indexes, there is a limit on item collection sizes: For every distinct hash key value, the total sizes of all table and index items cannot exceed 10 GB. Depending on your item sizes, this may constrain the number of range keys per hash value. For more information, see Item Collection Size Limit.

现在关于您应该进行查询还是扫描的第二个问题,您从性能和货币成本两方面进行了询问。维护一个 GSI 是很昂贵的,因为你必须为吞吐量(如果我没记错的话还有存储)付费,所以它就像为另一个表付费,再加上另一个表,你必须监控它的吞吐量以确保你不是被节流。另一方面,性能要好得多。

如果您计划每天浏览所有类别(这意味着表格中的每个文档),那么扫描是您的最佳选择。你没有从查询中获得任何东西。再加上它更便宜(没有额外的 GSI),您不必担心预测。