2015-10-26 2 views
0

Мне нужно очень быстро обновить/вставить большое количество записей. Я вижу 2 вариантаjdbc executeBatch против выполнения с большим запросом

  • создает много запросов и отправить их с помощью executeBatch
  • создать один большой запрос (содержит все обновления/вставки в синтаксисе дб ​​специфические) и просто запустить его. Поскольку количество обновлений исправлено («размер партии»), я тоже могу подготовить это заявление

Цель db - оракул. Количество вставок/обновлений в пакете - это фиксированное число от 1000 до 10000 (влияет ли это число на производительность?)

Итак, какой путь?

ответ

1

Ваши варианты по существу одинаковы. На самом деле они могут быть идентичными, если только ваш второй вариант не выполняется плохо.

Использование встроенного PreparedStatement дозирования является более безопасным, так как водитель будет знать, что делать намного лучше, чем вы. Есть меньше шансов на ошибку программиста, и если вам когда-нибудь случится, что вы измените поставщика баз данных, вам не нужно будет дважды проверять, действительно ли ваше решение остается в силе.

Обязательно проверьте, как правильно выполнить дозирование. Например, размер партии обычно составляет 100 вместо полного количества строк, которые вы хотите вставить (чтобы у вас было 10 executeBatch() es, чтобы вставить 1000 строк).

+0

спасибо, в моем случае я хочу использовать компонент jdbc для верблюдов Apache (не использует executeBatch). Таким образом, это подразумевает второе решение, или я должен реализовать первый вариант самостоятельно, не используя верблюда, чтобы делать обновления. – dermoritz

+0

Camel предназначен для интеграции, тогда как вы спрашивали о дозировании. Существенное различие в подходах. – Kayaman

+0

вот почему я акс. на данный момент мы смешали оба подхода. Если бы мы переключились на sql-компонент верблюда, мы могли бы использовать дозирование через верблюда (прямая поддержка sql-компонентом). В любом случае, ваш ответ очень помог, сказав, что это не вопрос производительности. – dermoritz