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