2016-01-04 179 views
2

可以說我有一個dynamodb表:寫油門當表吞吐量高,但GSI吞吐量低

process_data(日期(hashkey),PID(排序關鍵字),名稱,狀態)

我有'姓名'的全球二級索引。此GSI的寫入吞吐量爲10.此表的寫入容量爲100.

但是,當我嘗試使用'date'和'pid'更新'狀態'時,它會導致寫入限制。寫入速率大於10,但肯定遠低於100.我認爲'name'沒有得到更新,'name'上的全局二級索引不會被觸及,並且在'name'上寫入索引的容量沒關係。

在更新表格時,是否需要照顧每個GSI,而不管它們是否被觸摸?或者其他的東西可能會導致寫入油門?我的表格相當小(大約40MB,所以我認爲分區不會影響太多)。

我閱讀了有關爲GSI配置寫入容量的AWS文檔。在一段中說,在更新時,不受影響的密鑰上的GSI不受影響。在下一段中,它寫在桌子上時說,所有的寫入能力都應該被照顧。我發現這有點令人困惑。

回答

3

從我的理解,你有這兩個指標上你的餐桌:

  • 主索引:date(HK),pid(SK)
  • GSI:name(HK)

現在,回到原來的問題:當你創建一個GSI時,把它想象成你有一個單獨的GSI表。換言之,用於上述情況下,把它看作你在DynamoDB具有兩個不同的表:

  • T1,具有datepid作爲HK/SK
  • T2,具有name作爲HK。

所以,當你,比如說,插入具有新status場,但不變name T1的記錄,會發生什麼? DynamoDB仍然必須寫入T2,因爲namestatus字段現在發生更改。因此,你也會吃T2的寫入容量。

此解釋還應該澄清您在帖子最後一段中的兩個疑問。