我正在嘗試調用dynamodb寫入操作來寫入60k條記錄。改進DynamoDB寫入操作
我試圖將1000個寫入容量單位用於預置寫入容量。但是我的寫作操作仍然花費很多時間。另外,當我檢查指標時,我仍然可以看到消耗的寫入容量單位爲每秒10個左右。
我的記錄大小肯定小於1KB。
有沒有一種方法可以加速dynamodb的寫入操作?
我正在嘗試調用dynamodb寫入操作來寫入60k條記錄。改進DynamoDB寫入操作
我試圖將1000個寫入容量單位用於預置寫入容量。但是我的寫作操作仍然花費很多時間。另外,當我檢查指標時,我仍然可以看到消耗的寫入容量單位爲每秒10個左右。
我的記錄大小肯定小於1KB。
有沒有一種方法可以加速dynamodb的寫入操作?
與大多數數據庫一樣,DynamoDB的性能高度依賴於它的使用方式。
從您的問題來看,您可能只使用一個DynamoDB分區。每個分區容量爲can support up to 1000 write,最高可達10GB的數據。
但是,您還提到您的指標每秒只顯示10個寫單位。這是非常低的。檢查AWS控制檯中表格可見的所有指標。這是DynamoDB頁面下的每個表的選項卡。檢查節流和任何錯誤。檢查消耗的容量是否低於圖表上的預置容量。
您的過程中可能存在其他一些瓶頸。
我已經在表格的唯一主鍵上創建了分區。我使用單個記錄而不是batchWrite。使用batchWrite會改變我的統計數據嗎? –
如果客戶端和DynamoDB之間存在高延遲,batchWrite會有所幫助。試一試,併爲其他人評論結果。 –
看起來您可以每秒發送更多請求。您可以執行更多的要求,但如果你在一個循環中發送的請求是這樣的:
for item in items:
table.putItem(item)
你需要介意每個請求的往返延遲。
您可以使用兩個技巧:
從多個線程/機器首先,上傳數據。
其次,你可以使用BatchWriteItem方法,讓你寫多達25個項在一個請求:
的BatchWriteItem操作提出或刪除一個或 多個表的多個項目。對BatchWriteItem的單個調用可以寫入多達16 MB的 數據,其中可以包含多達25個放置或刪除請求。 要寫入的單個項目可能大至400 KB。
所以這裏是我的想法。
我改變了我的電話以使用batchWrite,而且我的消耗寫容量單位已經顯着增加,達到286個寫容量單位。 此外,完整的寫入操作在幾分鐘內完成。 正如所有上述答案中所提到的,使用putItem加載大量數據存在延遲問題,並且會影響您的消耗容量。 batchWrite總是更好。
你是單線程寫操作嗎?您可以通過發送並行請求來提高性能。另外,請確保請求正在跨不同的分區鍵更新數據,以便它們將負載分散到多個分區。 –
如果我沒有錯,在dynamodb的情況下,並行寫入與batchWrite操作相同。 –
您是否收到任何'ProvisionedThroughputExceededException'錯誤?如果沒有,你沒有發送足夠的請求。並行發送多個batchWrite請求以獲得吞吐量的全部好處。異步可能也適用。 –