我创建了一项服务X,其中包含一些数据的会计请求来自许多其他服务Y。我通过添加许多属性从该数据创建一个idempotent_id,以便该 idempotent_id 保持唯一。我还创建了一个idempotent_version并将其设置为 1。我将此记录存储到 dynamoDB 中(使用 idempotent_id 和 idempotent_version 作为分区键和排序键)。现在,我调用其他一些服务Z使用这个 idempotent_id 和 idempotent_version。一段时间后,假设具有相同数据的请求来了,我创建了 idempotent_id 但它会和以前一样,因为我们正在处理相同的记录。现在我必须创建 idempotent_version 在这种情况下为 2,因为之前有相同的请求(如果已经有 n-1 个请求,这可以是 n)。我如何找到当前数据记录的 idempotent_version,因为我将使用此版本将数据存储到 dynamoDB 中,并使用此版本调用服务Z。(当前场景为 2)
问问题
224 次
1 回答
1
该文档有一个部分Using Sort Keys for Version Control。
基本上,当您创建 v1 时,也将 v1 的副本创建为 v0。版本 0 将始终是最新的。v0 的另一个属性名为“Latest”,以 1 开头。
所以到了 v2 的时候...
GetItem(hash:v0)
PutItem(hash:v2)
Copy v2 to v0, update "Latest" to 2
UpdateItem(hash:v0)
有了新的事务支持,可以保证 v2 的 Put 和 v0 的更新是一致的。
于 2020-06-17T17:59:53.820 回答