当表吞吐量高但GSI吞吐量低时,在dynamodb中写入限制

时间:2016-01-04 06:14:46

标签: amazon-web-services amazon-dynamodb

假设我有一个dynamodb表:

process_data(日期(hashkey),pid(sortkey),名称,状态)

我在名字'上有一个全球二级索引。该GSI的写吞吐量为10.表的写容量为100。

但是当我尝试更新“状态”时使用' date'和' pid',它会导致写入限制。写入率大于10但绝对远低于100.我认为这个名称是' name'没有得到更新,全球二级索引名称'不会被触及,并且在' name'上写下索引的容量。不重要。

是否在更新表格时,我需要处理每个GSI,无论它们是否被触及?或者其他什么东西会造成写入限制?我的桌子相当小(大约40MB,所以我认为分区不会影响太多)。

我阅读了有关为GSI配置写入容量的AWS文档。在一个段落中,它表示在更新时,未受影响的密钥上的GSI不会受到影响。在下一篇文章中,它写到表格时应该注意所有的写入能力。我发现这有点令人困惑。

1 个答案:

答案 0 :(得分:3)

根据我的理解,你的桌子上有这两个索引:

  • 主要指数:date(香港),pid(SK)
  • GSI:name(香港)

现在,回到最初的问题:当你创建一个GSI时,想一想,因为你有一个单独的表与GSI。换句话说,对于上面提到的情况,请将其视为在DynamoDB中有两个不同的表:

  • T1,其中datepid为HK / SK
  • T2,name为HK。

那么,当您在T1中插入具有新status字段但未更改name的记录时会发生什么? DynamoDB仍然必须写入T2,因为status的{​​{1}}字段现在发生了变化。因此,你也会吃掉T2的写入容量。

这个解释也应该澄清你在帖子最后一段中的两个疑问。