2015-04-15 33 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这正是我期待听到的:) –

相关问题