同步 - AWS AppSync

同步

通过使用 Sync 请求映射文档,您可以从 DynamoDB 表中检索所有结果,然后仅接收自上次查询以来更改的数据(增量更新)。只能对版本控制的 DynamoDB 数据来源发出 Sync 请求。您可以指定:

  • 排除结果的筛选条件

  • 要返回多少个项目

  • 分页标记

  • 上次 Sync 操作开始时间

Sync 映射文档具有以下结构:

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

字段定义如下:

Sync 字段

version

模板定义版本。当前仅支持 2018-05-29。该值为必填项。

operation

要执行的 DynamoDB 操作。要执行 Sync 操作,该字段必须设置为 Sync。该值为必填项。

filter

一个筛选条件,可用于在返回来自 DynamoDB 的结果之前对其进行筛选。有关筛选条件的更多信息,请参阅筛选条件。该字段是可选的。

limit

单次评估的最大项目数。该字段是可选的。如果省略,则默认限制将设置为 100 个项目。该字段的最大值为 1000 个项目。

nextToken

继续之前查询的分页标记。这应已从之前查询中获得。该字段是可选的。

lastSync

最后一次成功 Sync 操作开始的时刻(以纪元毫秒为单位)。如果指定,则仅返回 lastSync 之后更改的项目。该字段是可选的,只有在从初始 Sync 操作中检索所有页面后才能填充。如果省略,将返回基本 表中的结果,否则将返回增量 表中的结果。

basePartitionKey

执行 Sync 操作时使用的 表的分区键。在表使用自定义分区键时,该字段允许执行 Sync 操作。此为可选字段。

deltaIndexName

用于 Sync 操作的索引。在表使用自定义分区键时,需要使用该索引才能对整个增量存储表启用 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 包含一个分页标记,您可以在另一个请求中使用该标记。AWSAppSync 对从 DynamoDB 返回的分页标记进行加密和模糊处理。这可防止您的表数据无意中泄露给调用方。另外,无法跨不同的解析器使用这些分页标记。

scannedCount

在应用筛选条件表达式(如果有)之前 DynamoDB 检索的项目数。

startedAt

同步操作开始的时刻,以纪元毫秒为单位,您可以在本地存储该值并在其他请求中将其用作 lastSync 参数。如果请求中包含分页令牌,则该值将与请求针对第一页结果返回的值相同。

示例

以下示例是 GraphQL 查询 syncPosts(nextToken: String, lastSync: AWSTimestamp) 的映射模板。

在此示例中,如果省略 lastSync,则返回基表中的所有条目。如果提供了 lastSync,则只返回增量同步表中自 lastSync 以来发生更改的条目。

{ "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)) }