当前位置: 代码迷 >> java >> DynamoDB-使用批处理操作覆盖HashKey
  详细解决方案

DynamoDB-使用批处理操作覆盖HashKey

热度:107   发布时间:2023-08-04 09:09:37.0

我有一个DynamoDB,我用它来存储有关EC2实例的一些信息,因此我将实例ID用作HashKey。

每周一次,我正在运行一个将大量记录插入此表的代码:

AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient();
DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDB);

// saving records
List<FailedBatch> failedBatch = mapper.batchSave(recordsToSave);

我只关心最新信息,因此如果数据库中已经存在我要插入的HashKey,我想覆盖DynamoDB中的旧记录。 但是,每次我尝试插入这样的值时,操作都会失败(failedBatch),因为它无法处理重复项。

有没有一种方法可以使用DynamoDB实现此行为,还是必须更改表设计?

批处理操作无法更新项目。 看到:

BatchWriteItem无法更新项目。 要更新项目,请使用UpdateItem API。

我要做的是:

  • 尝试进行批量写入
  • 看失败再来
  • 批量获取失败的项目并将其批量写入临时表
  • 批量写入删除所有失败的项目(已存在)
  • 批量再次将故障写入主表
  • 从临时表中清除所有项目

作为替代方案,您可以使用UpdateItem API,但这可能会变慢。