PgJDBC hat einige Einschränkungen in Bezug auf Stapel:
-
Alle Anforderungswerte und alle Ergebnisse müssen im Speicher akkumuliert werden. Dazu gehören große Blob/Clob-Ergebnisse. Freier Speicher ist also der Hauptbegrenzungsfaktor für die Stapelgröße.
-
Bis PgJDBC 9.4 (noch nicht veröffentlicht) , Batches, die generierte Schlüssel zurückgeben, führen immer einen Roundtrip für jeden Eintrag durch , also sind sie nicht besser als einzelne Anweisungsausführungen.
-
Selbst in 9.4 bieten Batches, die generierte Schlüssel zurückgeben, nur dann einen Vorteil, wenn die generierten Werte größenbegrenzt sind. Ein einzelner
text
,bytea
oder unbeschränktesvarchar
Feld im angeforderten Ergebnis zwingt den Fahrer, für jede Ausführung eine Hin- und Rückfahrt zu machen .
Der Vorteil des Batchings ist eine Reduzierung der Netzwerk-Roundtrips. Es macht also viel weniger Sinn, wenn Ihre DB lokal auf Ihrem App-Server ist. Mit zunehmender Stapelgröße sinkt der Ertrag, da die Gesamtzeit für Netzwerkwartezeiten schnell abfällt, sodass es oft nicht anstrengend ist, zu versuchen, Stapel so groß wie möglich zu machen.
Wenn Sie Daten massenhaft laden, sollten Sie ernsthaft die Verwendung von COPY
in Betracht ziehen API stattdessen über den CopyManager
von PgJDBC , erhalten über PgConnection
Schnittstelle. Damit können Sie CSV-ähnliche Daten zum schnellen Massenladen mit sehr wenigen Client/Server-Roundtrips auf den Server streamen. Leider ist es bemerkenswert wenig dokumentiert – es erscheint überhaupt nicht in den Hauptdokumenten von PgJDBC, nur in der API-Dokumentation
.