来自关系背景,我习惯于能够写这样的东西:
UPDATE Table Set X = 1 Where Y = 2
然而,这样的操作在像 Dynamodb 这样的数据库中似乎很难完成。假设我已经对 Y = 2 的项目进行了查询。
在我看来,提供的 API 有两个选项:
update
请求,或 batch write
并将所有数据写回,并应用更新。 这两种方法在性能方面看起来都很糟糕。
我在这里遗漏了一些明显的东西吗?或者,非关系数据库是否不是为了处理这种规模的“更新”而设计的——如果是这样,我能否在不增加性能成本的情况下实现类似的目标?
最佳答案
不,你没有遗漏任何明显的东西。不幸的是,这些是您使用 DynamoDB 的唯一选择,但需要注意的是,BatchWrite 一次只能批量提交 25 个更新操作,因此您仍然可能需要发出多个 BatchWrite 请求。
BatchWrite 更像是 DynamoDB API 提供的一种便利,可帮助您节省网络流量,将 25 个请求的开销减少到一个请求的开销,但除此之外并没有节省多少。
BatchWrite API 也比单独的 Update 和 Put 项 API 灵活一些,因此在某些情况下,最好自己处理并发性并仅使用底层操作。
当然,最好的方案是如果您可以构建您的解决方案,这样您就不需要对 DynamoDB 表执行大量更新。写入很昂贵,如果您发现自己经常需要更新表的大部分内容,那么可能有一种替代设计可以使用。
关于amazon-dynamodb - DynamoDb - 如何进行批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41561230/