Amazon dynamodb 在DynamoDB中更新或覆盖临时表中的项

Amazon dynamodb 在DynamoDB中更新或覆盖临时表中的项,amazon-dynamodb,Amazon Dynamodb,我在DynamoDB中有一个聚合数据的表,它是从staging_表中的质量检查数据填充的 我有几个脚本,它们在staging_表(所有项目)中执行扫描,进行某种计算或验证,并可能需要插入/更新这些staging项目的属性,然后才最终将其传输到实际的表。请注意,由于每个质量检查程序独立于其他程序,但它们是并行进行的,因此此完全扫描会发生多次 就成本和性能而言,这里最好使用哪一组DynamoDB操作?更客观地说,我最初想到的备选方案是: 使用批处理项写入覆盖数据的旧版本(因为PutItem是唯一可

我在DynamoDB中有一个聚合数据的
,它是从
staging_表
中的质量检查数据填充的

我有几个脚本,它们在
staging_表
(所有项目)中执行扫描,进行某种计算或验证,并可能需要插入/更新这些staging项目的属性,然后才最终将其传输到实际的
。请注意,由于每个质量检查程序独立于其他程序,但它们是并行进行的,因此此完全扫描会发生多次

就成本和性能而言,这里最好使用哪一组DynamoDB操作?更客观地说,我最初想到的备选方案是:

  • 使用批处理项写入覆盖数据的旧版本(因为
    PutItem
    是唯一可用的批处理操作)
  • 使用顺序
    UpdateItem
    操作(更多的API调用,但每个调用的成本更低)

有更好的办法吗?这种情况不适合DynamoDB吗?

我认为您的解决方案将取决于对您来说什么是重要的

  • 你运营的货币成本
  • 数据到达暂存表和在主表中可用之间的延迟
  • 简朴
消耗与PutItem和UpdateItem相同的数量,因此货币成本相同

BatchWriteItem应该减少暂存表和主表之间的延迟(与PutItem或UpdateItem相比),但这是以简单为代价的,因为批处理中的项目不能超过25个,每个项目不能超过400KB,并且批处理总量不能超过16MB。所以你有更多的代码要写。如果你达到了这些限制,你可以创建更小的批次,或者考虑用PUTITEM或UPDATEITETION编写自己的并行线程模型。 您可以通过增加表RCU和WCU来潜在地减少延迟。您需要优化这两个表之间的特定操作

只有当写作时间比阅读/分析时间重要时,尽量减少写作时间才可能重要。如果用UpdateItem进行扫描需要一分钟,后续写入需要一秒钟,那么使用batchwriteitem没有什么意义

我建议您将看到PutItem和UpdateItem之间几乎没有区别。它们使用相同数量的WCU,因此假设吞吐量有限,则不会有差异

一个要考虑的是,默认情况下读不一致,这意味着表可以在扫描的开始和结束之间改变。根据扫描质量的不同,您可能希望将ConsistentRead设置为true


我认为理想情况下,您应该使用最简单的方法对流程进行原型化,然后分析解决方案,看看哪些位需要花费大量时间。然后,您可以对流程的这些部分进行优化。

有道理,因为WCU相等,
PutItem
UpdateItem
不会有太大变化,但我认为
UpdateItem
会写更少的数据(只有新字段),而不是整个项目。但是你是对的,我将从
UpdateItem
开始,如果需要,尝试
BatchWriteItem