问题描述
我有一个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实现此行为,还是必须更改表设计?
1楼
批处理操作无法更新项目。 看到:
BatchWriteItem无法更新项目。 要更新项目,请使用UpdateItem API。
我要做的是:
- 尝试进行批量写入
- 看失败再来
- 批量获取失败的项目并将其批量写入临时表
- 批量写入删除所有失败的项目(已存在)
- 批量再次将故障写入主表
- 从临时表中清除所有项目
作为替代方案,您可以使用UpdateItem API,但这可能会变慢。