PgJDBC har nogle begrænsninger med hensyn til batches:
-
Alle anmodningsværdier og alle resultater skal akkumuleres i hukommelsen. Dette inkluderer store klat/klob resultater. Så ledig hukommelse er den vigtigste begrænsende faktor for batchstørrelse.
-
Indtil PgJDBC 9.4 (endnu ikke udgivet) , batches, der returnerer genererede nøgler, udfører altid en rundtur for hver indtastning , så de er ikke bedre end individuelle erklæringsudførelser.
-
Selv i 9.4 giver batches, der returnerer genererede nøgler, kun en fordel, hvis de genererede værdier er størrelsesbegrænsede. En enkelt
text
,bytea
eller ubegrænsetvarchar
felt i det anmodede resultat vil tvinge chaufføren til at køre en rundtur for hver udførelse .
Fordelen ved batching er en reduktion af netværksrejser. Så der er meget mindre mening, hvis din DB er lokal for din app-server. Der er et aftagende afkast med stigende batchstørrelse, fordi den samlede tid, der tages i netværksventer, falder hurtigt, så det er ofte ikke arbejdsbetingende at forsøge at gøre batches så store som muligt.
Hvis du masseindlæser data, skal du seriøst overveje at bruge COPY
API i stedet via PgJDBC's CopyManager
, opnået via PgConnection
interface. Det giver dig mulighed for at streame CSV-lignende data til serveren for hurtig bulk-loading med meget få klient/server rundrejser. Desværre er det bemærkelsesværdigt underdokumenteret - det vises slet ikke i de vigtigste PgJDBC-dokumenter, kun i API-dokumenterne
.