我正在用Cassandra作为数据库开发一个新产品。现在安装在一个ubuntu 13.10开发笔记本电脑内核i7上。我有一个列族和一个查询。这个在cqlsh中执行的查询给出了33267行。使用datatax java driver 2.0在我的java程序上执行,一些执行给出了正确的行,其他执行进入无限循环,反复重复相同的行:
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上。轮询方法。有人经历过这个问题,知道解决方案吗?有人可以直接指向下载cassandra-driver-core-2.0.0.src的链接。jar,以便我可以调试源错误并向datastax报告?这是一项令人兴奋的技术,但这是我职业生涯中第一次生产数据库给我如此不可靠的行为。顺便说一下:原始查询有一个我删除的订单。按照顺序,我得到了这个异常:线程“main”com.datastax.driver.core.exceptions中的异常。InvalidQueryException:无法对分区键同时具有ORDER BY和IN限制的查询进行分页;您必须删除ORDER BY或IN并对客户端进行排序,或者禁用此查询的分页昨天在处理类似查询和cqlsh时,添加的订单没有问题。我只是谈论这个问题,因为也许两者都是相关的。当做
1条答案
按热度按时间kgsdhlau1#
您可以从githib datastax/java-driver获取源代码。看起来maven或tarball下载中都没有包含源代码。
我认为在查询中使用IN和ORDER BY时遇到了d1c1c1c 1d。java驱动程序会自动进行分页,默认提取大小为5000。您可以使用
Statement.setFetchSize(Integer.MAX_VALUE)
禁用自动分页。此blog post中有更多关于自动分页的信息。您的应用程序连接到什么版本的Cassandra?如果您可以分享更多关于表定义和查询的信息,那么可能会重现重复行的问题。