选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

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

聚焦模式
对中的 DynamoDB 数据源进行版本控制 AWS AppSync - AWS AppSync GraphQL

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

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

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

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

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

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

版本控制的数据来源配置

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

BaseTableTTL

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

DeltaSyncTableName

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

DeltaSyncTableTTL

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

增量同步表日志记录

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

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

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

ds_pk

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

将 VTL 映射模板中的customPartitionKey标志设置为分区键的列名时(参见《AWS 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标志设置为分区键的列名时(参见《AWS 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/*" ] } ] }

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

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

_version

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

_lastChangedAt

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

_deleted

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

_ttl

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

ds_pk

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

ds_sk

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

gsi_ds_pk

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

gsi_ds_sk

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

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

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。