【发布时间】:2014-09-16 12:48:08
【问题描述】:
想象一个电子商务应用程序:
假设我有三个 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 从 N1 读取信息 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 中如何处理?
【问题讨论】:
标签: cassandra consistency eventual-consistency