ReplicatedWriteConflictException

TL;DR — 你在一個多 Region 強一致(MRSC)global table** 中寫入某項目時,另一個 Region 的請求正在修改同一項目。強多 Region 一致性不能讓兩個都獲勝落地,因此一個寫入被拒絕。AWS 記載它為可重試:退避並重試,並在你能做到之處減少對熱項目的跨 Region 爭用。**

這是什麼意思

ReplicatedWriteConflictException: One or more items in this request are
being modified by a request in another Region.

傳統(最終一致)global table 到處接受並行寫入,並事後以最後寫入者獲勝來調解。MRSC global table 做出相反的取捨:寫入在被確認前必須跨 Region 協調,因此兩個 Region 在同一刻修改同一項目是真正的衝突 — 而一方會得到這個例外,而非默默覆寫。

為什麼會發生

  • 同一項目同時從多個 Region 寫入 — 兩個應用部署都把該項目當作自己該更新的。
  • 熱協調項目 — 計數器、鎖,或被每個 Region 觸及的單例設定項目,是天然的衝突磁鐵。
  • 跨 Region 的重試風暴 — 來自不同 Region 對同一邏輯操作的同時重試持續重新碰撞。

如何修正

  1. 以指數退避與抖動重試 — 衝突是短暫的;一旦另一個 Region 的寫入完成,重試便繼續。AWS 標記這個錯誤為可重試:

    // let the SDK's adaptive retry handle it, or catch and back off:
    catch (e) {
      if (e.name === 'ReplicatedWriteConflictException') return retryWithBackoff(op);
      throw e;
    }
  2. 給項目一個家 Region — 將給定鍵的寫入透過一個 Region 路由(依使用者居住地、租戶或 partition),讓其他 Region 大多唯讀。當只有一個 Region 變更項目時,爭用便消失。

  3. 讓並行更新可交換 — 對個別屬性的原子計數器更新(ADD / SET x = x + :n)比對整個項目的讀-改-寫循環衝突更少。

  4. 輸掉競爭後重新檢查意圖 — 另一個 Region 改變了項目;一個條件式重試(對版本屬性的 ConditionExpression)確保你的寫入對新狀態仍然有效。

當資料擺在眼前時,觀察項目跨 Region 的變化容易得多 — DynoTable 桌面應用程式連到每個複本 Region,讓你能並排比較項目,而 DynamoDB 定價計算器估算複製寫入的成本。

相關錯誤

References

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

DynoTable 是一款快速的 DynamoDB 桌面用戶端 — 瀏覽表格、執行 SQL 風格的查詢,並在本機編輯項目。