使用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)));
}
有没有办法确保每次都获得所有行?
答案 0 :(得分:3)
最显而易见的是,你有竞争条件 - 我看到你重新使用相同的数组对象来指定参数,并且从你的源代码看起来你正在使用相同的BoundStatement
实例,因此您要覆盖请求数据...
我建议修改您的代码,使用preparedStatement.bind(paramArray)
代替boundStatement.bind(paramArray)
- >它将创建新的BoundStatement
实例。
P.S。如果它之前有用,那么这只是巧合......