假设我有一个dynamodb表:
process_data(日期(hashkey),pid(sortkey),名称,状态)
我在名字'上有一个全球二级索引。该GSI的写吞吐量为10.表的写容量为100。
但是当我尝试更新“状态”时使用' date'和' pid',它会导致写入限制。写入率大于10但绝对远低于100.我认为这个名称是' name'没有得到更新,全球二级索引名称'不会被触及,并且在' name'上写下索引的容量。不重要。
是否在更新表格时,我需要处理每个GSI,无论它们是否被触及?或者其他什么东西会造成写入限制?我的桌子相当小(大约40MB,所以我认为分区不会影响太多)。
我阅读了有关为GSI配置写入容量的AWS文档。在一个段落中,它表示在更新时,未受影响的密钥上的GSI不会受到影响。在下一篇文章中,它写到表格时应该注意所有的写入能力。我发现这有点令人困惑。
答案 0 :(得分:3)
根据我的理解,你的桌子上有这两个索引:
date
(香港),pid
(SK)name
(香港)现在,回到最初的问题:当你创建一个GSI时,想一想,因为你有一个单独的表与GSI。换句话说,对于上面提到的情况,请将其视为在DynamoDB中有两个不同的表:
date
和pid
为HK / SK name
为HK。那么,当您在T1中插入具有新status
字段但未更改name
的记录时会发生什么? DynamoDB仍然必须写入T2,因为status
的{{1}}字段现在发生了变化。因此,你也会吃掉T2的写入容量。
这个解释也应该澄清你在帖子最后一段中的两个疑问。