2015-04-14 2 views
0

Я вызываю запросы на удаление в цикле с использованием JDBC. Количество записей, которые будут удалены с помощью конкретного запроса на удаление, несовместимо. Это может быть 40, 80 или 100 и т. Д. Мой сценарий - мне нужно зафиксировать после каждого 500 удалений записей.Необходимо зафиксировать после каждого 500 удаленных строк

Способ, которым я был реализован, я накапливаю количество записей, которые будут удалены конкретным запросом на удаление, до тех пор, пока счет не будет равен или больше 500. Как только счет станет равным или больше 500, я приостанавливаю счет накопления и вызывая запрос на удаление и обязуюсь удалить 500 записей за один снимок. Есть ли другой лучший подход или стандартный способ JDBC для этого?

+0

"* Мне нужно зафиксировать после каждого 500 удалений записей *" - почему вы думаете, что вам это нужно? И какую СУБД вы используете? Postgres? Oracle? –

+0

Я использую оракул. Причина, по которой мне это нужно, заключается в том, что в нашей производственной базе есть ограничение, которое мы можем удалять или вставлять или обновлять только 500 записей за один кадр, потому что эта модификация каскадируется в нашу резервную базу данных. Этот предел позволяет избежать хитов производительности, поскольку мы имеем дело с миллиардами данных о клиентах. –

ответ

0

Вы можете использовать два API JDBC для удаления: вы можете выполнить запрос, например delete ... where PK in (...), и передать массив из 500 первичных ключей. Или вы можете использовать пакет JDBC для пакетной обработки SQL-запросов и запускать их как один.

Пакет - это всего лишь способ упаковать несколько SQL-запросов в один «разговор» с базой данных. Увеличение производительности в основном связано с сетью: вместо отправки сотен небольших пакетов вы отправляете несколько больших. Разбор и обработка на стороне БД одинаковы.

Но если вы выполняете более сложный запрос и собираете количество измененных строк, то для этого нет специальной поддержки JDBC. Вы должны аккумулировать счет самостоятельно, а затем commit вручную, когда счет становится слишком большим.

Смежные вопросы