同步
通过使用 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_pk
和gsi_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)) }