卡桑德拉不一致

我们正在运行具有3个节点和2的复制因子的cassandra集群。

我们的nodejs服务器是这个群集查询的唯一位置。

我们正在使用datastax node.js驱动程序创build一个客户端,如下所示:

var client = new cassandra.Client({contactPoints: [<contact point>], keyspace: 'test_keyspace', queryOptions: {consistency: cassandra.types.consistencies.two}}); 

我的理解是这个一致性参数设置为2应该使我们的读/写一致,只要我们等待一个响应,然后再继续下一个查询,但是这不会发生。

如果我们在请求数据之前等待响应,是否真的如上所述应该保证一致性?

有没有其他地方可能会有参数设置,可能会导致不一致的查询?

cassandra v2.2.4 nodejs驱动程序版本v3.0.0

编辑 – 添加我在做什么的例子:

表:

test_keyspace.users(id uuid,username text,join_date timestamp,PRIMARY KEY(id))

test_keyspace.username(username text,uuid id,PRIMARY KEY(username,id))

在创build用户:

1)检查用户名没有被采取

  var query = "SELECT * FROM test_keyspace.username WHERE username=?"; db.execute(query, [username], function(err, result){ if(err){ //fail check - api responds with internal server error } else { if(result.rows.length == 0){ //pass check, proceeed to #2 } else { //fail check, username taken, respond with error } } }); 

2)创build用户

 var queries = [ { query: "INSERT INTO test_keyspace.users (id, username, join_date) VALUES(?, ?, ?)", params: [userid, username, date] }, { query: "INSERT INTO test_keyspace.username(id, username) VALUES(?, ?)", params: [userid, username] } ] db.batch(queries, {prepare: true}, function(err){ if(err){ //api responds here with error } else { //api responds here with success } }); 

问题是我的cassandra服务器上的时钟没有同步。