Скопируйте данные из файла Excel в базу данных, используя Mutlithreading - PullRequest
0 голосов
/ 29 июня 2018

У меня есть требование скопировать огромные данные из строк Excel (5 000 000) в базу данных. Стоит ли использовать метод многопоточности Blocking Queue или есть ли другой способ использовать многопоточность в более эффективном масштабе?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

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

0 голосов
/ 29 июня 2018

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

  1. Используйте Подготовленное утверждение, а не Заявление из JDBC (или, если вы используете какую-либо абстракцию поверх JDBC, убедитесь, что это так и есть). Это позволит БД не повторять запрос каждый раз
  2. Использовать пакетные операции. Там один только увеличит скорость на порядок или около того в зависимости от вашей настройки 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 минуты, но не, скажем, часов (конечно, в зависимости от того, куда вы вставляете данные и от качества сети, но обычно это так) .

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

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