DynamoDB 是最終一致的嗎?

預設是。DynamoDB 的讀取是最終一致的:緊接在一次寫入之後的讀取可能不會反映那次寫入,但稍後再讀一次就會回傳最新的項目。你可以在資料表與 LSI 上選用強一致性讀取;全域次要索引則永遠是最終一致的。

最終一致性(預設)

一次最終一致性讀取可能不會反映一次剛完成的寫入。過一會兒再讀一次,它就會回傳目前的值。這個模式是預設,而它的計費是強一致性讀取的一半。

強一致性讀取

設定 ConsistentRead: true 就能取得最近一次已提交的資料(一次強一致性讀取)。基礎資料表與本地次要索引(LSI)支援這一項 — 但全域次要索引(GSI)與 DynamoDB Streams 支援,它們永遠是最終一致的。

GSI 的這項排除是在 API 層強制執行的,不是留給你自己去遵守:對一個全域次要索引下 ConsistentRead: trueQuery 會讓整個請求失敗,而不是悄悄把它降級(確切的拒絕內容)。

這個選擇要花多少錢

「半價」是文件記載的規則;以下是它換算出來的樣子。以 us-east-1、每秒 1,000 次 4 KB 項目的讀取,其他什麼都不算:

一致性每次讀取的讀取單位隨需/月佈建/月
最終一致性0.5$164.25$47.45(500 RCU)
強一致性1$328.50$94.90(1,000 RCU)

輸入條件,好讓你能自己核對:一個 730 小時的月份有 2,628,000 秒、每百萬讀取請求單位 $0.125、每 RCU-小時 $0.00013。一個 4 KB 的項目是一個讀取單位,最終一致性時折半。

所以每月 $164 就是在這個工作負載上「永遠不讀到過期項目」的常設價碼。那對一個帳戶餘額來說很便宜,對一份商品清單來說則是浪費,這也是為什麼那個旗標是逐請求而不是逐資料表設定的。用定價計算機替你自己的數字標價。

為什麼會是這樣運作

DynamoDB 會自動把你的資料複寫到三個可用區域。最終一致性讓讀取不必等待每一份副本就能被服務 — 更快也更便宜;強一致性則回傳最新的資料。

那多區域(全域資料表)呢?

跨區域複寫有它自己的一致性設定。全域資料表預設是多區域最終一致性(MREC),變更通常會在一秒或更短的時間內複寫到其他區域。你也可以改為建立採用多區域強一致性(MRSC)的全域資料表:寫入會同步複寫到至少一個其他區域,而在任一個複本上的強一致性讀取,永遠會回傳某個項目的最新版本。

深入了解

閱讀 DynamoDB 一致性了解完整的取捨。下載 DynoTable 就能在你的查詢上切換讀取一致性。

參考資料

最後查證於 2026-07-13,對照上方連結的官方 AWS 文件;單價已於 2026-07-28 重新核對。

GSI 的那次拒絕已於 2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0(amazon/dynamodb-local:latest)重現,而那張成本表是用計算機所使用的同一份定價資料計算出來的。

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

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。