使用排序键的 DynamoDB 版本控制

Tre*_*tti 2 amazon-web-services nosql amazon-dynamodb amazon-dynamodb-streams

任何人都使用https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html中所述的排序键实现了版本控制?

尝试使用打字稿来实现这一点,以构建包含项目版本的数据库。有没有什么方法可以使用 updateItem 来执行此操作,或者是否需要 get + put 操作?

非常感谢任何帮助我入门或帮助的示例!

And*_*IDK 5

使用排序键进行版本控制的概念涉及创建使用相同分区键和不同排序键的全新项目。

DynamoDB 提供了一些允许以原子方式更新对象内的值的操作,此用例非常适合当您有计数器或数量之类的东西并且您希望减少/增加它而不必先读取其值时。-文档在这里

在您试图实现的情况下,如上所述,您本质上是在创建一个新对象。DynamoDB 本身没有任何版本控制的概念,这种模式的作用是巧妙地利用分区键和排序键之间的关系以及 PK 可以有多个与其关联的 SK 的事实,以将多行关联起来。同一张桌子。

要回答您的问题,如果您唯一的事实来源(或数据存储)是 DynamoDB,那么是的,您的客户端必须首先查询表以了解正在更新的项目的最后一个版本,然后插入新版本。如果您在其他地方记录此信息并且仅使用 DynamoDB 来存储这些版本,那么不行,一次 put 操作就足够了,但同样,这假设您可以在其他地方检索此信息。

就示例而言,AWS SDK 的官方文档始终是一个良好的开始,对于您的情况,我假设您需要使用 Javascript 文档,您可以在此处找到。

在非常高的级别上,您必须执行以下操作:

  • 创建一个AWS.DynamoDB()客户端。
  • 使用该方法执行查询dynamodb.query()并指定要更新的项目的 PK。
  • 遍历上一个查询返回的项目(行),找到版本号较大的项目(行)作为 SK。
  • dynamodb.putItem()使用传递具有递增版本号的项目作为 SK 和相同 PK 的方法来放置新项目。