1

我正在开发一种使用 cassandra 作为数据库的新产品。现在安装在单个 ubuntu 13.10 开发笔记本电脑核心 i7 上。我有一个列族和一个查询。在 cqlsh 中执行的这个查询给出 33267 行。在我的 java 程序上执行,使用 datastax java driver 2.0,一些执行给出正确的行,其他的进入无限循环,一次又一次地重复相同的行:

while (!rs.isExhausted()) {
  Row row = rs.one();
  long hora = row.getDate(1).getTime();
  String clave = row.getString(0);
  List<Long> data = row.getList(2, Long.class);
  ordenados.put(hora, new Object[]{clave, data.get(0) / 100000000.0, data.get(1)});
  contador2 +=1;
  if (Math.floor(contador2/1000.0) == contador2/1000.0) {
    System.out.println("sitio "+ contador2+ " "+clave+ " "+hora);
  }
}

在分析应用程序时,我看到新 I/O 工作线程之间的锁争用,98% 的时间花在 sun.nio.ch.EPollArrayWrapper.poll 方法上。有人遇到过这个问题并知道解决方案吗?有人可以直接链接到下载 cassandra-driver-core-2.0.0.src.jar 的链接,以便我可以使用源代码调试错误并报告给 datastax?这是一项令人兴奋的技术,但在我的职业生涯中,生产数据库第一次给我带来如此不可靠的行为。顺便说一句:原始查询有一个我删除的订单。使用 order by,我得到了这个异常:线程“main”com.datastax.driver.core.exceptions.InvalidQueryException 中的异常:无法使用 ORDER BY 和对分区键的 IN 限制分页查询;您必须删除 ORDER BY 或 IN 并对客户端进行排序,或禁用此查询的分页昨天处理类似查询和 cqlsh 时,添加的顺序没有问题。我只是谈论这个问题,因为也许两者都是相关的。问候

4

1 回答 1

3

您可以从githib datastax/java-driver获取源代码。看起来源代码不包含在 maven 或 tarball 下载中。

我认为您在查询中使用 IN 和 ORDER BY 时遇到了CASSANDRA-6722 。java-driver 自动执行分页,默认提取大小为 5000。您可以使用Statement.setFetchSize(Integer.MAX_VALUE). 在这篇博文中有更多关于自动分页的信息。

您的应用程序连接到哪个版本的 Cassandra?如果您可以分享有关您的表定义和查询的更多信息,也许可以重现重复行问题。

于 2014-03-16T19:54:45.253 回答