2014-03-13 78 views
0

我正在開發一個使用cassandra作爲數據庫的新產品。現在安裝在單個Ubuntu 13.10開發筆記本電腦核心i7上。我有一個列家族和一個查詢。這個在cqlsh中執行的查詢給出了33267行。執行我的java程序,使用datastax Java驅動程序2.0,一些處決給出正確的行,其他人鑽進一個無限循環一次又一次地重複相同的行: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); 
    } 
} 

如果在分析應用程序,我看到鎖爭在新的I/O工作線程之間,98%的時間花在sun.nio.ch.EPollArrayWrapper.poll方法上。 有人遇到過這個問題並知道解決方案嗎? 有人可以直接下載鏈接來下載cassandra-driver-core-2.0.0.src.jar,這樣我可以通過源代碼調試錯誤並向datastax報告? 這是一項令人興奮的技術,但這是我職業生涯中第一次使用DB來給我如此不可靠的行爲。順便說一句:原來的查詢有一個我刪除的順序。按順序,我得到了這個異常: 線程「main」中的異常com.datastax.driver.core.exceptions.InvalidQueryException:無法使用分區鍵上的ORDER BY和IN限制對查詢進行分頁;您必須刪除ORDER BY或IN和排序客戶端,或者禁用此查詢的分頁 當昨天在類似查詢和cqlsh上工作時,它在沒有添加訂單的問題的情況下工作。我只是談論這個問題,因爲兩者都有關係。 Regards

回答

2

您可以從githib datastax/java-driver獲得源代碼。它看起來並不像源代碼包含在maven或tarball下載中。

我認爲你在查詢中使用IN和ORDER BY時遇到了CASSANDRA-6722。 java-driver會自動使用默認的讀取大小5000進行分頁。您可以使用Statement.setFetchSize(Integer.MAX_VALUE)禁用自動分頁。在這個blog post有更多關於自動尋呼的信息。

你應用程序連接到什麼版本的Cassandra?如果你可以分享更多關於你的表格定義和查詢的信息,也許可以重現重複行問題。

+0

感謝您的回覆。我在ubuntu 13.10上使用cassandra 2.0.6。我已經閱讀了更多關於自動分頁的知識,並且禁用了它,這已經成爲了訣竅:'// ResultSet rs = cassandra.execute(query); Statement stmt = new SimpleStatement(query); stmt.setFetchSize(Integer.MAX_VALUE); ResultSet rs = cassandra.execute(stmt); (!rs.isExhausted()){ – Rogelio

相關問題