我正在使用来自datastax的java的Cassandra驱动程序。我知道我在一张桌子上有20亿行。当我使用
时Select * from table
在提取了大约800000行后,该过程停止。
在我的Java代码中
futureResults = session.executeAsync(statement);
ResultSet results = futureResults.getUninterruptibly();
for (Row row : results) {
}
也许我做错了什么?
答案 0 :(得分:3)
你在做什么与Cassandra有一个相当普遍的反模式。由于每个数据分区都位于群集的不同部分,因此该查询将创建一个以一个协调器为中心的大量分散/聚集。最终事情开始超时,协调员将抛出错误。快速查看日志应该可以找到它。
几乎总是,select查询应该包含locality的分区键。如果那是不可能的,那么切换到有效扫描每个节点的批处理是最好的。 Cassandra的Spark连接器非常适合这种访问模式。