我有一個用例,在這種情況下,在單個請求中存在要更新的條目串列的情況并不多,而且大多數情況下,僅請求更新單個條目。但在未來,這可能會增長,因此我正在考慮使用 BatchPutItem 而不是 PutItem。
- 當請求中只有一個專案要更新時,使用 BatchPutItem 有什么缺點嗎?
- 我認為消耗的 RCU 是相同的,但是當請求中只有一個條目時,是否有任何其他差異或者 BatchPutItem 的行為與 PutItem 相同?
uj5u.com熱心網友回復:
從貨幣成本的角度來看,這無關緊要 - 消耗的 WCU 是相同的。Batch API 的好處是通過網路傳輸的請求更少,從而減少了寫入多個專案的總體延遲。
兩個 API 之間的錯誤處理是不同的,它需要一些額外的復雜性來處理BatchPutItem。即使BatchPutItem請求成功,個別專案的寫入也可能失敗,您需要檢查來自 API 的回應并自己重試失敗的寫入。
常規將通過回傳錯誤/引發例外以更直接的方式PutItem失敗。
這只是要牢記的一點,如果你無論如何都要使用BatchWriteItem,無論如何你都必須為此構建邏輯,這不會是一個缺點。
tl; dr:在您的情況下使用BatchWriteItem單個專案應該沒有缺點,因為無論如何您都必須構建重試邏輯。
uj5u.com熱心網友回復:
Maurice 的回答已經涵蓋了單一操作BatchWriteItem(原文如此)和獨立PutItem. 但是您應該知道,這些操作的功能之間也存在差異:
aBatchWriteItem可以對專案做的操作非常有限——你可以洗掉一個專案,或者完全替換它,但僅此而已。
相比之下,單機操作可以做的更多:
獨立
PutItem操作可以是有條件的(僅在某些條件與專案的前一個值匹配時才替換專案)。該操作還可以回傳專案的先前值,無需額外費用。獨立
UpdateItem操作可以做的更多:除了有條件并回傳專案的先前值之外,此操作還可以修改專案的屬性 - 而不是完全替換它。這些修改甚至可以包括運算式——例如,就地增加一個屬性。
這些附加功能無法通過BatchWriteItem. 如果您需要這些功能中的任何一個,則必須直接使用PutItemor UpdateItem,并且無法使用 single-request BatchWriteItem。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464442.html
標籤:亚马逊网络服务 表现 亚马逊-dynamodb 潜伏 吞吐量
