- 何时以及如何对具有分区键和排序键的 Dynamodb GSI 进行分区?
- GSI 分区(如表分区)是否有最大大小限制?
- 如果是,那么当单基数 GSI(即所有记录中具有相同分区键的 GSI)超过存储限制时会发生什么?
3 回答
1)请在此处查看我的答案https://stackoverflow.com/a/51240423/4985580,了解表的分区方式。GSI 本质上只是一个新表,它的分区方式与您的基表相同。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Partitions.html
DynamoDB 中的全局二级索引也是由分区组成的。GSI 中的数据与其基表中的数据分开存储,但索引分区的行为方式与表分区非常相似。
2) 是的,10GB
3) 这是一个有趣的问题,我没有答案。Dynamo 会根据数据的分区键访问正确的分区,因此如果您使用单个分区键填充多个分区,您可能会遇到问题。也就是说,您可能需要至少 250 万个具有相同分区键的项目才能发生这种情况 (10GB/4KB)。这对您来说是一种可能的情况吗?
- 是的,它的工作方式与表分区相同。
- 是的,每个分区 10GB,也与表本身相同。
- 该行为也与主表完全相同。Dynamo 将开始使用排序键在分区之间传播数据,即没有什么特别的事情发生。
这是一篇很好的博客文章,解释了分区的工作原理:https ://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/
具有相同分区键的所有项目存储在一起,对于复合分区键,按排序键值排序。如果集合大小超过 10 GB,DynamoDB 会按排序键拆分分区。
如果是,那么当单基数 GSI(即所有记录中具有相同分区键的 GSI)超过存储限制时会发生什么?
DynamoDB 分区每秒只能处理 1000 个 WCU。此外,DDB 每条记录只允许 400 个 WCU。如果您的 GSI 超过 WCU,则对主表的写入也会受到限制。因此,如果您的记录大约为 400KB,则大约 2.5 的请求率可能会降低您的分区。