【发布时间】:2015-10-04 02:56:29
【问题描述】:
在Cassandra中,如果我在一行中同时更新不同的列,会不会出现写冲突?
例如我有一张桌子
CREATE TABLE foo (k text, a text, b text, PRIMARY KEY (k))
我的代码更新专栏中的一个线程a
INSERT INTO foo (k, a) VALUES ('hello', 'foo')
而其他线程更新列b
INSERT INTO foo (k, b) VALUES ('hello', 'bar').
并发运行时,两个查询有可能同时到达服务器。
当我在一个 CQL 中更新两列时,我是否总是期望得到相同的结果?
INSERT INTO foo(k, a, b) VALUES ('hello', 'foo', 'bar')
会有写冲突吗?每个插入都是原子的吗?
正如 Tom 在回复中提到的,在 Cassandra 中,所有操作都是基于列的。然后每一列都应该有一个时间戳。在这种情况下,上述场景不会带来任何麻烦,因为一个线程只会更新列a,而另一个线程只会更新列b。我的理解正确吗?
谢谢!
【问题讨论】: