卡桑德拉不一致
我们正在运行具有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服务器上的时钟没有同步。