amazon-web-services - 使用排序键的 DynamoDB 版本控制
问题描述
任何使用排序键实现版本控制的人,如https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html中所述?
尝试使用打字稿来实现这一点,以构建包含项目版本的数据库。有什么方法可以使用 updateItem 执行此操作,还是需要 get + put 操作?
任何让我开始或帮助的样本都非常感谢!
解决方案
使用排序键进行版本控制的概念涉及创建一个使用相同分区键和不同排序键的全新项目。
DynamoDB 提供了一些允许以原子方式更新对象中的值的操作,这个用例非常适合当您有计数器或数量之类的东西并且您想要减少/增加它而无需先读取其值时。-文档在这里。
如前所述,在您尝试实现的情况下,您实际上是在创建一个新对象。DynamoDB 本身没有任何版本控制的概念,这种模式的作用是巧妙地利用 Partition Key 和 Sort Key 之间的关系以及 PK 可以关联多个 SK 的事实来关联同一张桌子。
要回答您的问题,如果您的唯一事实来源(或数据存储)是 DynamoDB,那么是的,您的客户必须首先查询表以了解正在更新的项目的最新版本,然后插入新版本。如果您在其他地方记录此信息并且仅使用 DynamoDB 来存储这些版本,那么不,一个 put 操作就足够了,但同样,这假设您可以在其他地方检索此信息。
就示例而言,AWS SDK 的官方文档始终是一个好的开始,在您的情况下,我假设您会想要使用可以在此处找到的 Javascript 文档。
在非常高的级别上,您必须执行以下操作:
- 创建一个
AWS.DynamoDB()
客户端。 - 使用该方法执行查询
dynamodb.query()
并指定要更新的项目的 PK。 - 遍历从上一个查询返回的项目(行),找到版本号较大的项目(行)为 SK。
dynamodb.putItem()
使用传递具有递增版本号作为 SK 和相同 PK 的项目的方法放置一个新项目。
推荐阅读
- typescript - 如何在打字稿中使用或使用变量?
- flutter - 返回类型 'Future
Function()' 不是“未来” ',根据闭包上下文的要求 - html - 如何垂直对齐表格元素中的元素?
- qt - 带有图像的 QT 按钮如何透明/不透明
- deployment - 零停机 Google Compute Engine (GCE) 部署
- c# - 多文档报告查看器 RDLC C#(CMR 传输文档)
- plc - 使用 Soft-PLC 的分散式 PLC 网络
- python - 不工作 在 Python 中使用 PIL 的中心文本不起作用
- spring - 如何修复“考虑在您的配置中定义一个 'org.jooq.DSLContext' 类型的 bean。” 更新到 jOOQ 3.15.0 后
- apache-kafka - 如何检查卡夫卡的节流率?