【问题标题】:Batch Update in DynamoDBDynamoDB 中的批量更新
【发布时间】:2020-03-27 15:44:21
【问题描述】:

我需要在 java 中对 dynamo db 执行批量更新。通过更新我的意思是我有一个项目的主键并且想要更新该项目的单个属性。 我首先尝试通过batchGetItem 获取项目,对其进行修改并执行batchWriteItem。甚至 dynamoDb 映射器的 batchSave 也不提供更新。 我可以使用这种方法,但是有没有一种方法可以直接对项目执行批处理更新,而无需从数据库中获取整个项目?

【问题讨论】:

    标签: java amazon-dynamodb performbatchupdates


    【解决方案1】:

    根据亚马逊文档,这是不可能的,他们要求使用UpdateItemhttps://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html

    因此,您可以使用您的方法或在应用程序中执行并行 UpdateItem,最后,正如 Amazon 文档所述,使用 BatchWriteItem 的好处主要是延迟成本和复杂性:

    BatchWriteItem 并行执行指定的 put 和 delete 操作,为您提供线程池方法的强大功能,而无需在应用程序中引入复杂性。

    您的方法可能更快(延迟更少)但成本更高(需要读取和写入整个项目)。同时UpdateItem 方法的实现可能更复杂,具体取决于您使用的技术。

    【讨论】:

      【解决方案2】:

      您可以尝试新的 PartiQl BatchExecute 语句。

      https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchExecuteStatement.html

      https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ql-reference.multiplestatements.batching.html

      语法很像Sql,来自上面的文档...

      [    
      {
          "Statement": "INSERT INTO Music value {'Artist':'?','SongTitle':'?'}",
          "Parameters": [{"S": "Acme Band"}, {"S": "Best Song"}]
      },
      {
          "Statement": "UPDATE Music SET AwardsWon=1 SET AwardDetail={'Grammys':[2020, 2018]}  where Artist='Acme Band' and SongTitle='PartiQL Rocks'"
      }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-21
        • 1970-01-01
        • 2017-03-25
        相关资源
        最近更新 更多