2015-09-11 3 views
1

Мне нужно решение для получения всей таблицы из одного экземпляра DB (DB1) и создания ее на другом экземпляре DB (DB2). Раньше я сильно использовал Spring Integration, но я слышал, что Spring Batch лучше подходит для такого случая, и я бы хотел попробовать.Клонировать таблицу из базы данных в базу данных

Таким образом, это возможно/есть Sence использовать Spring Batch работу со следующими шагами:

  1. Создание пустой таблицы в DB2, имеющей такую ​​же схему, как исходной таблицы из DB1.
  2. Выберите из таблицы DB1 -> обновите таблицу DB2. В случае, если smth ошибочно во время таблицы «Откат и удаление» в DB2.

Использование интеграции с весной Я вижу возможное решение с JdbcInboundChannelAdapter -> QueueChannel -> OutboundGateway, но, возможно, Spring Batch может быть лучшим выбором? Любые предложения очень ценятся.

+2

Почему бы просто не использовать базу данных для этого? Экспорт в DB1 и импорт в DB2? Почему вы хотите сделать это с помощью приложения? –

+0

Поскольку это должно быть частью существующего приложения и службы, кроме того, это очевидно. –

+1

И медленный, и склонный к ошибкам. Базы данных обычно имеют эту поддержку из коробки. Сначала я попытался бы получить DBA на борту, который может рассказать вам, как легко это сделать с SQL, затем напишите об этом службу. Не тяните всю базу данных в памяти и храните ее снова, как правило, плохую идею, особенно если это простая копия ... (ИМХО). –

ответ

1

Это зависит от требований, которые у вас есть.

Мы использовали весеннюю партию для загрузки DWH изначально. Но это была не простая копия. Данные в производственной БД хранились в вертикальном дизайне таблицы (aka entity-attribute-value-model). Более того, каждая запись также была битпоральной историей. В общем, это были около 5'000'000'000 рядов, которые нужно было сгруппировать и преобразовать в горизонтальную структуру базы данных относительно правильных временных размеров. И, конечно же, это было от DB2 до Oracle.

Поэтому нам пришлось преобразовать структуру значительно, нам пришлось преобразовать типы данных, если это необходимо, и у нас было 5 миллиардов строк для обработки.

Если у вас есть простая копия 1: 1 в той же системе БД, тогда самым простым подходом было бы использовать инструменты БД.

Если вам необходимо перенести между различными системами БД, весной может быть опция.

Если вам нужно преобразовать данные, будь то структура или типы, весенняя партия может быть опцией.

Если у вас много строк, вы можете использовать функции разбиения весенней партии для параллелизации или просто запускать одну и ту же работу с разными диапазонами id в пару раз.

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

В компании, с которой я работаю в настоящий момент, у нас есть полностью общий читатель и писатель File/Db, которые основаны исключительно на метамодели БД. Если я хочу сделать простое задание на копирование, мне просто нужно определить источник и целевой источник данных вместе с нужными таблицами и соответствующим образом инициализировать читателей и писателей. Если имена совпадают, мне даже не нужно добавлять конфигурацию для сопоставления данных между таблицами.

Это приводит нас к следующим основным вопросам

  1. какая логика преобразования требуется, если это вообще?
  2. Какая производительность необходима?
  3. Сколько столов необходимо скопировать?
  4. источник и цель на одной системе?
+0

Благодарим вас за широкий ответ, а также за ваши баллы: 1. Не требуется никаких преобразований. 2. Производительность не нужна - мы просто хотим, чтобы клон был успешно выполнен. 3. Один за рабочую сессию. 4. Источник и цель могут быть такими же, как и на разных системах, обычно это будут разные экземпляры БД. –

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