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

DSE cassandra driver for java returning only partial results in async mode

使用 java 的 dse cassandra 驱动程序 3.1.4 从 cassandra 获取数据时,我只获得了部分行集。 此查询也适用于我们使用的早期版本的驱动程序。 较早的版本是 2.1.9

Table结构是这样的

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)));
}

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

这里最明显的是你有竞争条件 - 我看到你正在重复使用相同的数组对象来指定参数,并且从你的源代码看起来你正在使用相同的 BoundStatement 实例,所以你正在覆盖请求数据...

我建议修改您的代码以使用 preparedStatement.bind(paramArray) 而不是 boundStatement.bind(paramArray) -> 它会创建新的 BoundStatement 实例。

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