DynamoDB 全域資料表版本 - Amazon DynamoDB

DynamoDB 全域資料表版本

DynamoDB 全域資料表有兩種版本可用:全域資料表 2019.11.21 版 (目前版本) 和全域資料表 2017.11.29 版 (舊版)。建議您使用全域資料表 2019.11.21 版 (目前版本),因為其比 2017.11.29 版 (舊版) 更易於使用、支援更多區域,且大多數的工作負載成本更低。

判斷全域資料表版本

使用 AWS CLI 判斷版本

識別全域資料表 2019.11.21 版 (目前版本) 複本

若要判斷資料表是否為全域資料表 2019.11.21 版 (目前版本) 複本,請針對資料表調用 describe-table 命令。如果輸出的 GlobalTableVersion 屬性含 "2019.11.21" 值,則資料表為 2019.11.21 版 (目前版本) 全域資料表複本。

describe-table 範例 CLI 命令:

aws dynamodb describe-table \ --table-name users \ --region us-east-2

(簡略版) 輸出的 GlobalTableVersion 屬性包含 "2019.11.21" 值,因此這個資料表是 2019.11.21 版 (目前版本) 全域資料表複本。

{ "Table": { "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S" }, { "AttributeName": "name", "AttributeType": "S" } ], "TableName": "users", ... "GlobalTableVersion": "2019.11.21", "Replicas": [ { "RegionName": "us-west-2", "ReplicaStatus": "ACTIVE", } ], ... } }

識別全域資料表 2017.11.29 版 (舊版) 複本

全域資料表 2017.11.29 版 (舊版) 使用一組專用命令進行全域資料表管理。若要判斷資料表是否為全域資料表 2017.11.29 版 (舊版) 複本,請針對資料表調用 describe-global-table 命令。如果您收到成功回應,則資料表是 2017.11.29 版 (舊版) 全域資料表複本。如果 describe-global-table 命令傳回 GlobalTableNotFoundException 錯誤,則資料表不是 2017.11.29 版 (舊版) 複本。

describe-global-table 範例 CLI 命令:

aws dynamodb describe-global-table \ --table-name users \ --region us-east-2

命令傳回成功回應,因此這個資料表是 2017.11.29 版 (舊版) 全域資料表複本。

{ "GlobalTableDescription": { "ReplicationGroup": [ { "RegionName": "us-west-2" }, { "RegionName": "us-east-2" } ], "GlobalTableArn": "arn:aws:dynamodb::123456789012:global-table/users", "CreationDateTime": "2025-06-10T13:55:53.630000-04:00", "GlobalTableStatus": "ACTIVE", "GlobalTableName": "users" } }

使用 DynamoDB 主控台判斷版本

若要識別全域資料表複本的版本,請執行下列動作:

  1. https://console.aws.amazon.com/dynamodb/home 開啟 DynamoDB 主控台。

  2. 在主控台左側的導覽窗格中,選擇 Tables (資料表)。

  3. 選擇您要識別全域資料表版本的資料表。

  4. 選擇 Global Tables (全域資料表) 標籤。

    摘要區段會顯示所使用的全域資料表版本。

舊版和目前版本之間的行為差異

