2016-04-15 59 views
0

我从datastax使用Cassandra驱动程序用于java。我知道我在一张桌子上有两千万行。当我使用Cassandra终止中间连接?

Select * from table 

大约800000行被提取后,进程停止。

在我的Java代码

futureResults = session.executeAsync(statement); 
ResultSet results = futureResults.getUninterruptibly(); 
for (Row row : results) { 

} 

也许我做错了什么?

+0

您在此期间检查了cassandra.log和system.log上的日志吗?它可以给你潜在的见解。另一个问题可能是客户端和cassandra节点之间的网络问题。 –

+0

程序正确终止,这意味着ResultSet中没有更多行要继续。我认为你对网络问题可能是正确的,我会尝试增加连接重试 – Xitrum

回答

3

你在做什么是与卡桑德拉相当常见的反模式。由于每个数据分区都位于群集的不同部分,因此该查询将创建一个以一个协调器为中心的大规模分散/聚集。最终事情开始超时,协调员将发出错误。快速查看日志应该可以找到它。

几乎总是,一个选择查询应该包含一个局部的分区键。如果这是不可能的,切换到能有效扫描每个节点的批处理是最好的。 Cassandra的Spark连接器非常适合这种访问模式。

+0

因此,这意味着我的表的数据可能散布在群集中的所有节点上。我试图找到我如何得到我的表的所有分区键,但我找不到我能理解的答案。你知道我怎么可以用nodetool或cqls存档?谢谢 – Xitrum

+0

您正在寻找类似sqldump的东西来导出整个表格吗? –

+0

我正在寻找一种方法来提取我的表的分区键,所以我可以按照您的建议在我的select语句中使用它。 – Xitrum