Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cassandra中同时更新一行中的不同列_Cassandra_Cql - Fatal编程技术网

在Cassandra中同时更新一行中的不同列

在Cassandra中同时更新一行中的不同列,cassandra,cql,Cassandra,Cql,在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'). 当同时运行时,两个查询可能同时到达服务器

在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
。我的理解正确吗


谢谢大家!

通过让每个服务器跟踪写入时间来解决写入冲突。如果它们在同一时间到达(精确到毫秒),Cassandra将根据算法选择一个(不确定细节,我假设它涉及节点UUID)

所以写冲突不是你需要担心的事情。将这两个查询减少为一个查询将是正确的


当然,服务器与时间同步非常重要,否则可能会发生有趣的事情。

谢谢您的回答。实际上,我不能100%确定时间戳是基于行还是基于列?如果是基于列的,那么并发写入不会有太多问题。Cassandra的数据存储中的所有内容都是基于列的。这样就不会有任何问题。因为每列都有自己的时间戳,一个线程只更新列a,另一个线程更新列b。这个论点正确吗?事实上,你能提供一些关于这种行为的参考/说明吗?非常感谢你。