簡體   English   中英

使用帶有varchar鍵的CQL3在Cassandra中分頁大型結果集

[英]Paging large resultsets in Cassandra with CQL3 with varchar keys

我正在將舊的基於節儉的代碼更新為CQL3。

代碼的一部分是遍歷包含20M +行的表的整個數據集。 這部分最初是由於內存使用而使程序崩潰,因此我創建了RowIterator類,該類使用TokenRanges(和Hector)遍歷列族。

當嘗試使用CQL3重寫此代碼時,我在分頁數據時遇到問題。 我在http://www.datastax.com/documentation/cql/3.0/cql/cql_using/paging_c.html上找到了一些信息,但是在第一個“頁面”嘗試此代碼時

resultSet = session.execute("select * from " + TABLE + " where token(key) <= token(" + offset + ")");

我得到錯誤

com.datastax.driver.core.exceptions.InvalidTypeException:CQL類型varchar的值0的無效類型,需要類java.lang.String但提供了類java.lang.Integer

當然,該鏈接上的示例使用數字鍵。 有辦法用varchar(UTF8Type)鍵嗎?

似乎現在已經為此提供了內置功能( https://issues.apache.org/jira/browse/CASSANDRA-4415 ),但是我找不到使我前進的示例。 此外,我現在必須解決Cassandra 1.2.9的問題。

因此,簡單的答案是升級到Cassandra 2.0.X並使用新的內置分頁功能。 但是要在Cassandra 1.2上完成它,您的方向正確。 您的語法應該正常工作,如果您在cqlsh中運行查詢,是否會遇到相同的錯誤? 當像這樣進行分頁時,最好在示例中使用“>”,這可能是問題所在。 select * from table limit 100開始,然后select * from table where token(key)>token('last key') limit 100

我也會嘗試使用准備好的語句。 字符串操作可能會對偏移量產生影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM