Cassandra并不表示执行语句的特定顺序。
执行下面的代码之类的语句不会按顺序执行。
client1 = MongoClient('mongodb://localhost:27017')
db=input("enter db name")
db1 = client1["{}".format(db)]
根据system_traces.sessions,每个会话均由不同的节点接收。
有时两个查询中的INSERT INTO channel
JSON ''{"cuid":"NQAA0WAL6drA"
,"owner":"123"
,"status":"open"
,"post_count":0
,"mem_count":1
,"link":"FWsA609l2Og1AADRYODkzNjE2MTIyOTE="
, "create_at":"1543328307953"}}'';
BEGIN BATCH
UPDATE channel
SET title = ? , description = ? WHERE cuid = ? ;
INSERT INTO channel_subscriber
JSON ''{"cuid":"NQAA0WAL6drA"
,"user_id":"123"
,"status":"subscribed"
,"priority":"owner"
,"mute":false
,"setting":{"create_at":"1543328307956"}}'';
APPLY BATCH ;
时间相等(以毫秒为单位),有时第二个查询的started_at
时间小于第一个查询的时间。
因此,这破坏了语句和数据的顺序。
我们使用erlang,marina驱动程序,consistency_level为QUORUM,并且所有cassandra节点和应用程序服务器的时间都是同步的。
如何强制Cassandra按顺序执行查询?
答案 0 :(得分:1)
由于分布式特性,Cassandra中的查询可以由不同的节点接收,并且取决于特定节点上的负载,可能是稍后发送的某些查询较早执行。在您的情况下,您可以将第一个插入内容本身放入批处理中。或者,由于它是在某些驱动程序中实现的(例如Java driver),请使用白名单策略将查询仅发送到一个节点-但在这种情况下,它将成为瓶颈。 (而且我真的不确定您的驱动程序是否具有这种功能)。