我有一个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,但这可能会比较慢。