想象一个电子商务应用程序:
假设我有三个Node cluster
N1, N2, N3.
并且我的一致性级别 (CL) 很弱:那就是
Read CL = N/2+1 = 2 (in this case), Write CL = Any (alteast 1)
我有一个产品表,例如
这是跨三个节点同步的初始数据
product_info : { 'computer': 1}
现在客户端 A 从 N1 读取信息,客户端 B 从 N2 读取信息
客户端 1 看到 1 台计算机可用
客户端 2 看到 1 台计算机可用
现在他们俩都去买了,客户A先下订单。所以 N1,表格将如下所示:
product_info : {'computer':0}
现在客户 2 在 N2 下订单,表格如下所示:
product_info : {'computer':0}
但实际上客户 2 的订单不应该被处理。
客户端 C 通过 N3 访问。现在在 N1 完成读取,返回 0。(因为 quorum 至少有 2 个节点应该响应)N3 的值为 1,但其时间戳已过时。因此它将更新其值并向客户端显示没有可用的计算机。这很好
在这个例子中,无论是弱一致性级别还是强一致性级别都会导致错误的结果,仅仅是因为客户端 A 和 B 加载第一个 product_info 时,数据是同步的。这在 Cassandra 中如何处理?