用于java的DSE cassandra驱动程序仅在异步模式下返回部分结果

时间:2018-05-24 12:51:56

标签: cassandra cassandra-driver

使用dse cassandra驱动程序3.1.4 for java从cassandra获取时,我只得到部分行集。 此查询与我们使用的早期版本的驱动程序一起工作正常。 早期版本是2.1.9

表结构就像这样

Key     column1 value
CM~020  000001000  20
CM~010  000001000  10

当我使用异步调用查询多行时,我大部分时间只获得一行。有时在调试时我也会得到另一行。

行为是随机的,但我总是得到第二行或两者。我从来没有得到第一排,所以我认为这也可以在这里发挥作用。

for (Object partitionKey : partitionKeys) {
        paramArray[0] = partitionKey;
        futures.add(session.executeAsync(boundStatement.bind(paramArray)));
}

有没有办法确保每次都获得所有行?

1 个答案:

答案 0 :(得分:3)

最显而易见的是,你有竞争条件 - 我看到你重新使用相同的数组对象来指定参数,并且从你的源代码看起来你正在使用相同的BoundStatement实例,因此您要覆盖请求数据...

我建议修改您的代码,使用preparedStatement.bind(paramArray)代替boundStatement.bind(paramArray) - >它将创建新的BoundStatement实例。

P.S。如果它之前有用,那么这只是巧合......