1

我遇到Dynamo問題,讀吞吐量遠低於配置的容量,而圖中沒有任何可見的節流。DynamoDB在沒有任何節流的情況下讀吞吐量低於容量

我的表有類似數據的100GB:

| Partition Key | Sort Key | Value | A | A1 | 1 | A | A2 | 21 | A | A3 | 231 ... | A | A200 | 31 | B | B1 | 5

這種結構不能改變太多,因爲我可以查詢(基於關聯到一個給定鍵的所有值和更復雜的查詢是非常重要的與給定分區鍵關聯的排序鍵)。 。 這使我扼殺了寫入,因爲它必須頻繁地擊中相同的分區,但真正奇怪的是讀取吞吐量。該表具有1000個讀取單元,但最大記錄吞吐量爲每秒600個讀取。這與每秒高達10.000個預配置讀取單位一致。

在客戶端,我每秒發送1000個請求(統一使用速率限制器),理論上讀取吞吐量應該是每秒1000個讀取。即使客戶端的請求數量增加,速率仍然保持不變,並且存在零節制讀取。

客戶端在與Dynamo相同的區域中的EC2 m4.2xlarge實例上運行。我排除了客戶端的一個問題,因爲CPU使用率相當低,並且有足夠的內存可用。

有什麼想法可能導致這種情況?

+0

所以你說你的1000次讀取(/秒)都成功了,但是系統卻把它算爲600? –

+0

@ Michael-sqlbot如果我每秒發送1000次讀數,那麼是的,它們都成功了,但是它的計數是每秒600/500,如果我發送2000然後不,它每秒少於2000次,但是比圖表上顯示的要多。 –

回答

0

每個項目的數據量可能會影響RCU。

參見: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html

一個讀出容量單元表示一個強一致的讀取每 第二,或兩個最終一致每秒讀取一個項目最多 至4 2KB大小。如果您需要讀取大於4 KB的項目,則 DynamoDB將需要消耗額外的讀取容量單位。 所需的讀取容量單位總數取決於項目大小, 以及是否希望讀取最終一致或強烈一致的 。

您需要檢查您是否使用一致的讀取以及您每次讀取的數據量。

+0

它與一致性有關。當我開始使用一致的讀取時,我可以接近所需的吞吐量,但即使沒有節流,我也無法獲得可擴展的值。 –

0

的一點想法

  1. 在您的測試是你傳播你的查詢過所有的分區鍵的? Dynamo在所有分區上分配吞吐量,因此它會觸及一部分分區,可能無法實現標題吞吐量。
  2. 你知道每個讀取的數據有多少返回? 1個讀取容量可以返回高達4KB的數據。如果您的一些結果大於4KB,那麼1000個RCU的讀取次數不會超過1000次。
  3. 你知道桌子上有多少個分區,以及你的吞吐量是如何分佈在他們身上的?一個分區只能有3,000個RCU Temporarily increasing吞吐量可能導致您的表生成新的分區 - 吞吐量分佈在每個分區上。然後,當您將RCU放回原位時,數據會保留在您的RCU更分散的相同數量的分區中。
+0

1.是的,我們的讀取分佈均勻,我記錄了密鑰,沒有查詢任何密鑰兩次以上。 2.每次讀取返回的數據少於4KB。我不知道多少,但是少了很多。 3.那是我沒有想過的。謝謝 –