下列清單說明全域資料表舊版和目前版本之間的行為差異。

  • 相較於 2017.11.29 版 (舊版),2019.11.21 版 (目前版本) 進行數個 DynamoDB 操作時耗用的寫入容量較少,因此,對大多數客戶來說更具成本效益。這些 DynamoDB 操作的差異如下:

    • 針對區域中的 1KB 項目調用 PutItem 並複寫到其他區域時,2017.11.29 版 (舊版) 每個區域需要 2 個 rWRU,但 2019.11.21 版 (目前版本) 只需要 1 個 rWRU。

    • 針對 1KB 項目調用 UpdateItem 時,2017.11.29 版 (舊版) 來源區域需要 2 個 rWRU,且每個目的地區域需要 1 個 rWRU,但在 2019.11.21 版 (目前版本) 的來源和目的地區域都只需要 1 個 rWRU。

    • 針對 1KB 項目調用 DeleteItem 時,2017.11.29 版 (舊版) 來源區域需要 1 個 rWRU,且每個目的地區域需要 2 個 rWRU,但在 2019.11.21 版 (目前版本) 的來源或目的地區域都只需要 1 個 rWRU。

    下表列出針對兩個區域中 1KB 項目 2017.11.29 版 (舊版) 和 2019.11.21 版 (目前版本) 資料表耗用的 rWRU。

    作業 2017.11.29 (舊版) 2019.11.21 (目前版本) 節省
    PutItem 4 個 rWRU 2 個 rWRU 50%
    UpdateItem 3 個 rWRU 2 個 rWRU 33%
    DeleteItem 3 個 rWRU 2 個 rWRU 33%
  • 2017.11.29 版 (舊版) 僅適用於 11 個 AWS 區域。不過,2019.11.21 版 (目前版本) 可在所有 AWS 區域 中使用。

  • 您可以先建立一組空白區域資料表,然後調用 CreateGlobalTable API 構成全域資料表,藉此建立 2017.11.29 版 (舊版) 全域資料表。您可以調用 UpdateTable API 將複本新增至現有區域資料表,藉此建立 2019.11.21 版 (目前版本) 全域資料表。

  • 使用 2017.11.29 版 (舊版) 時,您必須先清空資料表中的所有複本,才能在新區域中新增複本 (包括建立期間)。若使用 2019.11.21 版 (目前版本),即使資料表已包含資料,仍支援將複本新增至區域,或移除複本。

  • 2017.11.29 版 (舊版) 使用下列專用控制平面 API 來管理複本:

    2019.11.21 版 (目前版本) 使用 DescribeTableUpdateTable API 來管理複本。

  • 針對每個寫入,2017.11.29 版 (舊版) 會發布兩個 DynamoDB Streams 記錄;2019.11.21 版 (目前版本) 只會發布一個 DynamoDB Streams 記錄。

  • 2017.11.29 版 (舊版) 會填入並更新 aws:rep:deletingaws:rep:updateregionaws:rep:updatetime 屬性。2019.11.21 版 (目前版本) 不會填入或更新這些屬性。

  • 2017.11.29 版 (舊版) 不會跨複本同步 使用 DynamoDB 的存留時間 (TTL) 功能 設定。2019.11.21 版 (目前版本) 會跨複本同步 TTL 設定。

  • 2017.11.29 版 (舊版) 不會將 TTL 刪除複寫至其他複本。2019.11.21 版 (目前版本) 會將 TTL 刪除複寫至所有複本。

  • 2017.11.29 版 (舊版) 不會跨複本同步自動擴展設定。2019.11.21 版 (目前版本) 會跨複本同步自動擴展設定。

  • 2017.11.29 版 (舊版) 不會跨複本同步全域次要索引 (GSI) 設定。2019.11.21 版 (目前版本) 會跨複本同步 GSI 設定。

  • 2017.11.29 版 (舊版) 不會跨複本同步靜態加密設定。2019.11.21 版 (目前版本)會跨複本同步靜態加密設定。

  • 2017.11.29 版 (舊版) 發布 PendingReplicationCount 指標。2019.11.21 版 (目前版本) 不會發布此指標。

升級到目前版本

全域資料表升級所需的許可

若要升級至 2019.11.21 版 (目前版本),您必須擁有所有複本區域的 dynamodb:UpdateGlobalTableversion 許可。除了存取 DynamoDB 主控台和檢視資料表的必要許可,您還需要這些許可。

下列 IAM 政策會授予許可,將任何全域資料表更新至 2019.11.21 版 (目前版本)。

{ "version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:UpdateGlobalTableversion", "Resource": "*" } ] }

下列 IAM 政策會授予許可,只將 Music 全域資料表 (在兩個區域中具有複本) 升級為 2019.11.21 版 (目前版本)。

