1

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

表结构是这样的

键列 1 值
CM~020 000001000 20
CM~010 000001000 10

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

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

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

有没有办法确保我每次都得到所有的行?

4

1 回答 1

3

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

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

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

于 2018-05-24T13:52:13.157 回答