Как тиражировать две разные системы баз данных? - PullRequest
4 голосов
/ 08 января 2010

Я не уверен, подходит ли он в точности стековым потоком, однако, поскольку я ищу какой-то код, а не инструмент, я думаю, что это так.

Я ищу способ репликации / синхронизации различных систем баз данных - в данном случае: mysql и mongodb. Мы работаем как для разных целей. Мы начали с базы данных mysql и позже добавили mongodb для специальных приложений. Есть данные, которые мы хотели бы иметь в обеих базах данных, где мы хотим иметь ограничения в mysql соответственно dbrefs в mongodb. Например: нам нужна запись пользователя в mysql, но также и в mongodb для ссылок между таблицами соответственно объектов. На данный момент у нас есть cronjob, который выгружает данные mysql и импортирует их в mongodb. Однако, хотя это работает довольно хорошо, это не то решение, которое мы хотели бы иметь.

Я думаю, что на данный момент достаточно односторонней репликации - mysql-> mongodb, важная часть заключается в том, что репликация работает в режиме "реального времени", так же, как репликация mysql master-> slave.

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

Спасибо!

Ответы [ 4 ]

2 голосов
/ 27 января 2010

SymmetricDS - это программное обеспечение с открытым исходным кодом, основанное на Java, с поддержкой веб-интерфейса, независимое от базы данных, для синхронизации / репликации данных, которое может решить некоторые проблемы. У него есть точка расширения с именем IDataLoaderFilter, которую вы можете использовать для реализации MongodbDataLoader.

Это поможет с односторонней репликацией базы данных. Может быть немного сложнее синхронизироваться из реляционной базы данных MongoDb ->, но команда SymmetricDS будет очень полезна при поиске решения.

2 голосов
/ 08 января 2010

То, что вы ищете, называется EAI ( Интеграция корпоративных приложений ). Есть много коммерческих инструментов, но по предоставленной ссылке вы также найдете пару решений OSS. Основой EAI является то, что у вас есть источники данных и приемники данных. Платформа EAI предлагает инструменты для создания пользовательских насосов между ними.

Я предлагаю либо использовать триггер БД для запуска синхронизации, либо отправить сигнал триггера в ваших приложениях. Обратите внимание, что решения для дырки с ключом не существует, поскольку синхронизация может стать произвольно сложной (например, как убедиться, что все строки скопированы?).

0 голосов
/ 08 января 2010

Технически, вы можете настроить процесс, который анализирует двоичный журнал сервера MySQL и реплицирует соответствующие SQL-запросы. Я никогда не делал ничего подобного с другой базой данных в качестве раба, но, может быть, это стоит попробовать?

0 голосов
/ 08 января 2010

Насколько я понимаю, вам нужно разработать какую-то "управляющую программу", в которой есть драйверы для каждой СУБД, и запустить ее как демон. Демон должен иметь триггер или очень маленький интервал повторной проверки, чтобы синхронизировать БД

...