Amazon dynamodb DynamoDB:使用相同的ClientRequestToken对TransactionWriteItems进行多次调用以实现幂等性

Amazon dynamodb DynamoDB:使用相同的ClientRequestToken对TransactionWriteItems进行多次调用以实现幂等性,amazon-dynamodb,Amazon Dynamodb,阅读本文,我对使用ClientRequestToken调用TransactionWriteItems时维护幂等项有点困惑。例如,如果我: string requestToken=“abc123”; var result1=await dbClient.TransactionWriteItemsAsync(新TransactionWriteItemsRequest { TransactiveItems=list1, ClientRequestToken=requestToken }); var r

阅读本文,我对使用
ClientRequestToken
调用TransactionWriteItems时维护幂等项有点困惑。例如,如果我:

string requestToken=“abc123”;
var result1=await dbClient.TransactionWriteItemsAsync(新TransactionWriteItemsRequest
{
TransactiveItems=list1,
ClientRequestToken=requestToken
});
var result2=await dbClient.TransactionWriteItemsAsync(新TransactionWriteItemsRequest
{
TransactiveItems=list2,
ClientRequestToken=requestToken
});

如果
result2
失败,它是否也会还原
result1
中的第一个
TransactionWriteItemsAsync

每个
dbClient。TransactionWriteItemsAsync
是它自己的事务,由
TransactionWriteItem
的列表组成,封装在
TransactionWriteItemsRequest

因此,
result1
result2
是两个不同的事务。共享
ClientRequestToken
并不理想,因为它使用了幂等性。因此,如果执行了
result1
,将忽略
result2

ClientRequestToken
可用于重试

var result1 = await dbClient.TransactWriteItemsAsync(new TransactWriteItemsRequest
              {
                 TransactItems = list1,
                 ClientRequestToken = requestToken
              });

比如说。如果此调用因某种原因失败,考虑到您使用的是相同的令牌,可以安全地重试

谢谢你的澄清。首先,我误解了幂等性这个术语。我最初的意图是通过使用
ClientRequestToken
将每个TransactionWriteItem拆分为多个调用来克服25个请求限制。如果任何呼叫失败,所有呼叫都将回滚。您是否有任何“无痛”的解决方案?不幸的是,每个事务最多可执行25次操作。但这对于大多数情况来说已经足够了。当我不久前使用DynamoDB时,甚至不支持事务。因此,如果您需要更好的acid支持,最好使用Sql。