Julien BERNARD Asked: 2023-10-29 22:29:02 +0800 CST2023-10-29 22:29:02 +0800 CST 2023-10-29 22:29:02 +0800 CST 为什么我们可以选择GSI的写入容量? 772 我正在学习 AWS DynamoDB,但有些事情让我感到困惑。如果对 DynamoDB 表的一次写入意味着对其所有 GSI 进行一次写入(因为有多个数据副本来支持不同的分区),那么您为什么要为“主”表和 GSI 选择不同的写入容量?为什么我们甚至可以选择? 1 个回答 Voted Best Answer fedonev 2023-10-30T00:01:05+08:002023-10-30T00:01:05+08:00 以下是 GSI 写入容量需求可能低于表容量的几个原因: (1) 应用稀疏索引模式,其中并非所有表项都写入索引: 对于表中的任何项目,仅当项目中存在索引排序键值时,DynamoDB 才会写入相应的索引条目。如果排序键未出现在每个表项中,或者索引分区键未出现在项中,则称该索引是稀疏的。 (2) 您的索引查询模式不需要整个项目。如果是这样,您可以仅将项目属性的子集写入(“project”)索引。 仔细选择预测可能会减少索引写入的需求: 由于二级索引会消耗存储空间和预配置吞吐量,因此您应该使索引的大小尽可能小...如果您的查询通常仅返回一小部分属性,并且这些属性的总大小远小于整个项目,仅投影您经常请求的属性。 这两种方法都包含在 DynamoDB最佳实践指南中。 相反的情况又如何呢?@hunterhacker 指出了一种情况,GSI 可能需要比表“更多”的容量:如果您有大量修改 GSI 主键属性但不是表键属性的更新操作。这需要对索引进行删除+插入(2 次操作),但只对表进行更新(1 次操作)。
以下是 GSI 写入容量需求可能低于表容量的几个原因:
(1) 应用稀疏索引模式,其中并非所有表项都写入索引:
(2) 您的索引查询模式不需要整个项目。如果是这样,您可以仅将项目属性的子集写入(“project”)索引。 仔细选择预测可能会减少索引写入的需求:
这两种方法都包含在 DynamoDB最佳实践指南中。
相反的情况又如何呢?@hunterhacker 指出了一种情况,GSI 可能需要比表“更多”的容量:如果您有大量修改 GSI 主键属性但不是表键属性的更新操作。这需要对索引进行删除+插入(2 次操作),但只对表进行更新(1 次操作)。