vly*_*cin 13 java database postgresql jdbc batch-processing
我有一个列表,该列表不断增加.我正在做依赖于列表大小的批量添加.我忘了为指定大小的executeBatch设置限制.
计划工作了几个小时.我现在不想停下来,修理并重新开始.
我的问题是,决定添加批次的大小是什么?批次executeBatch()一次最大容量是多少?我有多少时间可以使用addBatch,而不做executeBatch()?
Cra*_*ger 10
PgJDBC对批次有一些限制:
所有请求值和所有结果必须在内存中累积.这包括大blob/clob结果.所以空闲内存是批量大小的主要限制因素.
直到PgJDBC 9.4(尚未发布),返回生成密钥的批次总是为每个条目进行往返,因此它们并不比单个语句执行更好.
即使在9.4中,如果生成的值的大小受限,则返回生成的键的批次仅提供优势.一个单一的text,bytea或无约束varchar的请求的结果字段将迫使司机做每次执行一个往返.
批量处理的好处是减少了网络往返次数.因此,如果您的数据库是您的应用服务器的本地数据,则要少得多.随着批量大小的增加,回报逐渐减少,因为网络等待所花费的总时间很快就会下降,所以通常不会强调尝试尽可能大地批量生产.
如果您正在批量加载数据,请认真考虑使用COPYAPI,通过PgJDBC CopyManager,通过PgConnection接口获取.它允许您将类似CSV的数据流式传输到服务器,以便通过极少的客户端/服务器往返快速批量加载.不幸的是,它的记录显着不足 - 它根本没有出现在主要的PgJDBC文档中,只出现在API文档中.