2014-03-13 4 views
0

DB로 cassandra를 사용하여 새 제품을 개발 중입니다. 현재 우분투 13.10 개발 노트북 코어 i7에 설치되었습니다. 컬럼 계열과 쿼리가 있습니다. 이 쿼리는 cqlsh에서 실행되어 33267 개의 행을 제공합니다. 응용 프로그램을 프로파일 링 할 때DataStax 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); 
    } 
} 

, 내가 잠금 경합을 참조하십시오 datastax 자바 드라이버 2.0을 사용, 일부 실행 올바른 행을주고, 내 자바 프로그램에서 실행, 다른 사람은 동일한 행을 또 다시 반복 무한 루프에있어 새로운 I/O 작업자 스레드간에 98 %의 시간이 sun.nio.ch.EPollArrayWrapper.poll 메소드에 소비됩니다. 누군가이 문제를 경험했으며 해결책을 알고 있습니까? 누군가가 소스로 오류를 디버그하여 datastax에보고 할 수 있도록 cassandra-driver-core-2.0.0.src.jar을 다운로드 할 수있는 링크로 안내 할 수 있습니까? 이것은 흥미 진진한 기술이지만 프로덕션 DB가 내 경력에서 처음으로 그렇게 신뢰할 수없는 동작을 제공합니다. By 덧붙여서 : 원래의 쿼리에는 내가 삭제 한 순서가있었습니다. by order by,이 예외가 있습니다 : 스레드 "main"의 예외 com.datastax.driver.core.exceptions.InvalidQueryException : ORDER BY 및 파티션 키의 IN 제한이있는 쿼리를 페이지 할 수 없습니다. ORDER BY 또는 IN을 제거하고 클라이언트 측 정렬을 제거하거나이 쿼리에 대한 페이징을 비활성화해야합니다. 어제 비슷한 쿼리와 cqlsh에서 작업 할 때 추가 순서에 문제없이 작동합니다. 아마도이 문제는 아마 둘 다 관련되어 있기 때문에 이야기합니다. 감사합니다.

답변

2

githib datastax/java-driver에서 소스를 얻을 수 있습니다. 소스가 maven 또는 tarball 다운로드에 포함 된 것처럼 보이지 않습니다.

쿼리에서 IN 및 ORDER BY를 사용했을 때 CASSANDRA-6722이 발생한다고 생각합니다. java 드라이버는 자동으로 페이징 크기를 5000으로 기본 설정합니다. Statement.setFetchSize(Integer.MAX_VALUE)으로 자동 페이징을 사용하지 않도록 설정할 수 있습니다. 이 blog post에는 자동 페이징에 대한 자세한 정보가 있습니다.

응용 프로그램에 연결할 Cassandra 버전은 무엇입니까? 테이블 정의 및 쿼리에 대해 더 많이 공유 할 수 있다면 반복 행 문제를 재현하는 것이 가능할 수도 있습니다.

+0

답변 해 주셔서 감사합니다. 우분투 13.10에서 cassandra 2.0.6을 사용하고 있습니다. 필자는 자동 페이징에 대해 더 많이 읽었으며 사용하지 않도록 설정했다 : // ResultSet rs = cassandra.execute (query); 문 stmt = 새로운 SimpleStatement (쿼리); stmt.setFetchSize (Integer.MAX_VALUE); ResultSet rs = cassandra.execute (stmt); while (! rs.isExhausted()) {' – Rogelio