AWS DynamoDB 的文档写道:
条件写入幂等性 如果条件检查针对正在更新的同一属性,则条件写入可以是幂等的。这意味着仅当项目中的某些属性值与您在请求时期望的值匹配时,DynamoDB 才会执行给定的写入请求。
例如,假设您发出
请求,将某项的UpdateItem
加 3,但前提是Price
当前为 20。在发送请求之后但在返回结果之前,网络错误,不知道请求是否成功。由于此条件写入是幂等的,因此您可以重试相同的Price
请求,并且仅当UpdateItem
当前为 20 时,DynamoDB 才会更新项目。Price
最后一句话让我感到困惑。如果在错误期间,另一个无条件请求发送到服务器并且
Price
已更新,例如,将Price
增加1,那么,Price
从20增加到21,该怎么办?还假设在发出将 Price
增加 3 的条件请求之后发送了无条件更新请求。在这种情况下,据我了解,重试
conditional 请求不应将 Price
增加到 23,因为current
Price
现在是 21 而不是 20。但是,如果没有错误,那么我们应该预计
Price
为 24 而不是 23。那么,假设我的理解是正确的,对于同一组操作,我们会得到两种不同的最终结果,即一种是有条件的,一种是无条件的,在两种情况下,一种没有错误,一种有错误?
消除我对 AWS DynamoDB 幂等操作的困惑。
您想增加 1,但前提是该值当前为 20。如果是,则成功,否则失败,无论重试如何。
您发送无条件更新来改变项目的事实改变了场景,但以预期的方式。
您的条件检查请求仍然是幂等的,只有在价格为 20 时才会执行。