{ "version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "dynamodb:UpdateGlobalTableversion", "Resource": [ "arn:aws:dynamodb::123456789012:global-table/Music", "arn:aws:dynamodb:ap-southeast-1:123456789012:table/Music", "arn:aws:dynamodb:us-east-2:123456789012:table/Music" ] } ] }

升級期間預期會發生的情況

  • 升級時,所有全域資料表複本會繼續處理讀取和寫入流量。

  • 升級程序需要幾分鐘到幾個小時,取決於資料表大小和複本數量而定。

  • 在升級過程中,TableStatus 的值會從 ACTIVE 變更為 UPDATING。您可以調用 DescribeTable API 或使用資料表檢視,來檢視資料表的狀態。

  • 在升級資料表時,自動擴展不會調整全域資料表的佈建容量設定。強烈建議您在升級期間將資料表設為隨需容量模式。

  • 如果您選擇在升級期間使用佈建容量搭配自動擴展,則必須提高政策的讀取和寫入輸送量下限,以容納升級期間預期增加的流量,以免限流情況發生。

  • 在升級過程中,ReplicationLatency 指標可以暫時回報延遲峰值,或停止回報指標資料。如需詳細資訊,請參閱 ReplicationLatency

  • 升級程序完成時,資料表狀態會變更為 ACTIVE

升級前、中、後的 DynamoDB Streams 行為

作業 複本區域 升級前的行為 升級期間的行為 升級後的行為

Put 或 Update

來源

使用 UpdateItem 時會發生時間戳記填入。 使用 PutItem 時會發生時間戳記填入。 不會產生客戶可見的時間戳記。
會產生兩個 Streams 記錄。第一個記錄包含客戶撰寫的屬性。第二個記錄包含 aws:rep:* 屬性。 會產生兩個 Streams 記錄。第一個記錄包含客戶撰寫的屬性。第二個記錄包含 aws:rep:* 屬性。 會產生單一 Streams 記錄,其中包含客戶撰寫的屬性。
每個客戶寫入會耗用兩個 rWCU。 每個客戶寫入會耗用兩個 rWCU。 每個客戶寫入會耗用一個 rWCU。
ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatency 指標會發布至 CloudWatch。

目的地

複寫會使用 PutItem 進行。 複寫會使用 PutItem 進行。 複寫會使用 PutItem 進行。
會產生單一 Streams 記錄,其中包含客戶撰寫的屬性和 aws:rep:* 屬性。 會產生單一 Streams 記錄,其中包含客戶撰寫的屬性和 aws:rep:* 屬性。 會產生單一 Streams 記錄,其中僅包含客戶撰寫的屬性,而沒有複寫屬性。
如果項目存在於目的地區域中,會耗用一個 rWCU。如果項目不存在於目的地區域中,則會耗用兩個 rWCUs。 如果項目存在於目的地區域中,會耗用一個 rWCU。如果項目不存在於目的地區域中,則會耗用兩個 rWCUs。 每個客戶寫入會耗用一個 rWCU。
ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatency 指標會發布至 CloudWatch。

刪除

來源

使用 DeleteItem 刪除時間戳記較小的任何項目。 使用 DeleteItem 刪除時間戳記較小的任何項目。 使用 DeleteItem 刪除時間戳記較小的任何項目。
會產生單一 Streams 記錄,其中包含客戶撰寫的屬性和 aws:rep:* 屬性。 會產生單一 Streams 記錄,其中包含客戶撰寫的屬性和 aws:rep:* 屬性。 會產生單一 Streams 記錄,其中包含客戶撰寫的屬性。
每個客戶刪除會耗用一個 rWCU。 每個客戶刪除會耗用一個 rWCU。 每個客戶刪除會耗用一個 rWCU。
ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatency 指標會發布至 CloudWatch。

目的地

刪除按下列兩個階段進行:

  • 在階段 1 中,UpdateItem 會設定刪除旗標。

  • 在階段 2 中,DeleteItem 會刪除項目。

使用 DeleteItem 刪除項目。 使用 DeleteItem 刪除項目。
會產生兩個 Streams 記錄。第一個記錄包含 aws:rep:deleting 欄位的變更。第二個記錄包含客戶撰寫的屬性和 aws:rep:* 屬性。 會產生單一 Stream 記錄,其中包含客戶撰寫的屬性。 會產生單一 Stream 記錄,其中包含客戶撰寫的屬性。
每個客戶刪除會耗用兩個 rWCUs。 每個客戶刪除會耗用一個 rWCU。 每個客戶刪除會耗用一個 rWCU。
ReplicationLatencyPendingReplicationCount 指標會發布至 CloudWatch。 ReplicationLatency 指標會發布至 CloudWatch。 ReplicationLatency 指標會發布至 CloudWatch。

升級到 2019.11.21 版(目前版本)

請執行下列步驟,使用 AWS 管理主控台 升級 DynamoDB 全域資料表版本。

將全域資料表升級至 2019.11.21 版 (目前版本)
  1. https://console.aws.amazon.com/dynamodb/home 開啟 DynamoDB 主控台。

  2. 在主控台左側的導覽窗格中,選擇資料表,然後選取您要升級至 2019.11.21 版 (目前版本) 的全域資料表。

  3. 選擇 Global Tables (全域資料表) 標籤。

  4. 選擇 Update version (更新版本)。

    主控台螢幕擷取畫面,其中顯示 Update (更新) 版本按鈕。
  5. 閱讀並同意新的要求,然後選擇 Update version (更新版本)。

  6. 升級程序完成之後,主控台上出現的全域資料表版本會變更為 2019.11.21