我有一个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实现此行为,还是必须更改表设计?

最佳答案

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


  http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html


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

我要做的是:


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


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

10-06 05:24