繁体   English   中英

在 DynamoDB 中更新批量数据而不是扫描和查询的最有效方法是什么

[英]what is the most efficient way to update bulk data inside DynamoDB rather than scan and query

我有一个包含大量类别键的表。 我想通过批量请求(例如 update key#1, key#3 )更新其中一些类别,表架构如下:

PK SK
键#1 名字#1
键#2 姓名#2
键#4 姓名#4

如您所见,表中没有键#3。 我想根据我的批量请求编写一个高效的查询来更新 (key#1, key#3)。
所以我想要最有效的方法来做到这一点,同时我不希望我的更新失败而不被注意到。

  • 我知道一种方法是执行扫描操作以查看表是否包含我的数组,这根本没有效率。
  • 另一个将使用循环来查询数据库以标记哪些键存在,哪些不存在。 然后尝试更新其余的。 我也不认为这可能是个好主意。
  • 我想到的最后一件事,我认为可能可行的是,尝试使用包含所有更新的交易项目来更新数据库,而不检查这些记录是否存在。 因为我希望如果这些键中的任何一个更新操作失败,这一个会返回一个错误。 直觉上我认为这可能是一种更有效的方式(它来自我的 SQL 背景)。

所以我想知道是否有比上述三种更有效的方法?
以及我的最新方法是否合适。
这样做的利弊是什么?

经过大量挖掘,我发现没有直接的解决方案。 但我们可以使用条件表达式并利用本地编程语言的多线程、多处理等类似功能以某种方式模拟它。

这是我发现的:

  • 实现这一点的方法是通过条件表达式,您可以在其中定义属性的状态或其存在状态。
  • 问题是条件表达式不适用于 batchWriteItems,它们仅适用于 TransactWriteItems。
  • TransactWriteItems 比正常操作慢两倍。 因此,关于性能要求,这将不适用。
  • 所以最好的方法是多次使用带有条件表达式的单个 putItem。
  • 为了获得最佳性能,我们可以根据我们使用的编程语言利用多线程或并发或多处理功能,并同时并行调用例如 100 个查询(AWS-DynamoDB 可以处理)。只要确保您已经处理好吞吐量).

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM