Что происходит на стороне БД, когда я использую многопоточность для операций обновления? - PullRequest
0 голосов
/ 05 апреля 2020

Контекст моего вопроса:

Я использую проприетарную базу данных (целевую базу данных) и не могу раскрыть имя БД (вы можете не знать, даже если я открою имя).

Здесь мне обычно нужно обновить записи, используя java. (Количество записей варьируется от 20000 до 40000) Каждая транзакция обновления занимает одну или две секунды для этой БД. Итак, вы видите, что время выполнения будет в часах. Для этого API базы данных отсутствуют функции пакетного выполнения. Для этого я думаю использовать многопотоковую функцию Java, вместо того, чтобы выполнять все записи в одном процессе, я хочу создать поток для каждых 100 записей. Мы знаем, что Java может заставить эти потоки работать параллельно.

Но я хочу знать, как БД обрабатывает эти потоки, использующие одно и то же соединение? Я могу найти это, запустив программу следа и сравнить временные интервалы. Я чувствую, что это может быть в некоторой степени обманчиво. Я знаю, что у вас мало информации о базе данных. Вы можете просто ответить на этот вопрос, предполагая, что база данных - это MS SQL / MySQL.

. Пожалуйста, предложите мне, если есть какая-либо другая функция в java, которую я могу использовать для ускорения выполнения этой программы, если не многопоточность .

1 Ответ

1 голос
/ 07 апреля 2020

Не рекомендуется использовать одно соединение с несколькими потоками, вы можете прочитать об этом: здесь .

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

Если у вас есть возможность использовать Spring Framework, ознакомьтесь с Spring Batch .

Spring Batch предоставляет многократно используемые функции, которые необходимы для обработки больших объемов записей, включая ведение журнала / трассировку, управление транзакциями, статистику обработки задания, перезапуск задания, пропуск, и управление ресурсами. Он также предоставляет более продвинутые технические услуги и функции, которые позволят выполнять пакетные задания чрезвычайно большого объема и с высокой производительностью благодаря методам оптимизации и разделения. Простые и сложные пакетные задания большого объема могут использовать платформу с высокой степенью масштабируемости для обработки значительных объемов информации.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...