[更新]
之前的陈述非常具有误导性,所以我在这里详细阐述:
我运行了一个测试,它通过PHP中的Thrift协议发送查询,脚本如下:
for ($i=0; $i<100; $i++) {
$query = "update ns.table set value='before' where key='key$i';";
// randomly select a node and send query
}
for ($i=0; $i<100; $i++) {
$query = "update ns.table set value='after' where key='key$i';";
// randomly select a node and send query
}
表开始为空,在测试之后,只有某些行包含值“after”,而大多数行包含“before”。
整个测试过程中我没有收到任何错误。所以第二个循环中的查询无声地失败了。
所有查询都以一致性级别ALL发送,表格的复制因子为2.
我的cassandra版本是DSE 4.6.3,集群总共有39个节点。
[Update2]
在两个循环之间进行睡眠(3秒)之后,测试现在可以给出正确的结果,表中的所有行都具有值“after”。
但这仍然令人困惑,因为对于一致性级别ALL我期望所有查询都是事务性的。不需要睡眠功能。
答案 0 :(得分:1)
同步节点时钟后问题已解决。
感谢@mshuler指出。