卡桑德拉不一致

Cassandra Inconsistent

我们是 运行 具有 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 应该使我们的 reads/writes 保持一致,但这并没有发生。

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

是否还有其他地方可能设置了可能导致查询不一致的参数?

卡桑德拉 v2.2.4 nodejs 驱动版本 v3.0.0

编辑 - 添加我正在做的事情的例子:

表格:

test_keyspace.users(id uuid, 用户名文本, join_date 时间戳, PRIMARY KEY(id))

test_keyspace.username(username text, uuid id, PRIMARY KEY(username, 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
    }
});

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