对于一个独特的商品销售数据库,如果我们使用顺序一致性,我们可以保证,例如,独特的商品永远不会被重复销售给不同的人。因果一致性能保证我们做到这一点吗?
如果有一些销售同时开始/结束,是否会破坏系统?
由于这些物品是独一无二的,我们只能出售每件物品之一。
谢谢你
对于一个独特的商品销售数据库,如果我们使用顺序一致性,我们可以保证,例如,独特的商品永远不会被重复销售给不同的人。因果一致性能保证我们做到这一点吗?
如果有一些销售同时开始/结束,是否会破坏系统?
由于这些物品是独一无二的,我们只能出售每件物品之一。
谢谢你
因果一致性保证了如果两个事件是偶然相关的,那么每个人都会就它们发生的顺序达成一致。它允许对通常不相关(或“同时”)的事件的排序产生分歧。
由系统中不同节点执行的两次购买商品的尝试可能不会有因果关系 - 买家 B 几乎可以肯定不会尝试购买该商品,因为他已经看到买家 A 已经购买了它。在一个经常一致的系统中,这意味着这两个事件是同时发生的,系统中的不同节点可能不同意它们的相对顺序——A 可能认为她的购买尝试首先出现并成功,而 B 可能相信同样的事情。
您可以强制将两次购买尝试与一些额外的偶然性相关联。不要让买家直接购买该物品,而是让他们写一份记录表明他们希望购买该物品。指定单个节点作为项目的“所有者”。每当它看到一个购买愿望记录时,它就会读取该项目的当前状态,并且 - 如果它可用 - 将其出售给给定的购买者。购买者观看该物品以查看它是卖给他们还是卖给其他人。
这在两个事件之间建立了一个顺序:要么所有者首先看到 A 的记录并将其出售给她,要么首先看到 B 的记录并将其出售给他。这两个事件通常没有关联,因此其他节点可能会以相反的顺序查看记录,但这很好 - 他们的意见不重要,只有所有者的意见才重要。所有者的第二次读取(应该看到该物品已经售出)通常与它之前标记该物品已售出的写入有关,因为它们是在同一节点上执行的,因此我们保证它只会出售该物品一次。