DB Query检索大数据集

时间:2016-02-27 16:47:55

标签: database perl jdbc

当我们使用JDBC(Java)或DBD(Perl)并触发查询时,我们会得到结果。

现在在我的程序中,我只是将结果写入文件。

数据集很大(数百万行)。

有没有办法减少内存占用。

我在Perl中观察到的是它没有释放用于将数据绑定到变量的内存。

的伪代码

的Perl

1)建立连接。执行查询

my $data ;

while ( $dbh->next )
{

    # Bind variables ;

    $data = ..

    writeToFile ( data  =>  $ data ) ;

}

爪哇

在JDBC中,如果我将绑定数据变量/对象设置为null,它是否会在执行垃圾收集时释放内存

1)建立连接

while ( results->hasNext() )
{

    Data data ;      

    writeToFile ( data ) ;

    data = null ;
}

PERL DBD驱动程序。

I have not installed any special driver. Whatever was installed by unix admin with perl module.

JDBC驱动程序。

Standard sybase driver. 

1 个答案:

答案 0 :(得分:0)

  

有没有办法减少内存占用

至少对于JDBC来说可能存在;它取决于JDBC驱动程序的实现。例如,MySQL Connector / J的默认行为是立即检索整个ResultSet。但是,您可以将JDBC连接告诉" stream"通过为setFetchSize(Integer.MIN_VALUE)对象指定Statement来获得结果。