我们正在运行一个包含3个节点且复制因子为2的cassandra集群。
我们的nodejs服务器是查询此群集的唯一位置。
我们使用datastax node.js驱动程序创建客户端,如下所示:
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(用户名文本,uuid id,PRIMARY KEY(用户名,id))
在创建用户时:
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)创建用户
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
}
});
答案 0 :(得分:0)
问题是我的cassandra服务器上的时钟没有同步。