2017-12-18 281 views
3

我有一個具有屬性的現有DynamoDB表說DynamoDB併發寫入

 
--------------------------------------------------------- 
hk(hash-key)| rk(range-key)| a1 | a2 | a3 | 
--------------------------------------------------------- 


我有一個現有的DynamoDb客戶端,只只A1更新現有記錄。我想創建第二個作家(DDB客戶端),它也將更新現有的記錄,但僅適用於a2和a3。
如果ddb客戶端同時嘗試更新相同的記錄(a1爲1,另一個爲a2和a3),那麼DynamoDb會保證所有a1 a2 a3都更新爲正確的值(全部三個新值)?是否使用保存行爲UPDATE_SKIP_NULL_ATTRIBUTES足夠用於此目的,還是我需要實現某種樂觀鎖定?如果沒有, DDB爲此提供了什麼?

回答

-1

讀到DyanmoDB最終是一致的。 請參閱:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html

DynamoDB支持最終一致和強一致的讀取。

最終一致讀取

當你從一個DynamoDB表中讀取數據,響應可能不會 反映最近完成寫操作的結果。 響應可能包含一些陳舊的數據。如果您在短時間後重複閱讀 請求,則回覆應返回最新的 數據。

強一致性讀取

當你請求一個強烈一致的讀取,DynamoDB返回與最先進的最新數據 響應,反映了更新從 的是成功的所有先前的寫操作。如果存在網絡延遲或中斷,則可能無法使用強烈一致的 讀取。

注意DynamoDB使用最終一致的讀取,除非您另行指定 。讀操作(如GetItem,Query和Scan)提供了一個ConsistentRead參數 。如果將此參數設置爲true,則 DynamoDB在操作期間使用強烈一致的讀取。

基本上,你已經指定你閱讀時需要強有力的一致性數據。

而這應該可以解決你的問題。通過一致的讀取,您應該看到所有三個字段的更新。

請注意,對強一致性讀取有定價影響。

+0

我知道吞吐量消耗強烈一致的讀取。我只是問是否可以同時用兩個不同的作家寫同一個記錄,或者其中一個會一次成功,最後的記錄最終可能是a1 a2 a3或a1 a2 A'3。希望我能解釋我的問題。 –

0

如果您碰巧使用Dynamo Java SDK,那麼您很幸運,因爲SDK只支持Optimistic Locking。我不知道其他SDK是否支持類似的東西 - 我懷疑他們不支持。

樂觀鎖是爲了確保客戶端項目 正在更新(或刪除)是相同 DynamoDB項目的戰略。如果你使用這種策略,那麼你的數據庫寫入是 保護免受其他人的寫入覆蓋 - 反之亦然 。

+0

謝謝,讓我們看看樂觀鎖定是唯一的方法。 –