PgJDBC có một số hạn chế về lô:
-
Tất cả các giá trị yêu cầu và tất cả các kết quả phải được tích lũy trong bộ nhớ. Điều này bao gồm kết quả đốm / cục lớn. Vì vậy, bộ nhớ trống là yếu tố hạn chế chính đối với kích thước hàng loạt.
-
Cho đến khi PgJDBC 9.4 (chưa được phát hành) , các lô trả về các khóa đã tạo luôn hoạt động khứ hồi cho mọi mục nhập , vì vậy chúng không tốt hơn các lần thực thi câu lệnh riêng lẻ.
-
Ngay cả trong 9.4, các lô trả về các khóa đã tạo chỉ mang lại lợi ích nếu các giá trị được tạo bị giới hạn về kích thước. Một
text
,bytea
hoặcvarchar
không bị giới hạn trường trong kết quả được yêu cầu sẽ buộc trình điều khiển thực hiện một chuyến đi khứ hồi cho mỗi lần thực hiện .
Lợi ích của việc phân lô là giảm các chuyến đi vòng trong mạng. Vì vậy, sẽ có ít điểm hơn nếu DB của bạn là cục bộ với máy chủ ứng dụng của bạn. Lợi tức giảm dần khi kích thước lô ngày càng tăng, bởi vì tổng thời gian chờ trong mạng giảm nhanh chóng, do đó, công việc thường không quá căng thẳng về việc cố gắng tạo ra các lô càng lớn càng tốt.
Nếu bạn đang tải dữ liệu hàng loạt, hãy nghiêm túc xem xét việc sử dụng COPY
Thay vào đó, API, thông qua CopyManager
của PgJDBC , có được thông qua PgConnection
giao diện. Nó cho phép bạn truyền trực tuyến dữ liệu giống CSV đến máy chủ để tải hàng loạt nhanh chóng với rất ít chuyến đi vòng quanh máy khách / máy chủ. Thật không may, nó được ghi chép quá ít - nó hoàn toàn không xuất hiện trong tài liệu PgJDBC chính, chỉ trong tài liệu API
.