PgJDBC memiliki beberapa batasan terkait batch:
-
Semua nilai permintaan, dan semua hasil, harus diakumulasikan dalam memori. Ini termasuk hasil gumpalan/gumpalan besar. Jadi memori bebas adalah faktor pembatas utama untuk ukuran batch.
-
Sampai PgJDBC 9.4 (belum dirilis) , batch yang mengembalikan kunci yang dihasilkan selalu melakukan perjalanan bolak-balik untuk setiap entri , jadi mereka tidak lebih baik daripada eksekusi pernyataan individual.
-
Bahkan di 9.4, kumpulan yang mengembalikan kunci yang dihasilkan hanya menawarkan manfaat jika nilai yang dihasilkan dibatasi ukurannya. Satu
text
,bytea
atauvarchar
. yang tidak dibatasi kolom di hasil yang diminta akan memaksa pengemudi melakukan perjalanan pulang pergi untuk setiap eksekusi .
Manfaat batching adalah pengurangan perjalanan pulang pergi jaringan. Jadi tidak ada gunanya jika DB Anda lokal ke server aplikasi Anda. Ada pengembalian yang semakin berkurang dengan bertambahnya ukuran batch, karena total waktu yang dibutuhkan dalam jaringan menunggu berkurang dengan cepat, sehingga seringkali tidak berhasil dengan menekankan mencoba membuat batch sebesar mungkin.
Jika Anda memuat data secara massal, pertimbangkan untuk menggunakan COPY
API sebagai gantinya, melalui CopyManager
PgJDBC , diperoleh melalui PgConnection
antarmuka. Ini memungkinkan Anda mengalirkan data seperti CSV ke server untuk pemuatan massal yang cepat dengan sangat sedikit perjalanan pulang pergi klien/server. Sayangnya, ini sangat kurang terdokumentasi - sama sekali tidak muncul di dokumen PgJDBC utama, hanya di dokumen API
.