【问题标题】:Cassandra terminates connection in the middle?Cassandra在中间终止连接?
【发布时间】:2016-08-07 06:01:00
【问题描述】:

我正在使用来自 datastax 的 Cassandra 驱动程序。我知道我在一张表中有 2000 万行。当我使用

Select * from table

该过程在提取了大约 800000 行后停止。

在我的 Java 代码中

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

}

也许我做错了什么?

【问题讨论】:

  • 在此期间您是否检查过 cassandra.log 和 system.log 上的日志?它可以给你潜在的洞察力。另一个问题可能是客户端和 cassandra 节点之间的网络问题。
  • 程序已正确终止,这意味着 ResultSet 中没有更多行可以继续。我认为您对网络问题的看法可能是正确的,我会尝试增加连接重试

标签: java cassandra datastax


【解决方案1】:

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

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

【讨论】:

  • 所以这意味着我的表的数据可能分布在集群中的所有节点周围。我试图找到如何获得我的表的所有分区键,但我找不到我能理解的答案。你知道我如何用 nodetool 或 cqls 存档吗?谢谢
  • 您正在寻找像 sqldump 这样可以导出整个表的东西?
  • 我正在寻找一种方法来提取我的表的分区键,以便我可以按照您的建议在我的选择语句中使用它。
  • 这听起来像您需要一个索引表作为数据模型的一部分。我在这里谈论那些:youtube.com/watch?v=px6U2n74q3g
  • 这非常有用。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2015-01-05
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多