2013-11-28 65 views
1

在我的表「products_1」中,我配置了1個容量單位讀取和1個容量單位寫入。DynamoDB BatchWriteItem - 無節流?

我正在使用AWS PHP SDK使用「BatchWriteItem」將8個項目寫入DynamoDB。該代碼返回了此回覆:

 
Object 
(
    [structure:protected] => 
    [data:protected] => Array 
     (
      [ConsumedCapacity] => Array 
       (
        [0] => Array 
         (
          [CapacityUnits] => 8 
          [TableName] => products_1 
         ) 

       ) 

      [UnprocessedItems] => Array 
       (
       ) 

     ) 

) 

正如您所看到的,它使用了8個容量單位,這是正確的。

但是,當我在AWS控制檯中檢查了監視器時,我看不到「Throttled Write Requests」圖表中的任何條目。我期待寫請求會受到限制,因爲我認爲「BatchWriteItem」將在第二個內寫入8個項目

我的假設錯了嗎?如果沒有,我想知道爲什麼這些寫入不會顯示在「Throttled Write Requests」圖表中。

回答

2

亞馬遜DynamoDB基本上允許沒有得到節流的突發狀況,但如果你要保持操作/秒以上的供應一段的時間,你會開始越來越節流。

對於非批處理操作,AWS SDK的PHP也自動次輸入使用指數退避算法,所以即使你得到節流節流的要求,你不一定會在PHP代碼中得到一個錯誤。

在批處理操作的情況下,就像您在此處使用的那樣,您將知道是否已被扼殺,因爲您將在響應的UnprocessedItems部分中顯示出來。

獨立,但相關:如果您打算親自做很多認沽操作,並關注節流,你應該SDK,它採用分批和排隊,以確保的check out the WriteRequestBatch class您所有的項目得到放,最終。

2

控制檯顯示5分鐘時間內的平均值。計算使用單位的總和:8單位/ 300秒= 0.027單位每秒。看起來你並沒有受到限制。

如何制定出配置的吞吐量引用AWS:

使用的和值來計算供應量。例如,獲取Sum值超過5分鐘。將Sum值除以5分鐘內的秒數(300),以獲得ConsumedWriteCapacityUnits每秒的平均值。您可以將計算值與您提供的Amazon DynamoDB的預配置吞吐量值進行比較。