本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 中版本控制 DynamoDB 資料來源 AWS AppSync
AWS AppSync 目前支援 DynamoDB 資料來源上的版本控制。衝突偵測、衝突解決和同步作業需要 Versioned
資料來源。當您在資料來源上啟用版本控制時, AWS AppSync 會自動:
-
使用物件版本控制中繼資料增強項目。
-
記錄對 Delta 資料表具有 AWS AppSync 變動的項目所做的變更。
-
針對可設定的時間量,在具有「tombstone」的 Base 資料表中,維護已刪除的項目。
版本控制的資料來源組態
當您在 DynamoDB 資料來源上啟用版本控制時,請指定以下欄位:
-
BaseTableTTL
-
在具有「tombstone」的 Base 資料表中,保留已刪除項目的分鐘數 - 指出已刪除項目的中繼資料欄位。如果您想要在刪除項目時立即移除項目,可以將此值設為 0。此欄位為必填。
-
DeltaSyncTableName
-
以 AWS AppSync 變動儲存項目變更的資料表名稱。此欄位為必填。
-
DeltaSyncTableTTL
-
保留 Delta 資料表中項目的分鐘數。此欄位為必填。
Delta 同步資料表記錄
AWS AppSync 目前支援使用 PutItem
、 UpdateItem
和 DeleteItem
DynamoDB 操作進行變動的 Delta Sync Logging。
當 an AWS AppSync 變動變更版本控制資料來源中的項目時,該變更的記錄會存放在針對增量更新最佳化的 Delta 資料表中。您可以選擇針對其他版本控制的資料來源使用不同的 Delta 資料表 (例如,每種類型一個,每個網域區域一個),或針對您的 API 使用單一 Delta 資料表。 AWS AppSync 建議不要針對多個 APIs 使用單一 Delta 資料表,以避免主要金鑰發生衝突。
此資料表所需的結構描述如下所示:
-
ds_pk
-
用來做為分割區索引鍵的字串值。其建構方式是串連基本資料來源名稱和變更發生日期的 ISO 8601 格式 (例如
Comments:2019-01-01
)。當來自 VTL 映射範本的
customPartitionKey
旗標設定為分割區索引鍵的資料欄名稱時 (請參閱AWS AppSync 開發人員指南》中的 DynamoDB 解析程式映射範本參考),ds_pk
變更格式和字串的建構方式是將分割區索引鍵的值附加到基礎資料表的新記錄中。例如,如果 Base 資料表中的記錄具有分割區索引鍵值1a
和排序索引鍵值2b
,則字串的新值將為:Comments:2019-01-01:1a
。 -
ds_sk
-
用來做為排序索引鍵的字串值。其建構方式是串連變更發生時間的 ISO 8601 格式、項目的主索引鍵,以及項目的版本。這些欄位的組合保證 Delta 資料表中每個項目的唯一性 (例如,對於 的時間
09:30:00
和 的 ID1a
和 的版本2
,這會是09:30:00:1a:2
)。當來自 VTL 映射範本的
customPartitionKey
旗標設定為分割區索引鍵的資料欄名稱時 (請參閱 AWS AppSync 開發人員指南中的 DynamoDB 解析程式映射範本參考),ds_sk
變更格式和字串的建構方式是將組合索引鍵的值取代為基礎資料表中排序索引鍵的值。使用上述範例,如果 Base 資料表中的記錄具有分割區索引鍵值1a
和排序索引鍵值2b
,則字串的新值將為:09:30:00:2b:3
。 -
_ttl
-
此數值用於存放應該從 Delta 資料表中移除項目時的時間戳記 (以 epoch 秒為單位)。此值是透過將資料來源上設定的
DeltaSyncTableTTL
值加入發生變更的時刻所決定的。此欄位應該設定為 DynamoDB TTL 屬性。
設定為與 Base 資料表搭配使用的 IAM 角色必須也包含在 Delta 資料表上進行操作的許可。在此範例中,ChangeLog
會顯示名為 的基本資料表Comments
和名為 的 Delta 資料表的許可政策:
版本控制的資料來源中繼資料
AWS AppSync 會代表您管理Versioned
資料來源上的中繼資料欄位。自行修改這些欄位可能會導致應用程式發生錯誤或資料遺失。這些欄位包括:
-
_version
-
依序遞增的計數器,每當對項目進行變更時都會更新。
-
_lastChangedAt
-
此數值用於存放上次修改項目時的時間戳記 (以 epoch 毫秒為單位)。
-
_deleted
-
布林「tombstone」值,表示已刪除項目。應用程式可以使用此值,從本機資料存放區撤出已刪除的項目。
-
_ttl
-
此數值用於存放應該從基礎資料來源中移除項目時的時間戳記 (以 epoch 秒為單位)。
-
ds_pk
-
用來做為 Delta 資料表之分割區索引鍵的字串值。
-
ds_sk
-
用來做為 Delta 資料表之排序索引鍵的字串值。
gsi_ds_pk
-
產生的字串值屬性,以支援全域次要索引做為分割區索引鍵。只有在 VTL 映射範本中同時啟用
customPartitionKey
和populateIndexFields
旗標時,才會包含它 (請參閱AWS AppSync 開發人員指南》中的 DynamoDB 解析程式映射範本參考)。如果啟用,值將透過串連基礎資料來源名稱和變更發生日期的 ISO 8601 格式來建構 (例如,如果基礎資料表名為 Comments,則此記錄將設定為Comments:2019-01-01
)。 gsi_ds_sk
-
產生的字串值屬性,支援全域次要索引做為排序索引鍵。只有在 VTL 映射範本中同時啟用
customPartitionKey
和populateIndexFields
旗標時,才會包含它 (請參閱AWS AppSync 開發人員指南》中的 DynamoDB 解析程式映射範本參考)。如果啟用,值的建構方式是串連發生變更的時間的 ISO 8601 格式、基礎資料表中項目的分割區索引鍵、基礎資料表中項目的排序索引鍵,以及項目的版本 (例如 的時間09:30:00
、分割區索引鍵值1a
、排序索引鍵值2b
和 版本3
,這會是09:30:00:1a#2b:3
)。
這些中繼資料欄位會影響基礎資料來源中項目的整體大小。 AWS AppSync 建議在設計應用程式時為版本控制資料來源中繼資料預留 500 個位元組 + 最大主要金鑰大小的儲存空間。若要在用戶端應用程式中使用此中繼資料,請在 GraphQL 類型和變動選取範圍中包含 _version
、_lastChangedAt
和 _deleted
欄位。