Amazon dynamodb 使用DynamoDb回滚?
我有一个问题,如果我在dynamodb5o6元素中插入,但例如6º失败。如何在dynamoDb中进行回滚Amazon dynamodb 使用DynamoDb回滚?,amazon-dynamodb,Amazon Dynamodb,我有一个问题,如果我在dynamodb5o6元素中插入,但例如6º失败。如何在dynamoDb中进行回滚 MyMessage myMessage = new MyMessage(true, "ok"); Article art; for (int i = 0; i < list.size(); i++) { art= (Article) list.get(i); try { this.artRepositor
MyMessage myMessage = new MyMessage(true, "ok");
Article art;
for (int i = 0; i < list.size(); i++) {
art= (Article) list.get(i);
try {
this.artRepository.save(art);
} catch (Exception e) {
myMessage.setSuccess(false);
myMessage.setMessage("Fail.");
}
}
if(myMessage.isSuccess()) {
artRepository.save..
}else{
Rollback.
}
MyMessage MyMessage=newmymessage(true,“ok”);
文章艺术;
对于(int i=0;i
编辑:DynamoDB现在支持事务
DynamoDB有两个新的API操作TransactionWriteItems
和TransactionGetItems
使用这些操作,您可以在DynamoDB表上执行ACID事务
更多细节
旧答案
DynamoDB不支持这种事务行为
首先,您不应该像那样在for循环中发出多个请求。这是对网络资源的浪费。您最好使用批处理请求。请记住,批处理请求中的项仍然是独立的,并且可能会彼此独立地失败
如果需要使用Dynamo支持这种行为,可以考虑使用更持久的方法插入文档,例如首先将文档放入SQS或Kinesis(两者都支持批处理请求)。然后,如果插入失败,您可以可靠地重试。在反复失败的情况下,您可以使用死信队列,甚至将项目发送到SNS以触发某种警报
如果出于一致性原因需要DB强制执行事务,那么应该考虑使用SQL数据库。看起来它在Java和其他高级API中确实支持它。有正当理由希望在noSQL中进行事务处理,例如,基于某些细节更新或放置写入聚合记录。