什么是最大JDBC批量大小?

时间:2014-01-02 13:22:13

标签: java database postgresql jdbc batch-processing

我有一个列表,该列表不断增加。我正在做依赖于列表大小的批量添加。我忘了为指定大小的executeBatch设置限制。

计划工作了几个小时。我现在不想停下来,修理并重新开始。

我的问题是,决定添加批次的大小是什么?批次一次性executeBatch()的最大容量是多少?我没有addBatch可以使用executeBatch()多少次?

3 个答案:

答案 0 :(得分:10)

PgJDBC对批次有一些限制:

批处理的好处是减少了网络往返次数。因此,如果您的数据库是您的应用服务器的本地数据,则要少得多。随着批量大小的增加,回报逐渐减少,因为网络等待所花费的总时间很快就会下降,所以通常不会强调尝试尽可能大地批量生产。

如果您正在批量加载数据,请认真考虑使用COPY API,通过PgJDBC的CopyManager,通过PgConnection接口获取。它允许您将类似CSV的数据流式传输到服务器,以便通过极少的客户端/服务器往返快速批量加载。不幸的是,它的记录显着不足 - 它根本没有出现在主要的PgJDBC文档中,only in the API docs

答案 1 :(得分:2)

AFAIK在内存问题上没有限制。 关于你的问题:语句只在执行批处理时被发送到数据库,所以在你执行批处理之前,内存将继续增长,直到你得到JavaHeapSpace或批处理将被发送到数据库。

答案 2 :(得分:2)

根据JDBC实现,可能存在最大数量的参数标记。

例如,PostgreSQL驱动程序表示参数as a 2-byte integer的数量,在Java中最多为32768。