Как синхронизировать две разные базы данных с миллионами строк и разной структурой столбцов

#database #oracle #postgresql

#База данных #Oracle #postgresql

Вопрос:

У меня возникла некоторая проблема с синхронизацией базы данных между двумя разными базами данных (одна — Oracle, другая — Postgresql), эти две базы данных расположены в двух разных местах (т. Е. В Двух разных физических или географических местоположениях), а средняя скорость Интернета будет составлять около 1 МБ / с.

Вот проблема, допустим, у меня есть следующие таблицы:

  1. tableORC внутри Oracle DB (эта таблица содержит буквально миллионы строк), и

  2. tablePG внутри Postgresql DB (эта таблица содержит буквально сотни тысяч строк)

Эти две таблицы (внутри разных баз данных) будут иметь разную структуру столбцов, вот структуры этих таблиц:

tableORC:

  ----------------- ------------- -- -- -- 
| serial_26_chars | description |  |  |  |
 ----------------- ------------- -- -- -- 
|                 |             |  |  |  |
 ----------------- ------------- -- -- -- 
  

tablePG:

  ---- ------ -- -- -- 
| id | desc |  |  |  |
 ---- ------ -- -- -- 
|    |      |  |  |  |
 ---- ------ -- -- -- 
  

tableORC всегда будет получать time-series изменения из многих приложений / API, т. Е. Почти каждую секунду будет выполняться операция CRUD tableORC , моя цель — tablePG всегда синхронизировать tableORC , т. е.:

  1. Если одна serial_26_chars строка изначально присутствовала, но затем была удалена, то id с тем же значением with serial_26_chars также будет удалена tablePG .

  2. Если description строка была обновлена, то desc из id нее также будет обновляться соответствующая tablePG .

  3. Если одна serial_26_chars строка изначально была создана заново, то id с тем же значением with serial_26_chars также будет создана заново tablePG .

и учтите, что за одну секунду выполняются буквально тысячи операций CRUD tableORC , и я хочу, чтобы синхронизация с tablePG происходила в считанные секунды через Интернет (другое расположение сервера).

Для вашей информации, tableORC были размещены на сервере корпоративного уровня, в то время tablePG как были размещены на стандартном настольном ПК потребительского уровня.

Итак, как решить эту проблему? можете ли вы предложить мне какой-нибудь метод решения этой проблемы?

Спасибо.

Комментарии:

1. Я знаю, что вы можете настроить триггеры на сервере oracle для отправки данных на сервер postgres с помощью ODBC, хотя я никогда не использовал его сам. Однако производительность будет ограничена вашим подключением; У вас также может быть дополнительная таблица на сервере oracle для хранения каждой операции, выполненной в этой таблице, что упростит поиск удалений и обновлений.

2. Вы могли бы попробовать symmetricds.org

3. Я бы использовал внешнюю таблицу oracle_fdw в PostgreSQL. Таким образом, запросы и изменения данных в таблице PostgreSQL будут перенаправлены в Oracle, данные в PostgreSQL не хранятся, а таблицы всегда идеально синхронизированы. Вы можете использовать представление в PostgreSQL, если хотите видеть только часть данных.

Ответ №1:

Для обновления изменений необходимо внедрить веб-службы на сервере postgres.

Первый вариант: для каждой операции с сервера oracle Второй вариант: один раз в день просматривайте журнал изменений на сервере oracle.

Вы можете использовать что-то вроде интеграции данных Pentaho на сервере oracle для просмотра данных.