Sync - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Sync

Sync請求對應文件可讓您從 DynamoDB 表擷取所有結果,然後僅接收自上次查詢後變更的資料 (差異更新)。 Sync請求只能對已建立版本化的 DynamoDB 資料來源發出。您可以指定下列選項:

  • 排除結果的篩選結果

  • 要傳回多少項目

  • 分頁字符

  • 上次起始 Sync 操作時

Sync 映射文件結構如下:

{ "version" : "2018-05-29", "operation" : "Sync", "basePartitionKey": "Base Tables PartitionKey", "deltaIndexName": "delta-index-name", "limit" : 10, "nextToken" : "aPaginationToken", "lastSync" : 1550000000000, "filter" : { ... } }

欄位定義如下:

同步欄位

version

範本定義的版本。目前僅支援 2018-05-29。此值為必填。

operation

要執行 DynamoDB 支援作業。若要執行 Sync 操作,這必須設定為 Sync。此值為必填。

filter

可用於在傳回 DynamoDB 結果之前篩選結果的篩選器。如需篩選條件的詳細資訊,請參閱篩選條件。此欄位為選用欄位。

limit

單次可評估的項目數量上限。此欄位為選用欄位。如果省略此值,預設限制將設為 100 個項目。此欄位的最大值為 1000 個項目。

nextToken

分頁字符將繼續先前的查詢。這會是從先前查詢所取得的。此欄位為選用欄位。

lastSync

上次成功啟動 Sync 操作的時間 (以毫秒為單位)。如果指定此值,只會傳回 lastSync 之後變更的項目。這個欄位是選用的,而且只有在初始 Sync 操作擷取所有頁面之後才能填入。如果省略此值,將傳回 Base 資料表的結果,否則會傳回 Delta 資料表的結果。

basePartitionKey

執行Sync作業時使用的 Base 資料表的資料分割索引鍵。此欄位允許在Sync資料表使用自訂分割區索引鍵時執行作業。此為選用欄位。

deltaIndexName

用於Sync作業的索引。當資料表使用自訂分割區索引鍵時,需要此索引才能在整個 delta 儲存資料表上啟用Sync作業。作Sync業將在 GSI (建立於gsi_ds_pkgsi_ds_sk) 上執行。此欄位為選用欄位。

DynamoDB 同步傳回的結果會自動轉換為 GraphQL 和JSON原始類型,並可在對應內容 () 中使用。$context.result

如需 DynamoDB 類型轉換的詳細資訊,請參閱類型系統 (回應對映)。

如需有關回應對映範本的詳細資訊,請參閱解析器對映範本概觀。

結果的結構如下:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10, startedAt = 1550000000000 }

欄位定義如下:

items

包含同步傳回項目的清單。

nextToken

如果可能有更多結果,則nextToken包含您可以在另一個請求中使用的分頁令牌。 AWS AppSync 加密和混淆從 DynamoDB 傳回的分頁權杖。這樣可確保資料表的資料不會不慎洩漏給發起人。此外,這些分頁字符在不同解析程式之間無法使用。

scannedCount

DynamoDB 在套用篩選器運算式 (如果存在) 之前擷取的項目數。

startedAt

開始同步操作時,可以在本機存放並在另一個請求中做為 lastSync 引數的時間 (以 epoch 毫秒為單位)。如果請求中包含分頁字符,則該值將與請求針對第一頁結果傳回的值相同。

範例

下列範例是 GraphQL 查詢的對應範本:syncPosts(nextToken: String, lastSync: AWSTimestamp)

在此範例中,如果省略 lastSync,則會傳回 Base 資料表中的所有項目。如果提供 lastSync,只會傳回自 lastSync 變更之 Delta Sync 資料表中的項目。

{ "version" : "2018-05-29", "operation" : "Sync", "limit": 100, "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)), "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null)) }