我正在使用cassandra作为DB开发新产品。现在安装在单个ubuntu 13.10开发笔记本电脑核心i7上。我有一个列族和一个查询。在cqlsh中执行的此查询给出33267行。在我的java程序上执行,使用datastax java驱动程序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? 这是一项令人兴奋的技术,但这是我职业生涯中第一次生产数据库给我这么不可靠的行为。 顺便说一下:原始查询按我删除的顺序排序。顺序,我有这个例外: 线程&#34; main&#34;中的例外情况com.datastax.driver.core.exceptions.InvalidQueryException:无法对分区键的ORDER BY和IN限制进行页面查询;您必须删除ORDER BY或IN并对客户端进行排序,或者禁用此查询的分页 当昨天处理类似的查询和cqlsh时,它的工作顺序没有问题。我只是谈论这个问题,因为可能两者都有关系。 此致
答案 0 :(得分:3)
您可以从githib datastax/java-driver获取来源。它看起来似乎不包含在maven或tarball下载中。
我认为在查询中使用IN和ORDER BY时遇到CASSANDRA-6722。 java驱动程序自动进行分页,默认提取大小为5000.您可以使用Statement.setFetchSize(Integer.MAX_VALUE)
禁用自动分页。此blog post中有关于自动分页的更多信息。
您连接的应用程序是什么版本的Cassandra?如果您可以分享有关表定义和查询的更多信息,则可能会重现重复行问题。