Cassandra并不暗示执行语句的特定顺序

时间:2018-12-04 07:26:46

标签: cassandra timestamp erlang

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按顺序执行查询?

1 个答案:

答案 0 :(得分:1)

由于分布式特性,Cassandra中的查询可以由不同的节点接收,并且取决于特定节点上的负载,可能是稍后发送的某些查询较早执行。在您的情况下,您可以将第一个插入内容本身放入批处理中。或者,由于它是在某些驱动程序中实现的(例如Java driver),请使用白名单策略将查询仅发送到一个节点-但在这种情况下,它将成为瓶颈。 (而且我真的不确定您的驱动程序是否具有这种功能)。