2015-04-15 26 views
0

我對使用數十億行執行選擇查詢時的堆大小有疑問。Cassandra JDBC堆

我使用jdbc prepared statement和1000行的獲取大小。

下面的代碼說明我的問題:

ResultSet rs = ... 
for (Row r : rs) { 
    // If the result is not fully fetched 
    if (rs.getAvailableWithoutFetching() == FETCH_SIZE && !rs.isFullyFetched()) { 
     LOGGER.info("Load " + FETCH_SIZE + " more rows"); 
     rs.fetchMoreResults(); 
    } 

    ... 
} 

請問java編寫FETCH_SIZE行加載數十億行或FETCH_SIZE行?

+0

Cassandra不會執行含有數十億行結果的查詢。 – jny

+0

我在這裏的意思是:即使用'FETCH_SIZE'從'FETCH_SIZE'中得到了它,java是否保留了堆中的所有結果。如果是的話,有沒有辦法刷新它以保持堆大小最大2'FETCH_SIZE' –

回答

0

假設你正在使用Datastax驅動程序,從documentationsetFetchSize

獲取大小控制多少結果行會同時檢索 (目的是避免在 記憶查詢裝載太多結果產生大的結果)。請注意,儘管 的值可以低至1,但它在實踐中不利用高度這樣的低值,因爲它會產生非常差的性能。如果在 有疑問,留下默認可能是一個好主意。

只有SELECT查詢才使用該設置。

注:未與原協議版本支持分頁1.如果 調用此方法與FETCHSIZE > 0和FETCHSIZE = Integer.MAX_VALUE的和協議版本正在使用(也就是說,如果你已經 力版本1到Cluster.Builder.withProtocolVersion(INT)或 您使用卡桑德拉1.2),你會得到 UnsupportedProtocolVersionException時提交此語句 執行

所以也沒有保留先前所獲取的結果存儲在存儲器,但你必須小心不要哈哈將代碼中的任何引用都包含在這些結果中,以便將其收集起來。 另請閱讀fetchMoreResults的文檔 - 它可能不符合您的期望。

+0

Thx這正是我期待聽到的:) –

相關問題