#database #oracle #postgresql
#База данных #Oracle #postgresql
Вопрос:
У меня возникла некоторая проблема с синхронизацией базы данных между двумя разными базами данных (одна — Oracle, другая — Postgresql), эти две базы данных расположены в двух разных местах (т. Е. В Двух разных физических или географических местоположениях), а средняя скорость Интернета будет составлять около 1 МБ / с.
Вот проблема, допустим, у меня есть следующие таблицы:
-
tableORC внутри Oracle DB (эта таблица содержит буквально миллионы строк), и
-
tablePG внутри Postgresql DB (эта таблица содержит буквально сотни тысяч строк)
Эти две таблицы (внутри разных баз данных) будут иметь разную структуру столбцов, вот структуры этих таблиц:
tableORC:
----------------- ------------- -- -- --
| serial_26_chars | description | | | |
----------------- ------------- -- -- --
| | | | | |
----------------- ------------- -- -- --
tablePG:
---- ------ -- -- --
| id | desc | | | |
---- ------ -- -- --
| | | | | |
---- ------ -- -- --
tableORC
всегда будет получать time-series
изменения из многих приложений / API, т. Е. Почти каждую секунду будет выполняться операция CRUD tableORC
, моя цель — tablePG
всегда синхронизировать tableORC
, т. е.:
-
Если одна
serial_26_chars
строка изначально присутствовала, но затем была удалена, тоid
с тем же значением withserial_26_chars
также будет удаленаtablePG
. -
Если
description
строка была обновлена, тоdesc
изid
нее также будет обновляться соответствующаяtablePG
. -
Если одна
serial_26_chars
строка изначально была создана заново, тоid
с тем же значением withserial_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 для просмотра данных.