我正在尝试使用Node.js Cassandra驱动程序对Cassandra集群进行简单查询。我正在关注这些示例,但即使返回的集合中没有结果,似乎我的回调函数也会被调用。
var q = function (param) {
var query = 'SELECT * FROM my_table WHERE my_col=?';
var params = [param];
console.log("Cassandra query is being called with parameters " + params);
client.execute(query, params, function (err, result) {
console.log("Cassandra callback is being called. Row count is " + result.rows.length);
if (err != null) {
console.log("Got error");
}
if (result.rows.length <= 0) {
console.log("Sending empty response.");
}
else {
console.log("Sending non-empty response.");
}
});
};
q('value');
q('value');
输出
Cassandra query is being called with parameters value
Cassandra query is being called with parameters value
Cassandra callback is being called. Row count is 0
Sending empty response.
Cassandra callback is being called. Row count is 1
Sending non-empty response.
这种情况相当一致,但有时两次调用都会变空,有时两次调用都会返回值。
我想我这里的异步调用有问题,但我不确定它是什么。
答案 0 :(得分:1)
我认为这是由于群集中的节点错误造成的。其中一个节点缺少一堆数据,所以有三分之一的时间我没有得到任何结果。
答案 1 :(得分:0)
当您打开连接时,是否发送了consistency
命令?
当我打开一个连接电话execute
并发送use <keyspace>;
后跟consistency local_quorum;
时,我也遇到了这个问题。这告诉Cassandra看起来有点难以回答,并同意其他节点,你得到的是最新版本。
注意:我保持连接一段时间,所以这并没有增加任何有意义的开销(对我来说)。
注意2:以上似乎不再适用于我的python应用程序(使用Cassandra 3.5)。但是,在调用SimpleStatement
之前使用consistency
并设置execute
会:https://datastax.github.io/python-driver/getting_started.html#setting-a-consistency-level
我希望这会有所帮助。