我開發了一個從 DynamoDB 按需表中讀取資料的高負載應用程式。假設它每秒持續執行大約 500 次讀取。
有時我需要將一個大型資料集上傳到資料庫中(1 億條記錄)。我使用 python、spark 和audienceproject/spark-dynamodb. 我設定了吞吐量=40k 并BatchWriteItem()用于資料寫入。
一開始,我觀察到一些寫入限制請求,寫入容量只有 4k,但隨后發生升級,寫入容量上升。
問題:
- 在按需表的情況下,密集寫入會影響閱讀嗎?自動縮放是否獨立用于讀/寫?
- 在短時間內設定大吞吐量可以嗎?據我所知,按需表的成本是相同的。有哪些潛在問題?
- 我觀察到一些受限制的請求,但最終,所有資料都成功上傳。這怎么解釋?我建議我使用的客戶端具有高級限速邏輯,到目前為止我還沒有找到明確的答案。
uj5u.com熱心網友回復:
這是一個問題中的很多問題,你會得到一個高水平的答案。
DynamoDB 通過增加磁區數量進行擴展。每個專案都存盤在一個磁區上。每個磁區可以處理:
- 多達 3000 個讀取容量單位
- 多達 1000 個寫入容量單位
- 高達 10 GB 的資料
一旦達到這些限制中的任何一個,就會將磁區分成兩部分并重新分配專案。這種情況會一直發生,直到有足夠的可用容量來滿足需求。您無法控制這是如何發生的,它是在后臺執行此操作的托管服務。
磁區的數量只會不斷增長。
根據這些資訊,我們可以解決您的問題:
-
在按需表的情況下,密集寫入會影響閱讀嗎?自動縮放是否獨立用于讀/寫?
讀寫活動的縮放機制相同,但縮放點不同,如上所述。在按需表中不涉及 AutoScaling,這僅適用于具有預置吞吐量的表。您不應該注意到這對您的閱讀有影響。
-
在短時間內設定大吞吐量可以嗎?據我所知,按需表的成本是相同的。有哪些潛在問題?
我假設您設定了 spark 可以用作寫入預算的吞吐量,它不會對按需表產生太大影響。它是資訊,它可以在內部使用來決定有多少并行化是可能的。
-
我觀察到一些受限制的請求,但最終,所有資料都成功上傳。這怎么解釋?我建議我使用的客戶端具有高級限速邏輯,到目前為止我還沒有找到明確的答案。
如果客戶端使用 BatchWriteItem,它將獲得無法為每個請求寫入的專案串列,并且可以再次將它們排入佇列。可能涉及指數退避,但這是一個實作細節。這不是魔術,您只需要跟蹤您已成功寫入的專案并將那些您沒有再次加入的專案排入佇列,直到“to-write”佇列為空。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455005.html
標籤:Python 亚马逊网络服务 阿帕奇火花 亚马逊-dynamodb
