我有一个问题,如果我在 DynamoDb 中插入 5 o 6 个元素,但例如 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.
}
Run Code Online (Sandbox Code Playgroud)
编辑: DynamoDB 现在支持事务。
DynamoDB 有两个新的 API 操作TransactWriteItems和TransactGetItems
使用这些操作,您可以对 DynamoDB 表执行 ACID 事务。
更多细节在这里
旧答案
DynamoDB 不支持这种事务行为。
首先,您不应该像这样在 for 循环中发出多个请求。这是一种网络资源的浪费。您最好使用批处理请求。请记住,批处理请求中的项目仍然是独立的,并且可能彼此独立失败。
如果您需要使用 Dynamo 支持这种类型的行为,您可以考虑使用更持久的插入文档的方法,例如首先将它们放入 SQS 或 Kinesis(两者也支持批量请求)。如果插入失败,您可以可靠地重试。在重复失败的情况下,您可以使用死信队列,甚至将项目发送到 SNS 以触发某种警报。
如果出于一致性原因需要 DB 强制执行事务,则应考虑使用 SQL 数据库。
| 归档时间: |
|
| 查看次数: |
5574 次 |
| 最近记录: |