100M строк - это довольно много. Вы можете создать его множеством способов: серверы REST, чтение JDBC, Spring Batch , Spring интеграция , Hibernate, ETL. Но суть: время .
Независимо от того, какую архитектуру вы выберете, вам в конечном итоге придется выполнить эти INSERT
в MySQL. Ваш пробег может варьироваться, но только для того, чтобы дать вам порядок величин: при 2K вставок в секунду для заполнения MySQL 100-миллионными строками потребуется полдня ( source ).
Согласно тому же источнику LOAD DATA INFILE
может обрабатывать около 25 тыс. Вставок в секунду (примерно в 10 раз больше и около часа работы).
Учитывая сказанное с таким количеством данных, я бы предложил:
выгрузка таблицы Oracle с использованием собственных инструментов базы данных Oracle, которые создают удобочитаемый контент (или читаемый компьютером, но вы должны иметь возможность его анализировать)
анализировать файл дампа, используя как можно более быстрые инструменты. Может быть, grep
/ sed
/ gawk
/ cut
будет достаточно?
генерировать целевой файл, совместимый с MySQL LOAD DATA INFILE
(это очень настраиваемый)
Импорт файла в MySQL с помощью вышеупомянутой команды
Конечно, вы можете сделать это на Java с красивым и читаемым кодом, проверенным модулем и версионным. Но с таким количеством данных вы должны быть прагматичными.
Это для начальной загрузки. После этого, вероятно, Spring Batch станет хорошим выбором. Если вы можете, попробуйте подключить ваше приложение напрямую к обеим базам данных - опять же, это будет быстрее. С другой стороны, это может быть невозможно по соображениям безопасности.
Если вы хотите быть очень гибким и не привязывать себя непосредственно к базам данных, предоставьте как вход (Oracle), так и вывод (MySQL) за веб-сервисами (REST также подходит) Весенняя интеграция вам очень поможет.