Amazon dynamodb 使用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

我有一个问题,如果我在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.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中进行事务处理,例如,基于某些细节更新或放置写入聚合记录。