对中的 DynamoDB 数据源进行版本控制 Amazon AppSync - Amazon AppSync GraphQL
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对中的 DynamoDB 数据源进行版本控制 Amazon AppSync

Amazon AppSync 目前支持 DynamoDB 数据源的版本控制。冲突检测、冲突解决和同步操作需要 Versioned 数据来源。在数据源上启用版本控制后, Amazon AppSync 将自动:

  • 使用对象版本化元数据增强项目。

  • 将对具有 Amazon AppSync 突变的项目所做的更改记录到 Delt a 表中。

  • 使用“逻辑删除”将基本 表中的已删除项目保留可配置的时间。

版本控制的数据来源配置

对 DynamoDB 数据来源启用版本控制时,可以指定以下字段:

BaseTableTTL

使用“逻辑删除”(一个元数据字段,指示项目已被删除)保留基本 表中已删除项目的分钟数。如果希望删除项目时立即将其移除,则可以将此值设置为 0。该字段为必填。

DeltaSyncTableName

存储对具有 Amazon AppSync 突变的项目所做的更改的表的名称。该字段为必填。

DeltaSyncTableTTL

增量 表中保留项目的分钟数。该字段为必填。

增量同步表日志记录

Amazon AppSync 目前支持使用PutItemUpdateItem和 Dynamo DeleteItem DB 操作对突变进行增量同步日志记录。

当 Amazon AppSync 突变更改版本化数据源中的项目时,该更改的记录将存储在针对增量更新进行了优化的增量表中。您可以选择对其他版本化数据源使用不同的 Delta 表(例如,每种类型一个,每个域区域一个),或者对您的 API 使用单个 Delta 表。 Amazon AppSync 建议不要对多个增量表使用单个 Delta 表, APIs 以免主键发生冲突。

此表所需的架构如下所示:

ds_pk

用作分区键的字符串值。这是将基本数据来源名称和更改发生日期的 ISO 8601 格式连接在一起而构建的(例如 Comments:2019-01-01)。

将 VTL 映射模板中的customPartitionKey标志设置为分区键的列名时(参见《Amazon AppSync 开发者指南》中的 DynamoDB 解析器映射模板参考),格式会ds_pk发生变化,字符串是通过在基表的新记录中追加分区键的值来构造的。例如,如果 表中的记录的分区键值为 1a,排序键值为 2b,则字符串的新值为:Comments:2019-01-01:1a

ds_sk

用作排序键的字符串值。这是将更改发生时间的 ISO 8601 格式、项目的主键和项目的版本连接在一起而构建的。这些字段的组合保证了增量 表中的每个条目的唯一性(例如,如果时间为 09:30:00,ID 为1a,版本为 2,则该值为 09:30:00:1a:2)。

将 VTL 映射模板中的customPartitionKey标志设置为分区键的列名时(参见《Amazon AppSync 开发者指南》中的 DynamoDB 解析器映射模板参考),格式会ds_sk发生变化,字符串的构造方法是将组合键的值替换为基表中的排序键的值。使用上面的示例,如果 表中的记录的分区键值为 1a,排序键值为 2b,则字符串的新值为:09:30:00:2b:3

_ttl

一个数值,用于存储应从增量 表中移除项目时的时间戳(以纪元秒为单位)。此值是通过将数据来源上配置的 DeltaSyncTableTTL 值添加到发生更改那一刻的时间来确定的。该字段应配置为 DynamoDB TTL 属性。

配置为与基本 表一起使用的 IAM 角色还必须包含对增量 表进行操作的权限。在该示例中,显示了名为 Comments 表和名为 ChangeLog增量 表的权限策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:000000000000:table/Comments", "arn:aws:dynamodb:us-east-1:000000000000:table/Comments/*", "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog", "arn:aws:dynamodb:us-east-1:000000000000:table/ChangeLog/*" ] } ] }

版本控制的数据来源元数据

Amazon AppSync 代表您管理Versioned数据源上的元数据字段。自行修改这些字段可能会导致应用程序中的错误或数据丢失。这些字段包括:

_version

一个单调递增的计数器,在项目发生更改时随时更新。

_lastChangedAt

一个数值,用于存储上次修改项目时的时间戳(以纪元毫秒为单位)。

_deleted

一个布尔型“逻辑删除”值,指示项目已被删除。应用程序可以使用此功能从本地数据存储中移除已删除的项目。

_ttl

一个数值,用于存储应从底层数据来源中移除项目时的时间戳(以纪元秒为单位)。

ds_pk

用作增量 表的分区键的字符串值。

ds_sk

用作增量 表的排序键的字符串值。

gsi_ds_pk

生成的字符串值属性,用于支持将全局二级索引作为分区键。只有在 VTL 映射模板中同时启用customPartitionKeypopulateIndexFields标志时,才会将其包括在内(参见《开发者指南》中的 DynamoDB 解析器映射模板参考)。Amazon AppSync 如果启用,则将基本 数据来源名称和更改发生日期的 ISO 8601 格式连接在一起以构建该值(例如,如果表名为 Comments,该记录将设置为 Comments:2019-01-01)。

gsi_ds_sk

生成的字符串值属性,用于支持将全局二级索引作为排序键。只有在 VTL 映射模板中同时启用customPartitionKeypopulateIndexFields标志时,才会将其包括在内(参见《开发者指南》中的 DynamoDB 解析器映射模板参考)。Amazon AppSync 如果启用,则将更改发生时间的 ISO 8601 格式、 表中的项目的分区键、表中的项目的排序键以及项目的版本连接在一起以构建该值(例如,如果时间为 09:30:00,分区键值为 1a,排序键值为 2b,版本为 3,则该值为 09:30:00:1a#2b:3)。

这些元数据字段将影响基础数据源中项目的总体大小。 Amazon AppSync 建议在设计应用程序时为版本化数据源元数据保留 500 字节以上的最大主键大小的存储空间。要在客户端应用程序中使用此元数据,请在您的 GraphQL 类型和变更的选择集中包括 _version_lastChangedAt_deleted 字段。