Копирование данных из файла Excel в базу данных с помощью Mutlithreading

-4

У меня есть требование скопировать огромные данные из строк excel (5,00,000) в базу данных. Должен ли я пойти с методом многопоточности с блокировкой очереди или есть ли другой способ использовать многопоточность в более эффективном масштабе?

спросил(а) 2018-06-29T05:39:00+03:00 2 года, 4 месяца назад
0
58

если вы хотите использовать многопоточность для повышения производительности, вы можете создать один поток для каждой таблицы и попытаться выполнить db-операцию над таблицей. для управления потоками вы можете использовать сервис исполнителя, threadpoolexecutor и т.д.

ответил(а) 2018-07-03T00:49:00+03:00 2 года, 3 месяца назад
57

В настоящее время 500 000 рядов не являются огромной суммой для базы данных. Я думаю, вы должны, прежде всего, оптимизировать доступ к БД, и если у вас нет желаемой производительности, перейдите к более передовым технологиям. Вы заявили Java, на это приходят две оптимизации:

Используйте подготовленный отчет, а не выражение JDBC (или если вы используете какую-либо абстракцию над JDBC, убедитесь, что это случай под капотом). Это позволит БД не повторно обрабатывать запрос каждый раз

Используйте пакетные операции. Только один будет увеличивать скорость в порядке или около того в зависимости от настройки RDBMS:

 PreparedStatement pstmt = connection.prepareStatement(<YOUR_INSERT_SQL>);
for(...) { // chose batch size like 500 to 2000
pstmt.setXXX(<bind the parameters here>)
pstmt.addBatch(); // add to the batch
}
pstmt.executeBatch(); // does bunch of inserts at once

Для выполнения всех этих операций может потребоваться менее минуты, или 1-2 минуты, но не часов, (в зависимости от того, где вы вставляете данные и качество сети, но обычно это так).

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

ответил(а) 2018-06-29T06:15:00+03:00 2 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема