2015-04-15 1 views
0

У меня есть вопрос относительно размера кучи, который должен выполняться при выполнении запроса с миллиардами строк.Cassandra JDBC heap

Я использую 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

Я имел в виду, что java сохраняет весь результат, полученный в куче, даже если он получил его из 'FETCH_SIZE'' FETCH_SIZE'. И если да, есть ли способ сбросить его, чтобы сохранить размер кучи до максимума 2 'FETCH_SIZE' –

ответ

0

Предполагая, что вы используете драйвер Datastax из documentation для setFetchSize:

выборки управления размерами, сколько в результате строки будут извлекаемые одновременно (цель в том, чтобы избежать загрузки слишком много результатов в памяти для запросов давая большие результаты). Обратите внимание, что в то время как можно использовать значение 1, это высоко не рекомендуется использовать такое на практике, так как оно даст очень низкую производительность. Если в сомнение, оставив по умолчанию, вероятно, хорошая идея.

Только SELECT-запросы используют только эту настройку.

Примечание: Paging не поддерживается с родной версией протокола 1. Если вы вызываете этот метод с FetchSize > 0 и FetchSize = Integer.MAX_VALUE и версия протокола используется (то есть, если вы имеете силу версия 1 через Cluster.Builder.withProtocolVersion (INT) или вы используете Cassandra 1.2), вы получите UnsupportedProtocolVersionException при подаче этого заявления для исполнения

Так что не хранит ранее неправдоподобные результаты в памяти, но вы должны быть осторожны, чтобы не га какие-либо ссылки в вашем коде на эти результаты, чтобы он был собран мусором. Также прочитайте документацию для fetchMoreResults - она ​​может не работать так, как вы ожидаете.

+0

Thx это именно то, что я хотел услышать :) –