Ответ 1
PgJDBC имеет некоторые ограничения в отношении партий:
-
Все значения запроса и все результаты должны накапливаться в памяти. Это включает в себя большие результаты blob/clob. Таким образом, свободная память является основным ограничивающим фактором для размера партии.
-
Пока PgJDBC 9.4 (еще не выпущен), партии, которые возвращают сгенерированные ключи, всегда делают круговую поездку для каждая запись, поэтому они не лучше, чем выполнение отдельных операторов.
-
Даже в 9.4 партии, которые возвращают сгенерированные ключи, предлагают только выгоду, если сгенерированные значения ограничены по размеру. Единственное поле
text
,bytea
или unconstrainedvarchar
в запрошенном результате заставит драйвер совершить двустороннюю поездку для каждого выполнения.
Преимущество пакетной обработки - это сокращение числа поездок по сети. Таким образом, гораздо меньше, если ваш БД локален для вашего сервера приложений. Там уменьшается доход с увеличением размера партии, потому что общее время, затрачиваемое на ожидание сети, быстро падает, поэтому часто не работает, усиливая попытку сделать партии как можно большими.
Если вы загружаете данные с большой загрузкой, серьезно подумайте об использовании API COPY
вместо этого через PgJDBC CopyManager
, полученный через интерфейс PgConnection
. Он позволяет вам передавать CSV-подобные данные на сервер для быстрой массовой загрузки с очень небольшим количеством посещений клиент/сервер. К сожалению, это замечательно недостаточно документально - оно вообще не отображается в основных документах PgJDBC, только в документах API.