卡桑德拉不一致

时间:2016-01-11 17:14:19

标签: node.js cassandra datastax

我们正在运行一个包含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
    }
});

1 个答案:

答案 0 :(得分:0)

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