PgJDBC har några begränsningar när det gäller batcher:
-
Alla förfrågningsvärden och alla resultat måste ackumuleras i minnet. Detta inkluderar stora blob/klump-resultat. Så ledigt minne är den huvudsakliga begränsande faktorn för batchstorlek.
-
Till PgJDBC 9.4 (ännu ej släppt) , batcher som returnerar genererade nycklar gör alltid en tur och retur för varje post , så de är inte bättre än körningar av individuella uttalanden.
-
Även i 9.4 erbjuder batcher som returnerar genererade nycklar bara en fördel om de genererade värdena är storleksbegränsade. En enda
text
,bytea
eller obegränsadvarchar
fältet i det begärda resultatet kommer att tvinga föraren att göra en tur och retur för varje körning .
Fördelen med batchning är en minskning av nätverket tur och retur. Så det är mycket mindre poäng om din DB är lokal för din appserver. Det finns en minskande avkastning med ökande batchstorlek, eftersom den totala tiden som tas i nätverksväntningar minskar snabbt, så det är ofta inte stressande på jobbet med att försöka göra batchs så stora som möjligt.
Om du massladdar data, överväg allvarligt att använda COPY
API istället via PgJDBC:s CopyManager
, erhållen via PgConnection
gränssnitt. Det låter dig strömma CSV-liknande data till servern för snabb bulkladdning med mycket få klient/server tur och retur. Tyvärr är det anmärkningsvärt underdokumenterat - det visas inte alls i PgJDBC-dokumenten, endast i API-dokumenten
.