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。