Можно ли настроить отфильтрованную репликацию базы данных по схеме «звезда»? - PullRequest
1 голос
/ 13 ноября 2009

У нас есть клиент, которому необходимо настроить N локальных баз данных, каждая из которых содержит данные одного сайта, а затем иметь основную корпоративную базу данных, содержащую объединение всех N баз данных. Изменения в отдельной базе данных сайта необходимо распространить на основную базу данных, а изменения в главной базе данных необходимо распространить на соответствующую отдельную базу данных сайта.

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

Какие у меня есть варианты для создания этого нового звездного паттерна с MySQL? Я знаю, что мы можем реплицировать только определенные таблицы, но есть ли способ отфильтровать репликацию по записям?

Существуют ли какие-либо инструменты, которые могли бы помочь или конкурировать с СУРБД, на которые было бы лучше взглянуть?

Ответы [ 8 ]

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

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

Мы использовали его для синхронизации более 1000 баз данных розничного магазина MySQL с корпоративной базой данных Oracle.

2 голосов
/ 20 ноября 2009

Я делал это раньше, и AFAIK это самый простой способ. Вы должны изучить использование репликации слиянием Microsoft SQL Server и фильтрацию строк. Ваша фильтрация строк будет настроена таким образом, чтобы в ней был столбец, в котором указывалось бы, к какому целевому сайту он должен обратиться.

Например, ваши таблицы могут выглядеть так:

ID_column | колонка2 | назначения

Данные в столбце могут выглядеть следующим образом: 12345 | «данные» | 'Site1'

Затем вы должны настроить свой «подписчик» репликации слиянием site1 на столбец «destination» и значение «site1».

Эта статья, вероятно, поможет:

Фильтрация опубликованных данных для репликации слиянием Также есть статья на msdn под названием «Повышение производительности репликации слиянием», которая может помочь, а также вам нужно будет изучить основы настройки издателей и подписчиков в репликации слиянием SQL Server.

Удачи!

1 голос
/ 23 ноября 2009

Может быть стоит взглянуть на mysql-table-sync от maatkit , который позволяет синхронизировать таблицы с необязательным предложением - where .

1 голос
/ 23 ноября 2009

Просто случайный указатель: Oracle lite поддерживает это. Я оценил его один раз для аналогичной задачи, однако ему нужно что-то установить на всех клиентах, что было невозможно. Грубый обзор архитектуры можно найти здесь

1 голос
/ 22 ноября 2009

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

1 голос
/ 14 ноября 2009

Короткий ответ нет, вам следует изменить дизайн.

Длинный ответ: да, но это довольно сумасшедший процесс, который будет очень сложен в настройке и управлении.

Одним из способов было бы обойти репликацию основной базы данных между сайтами. Используйте сценарий для репликации, скажем, 30 секунд из записи сайта, как далеко он продвинулся, а затем перейдите на следующий сайт. Возможно, вы захотите посмотреть на replicate-do-db и друзей , чтобы ограничить объем реплицируемой информации.

Другой вариант, который, я не уверен, сработал бы, - это иметь N mysqls в главном офисе, который реплицируется из каждого из офисов сайта, а затем использовать объединенный механизм хранения , чтобы обеспечить общее представление из Основная база данных на сайт рабов. Ведомые сайты могут реплицироваться из основной базы данных и получать любые необходимые изменения.

0 голосов
/ 20 ноября 2009

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

У меня нет подробного ответа для вас, но это высокий уровень того, что я бы сделал:

Я бы выбирал из каждой базы данных список изменений за прошедший период (разумные сроки), создавал операторы вставки и удаления, которые объединяли бы все данные в «большой» базе данных, а затем отделял меньшие наборы вставок и удалить операторы для каждой конкретной базы данных.

Я бы тогда запустил это.

В этой настройке могут возникнуть проблемы слияния, если есть какие-либо совпадения с входящими и исходящими данными.

Существует также проблема потери или дублирования данных, поскольку ваши временные рамки не были правильно построены.

0 голосов
/ 19 ноября 2009

Похоже, вам нужна помощь специалиста - и я, вероятно, не так.

Насколько «в реальном времени» должна быть эта репликация? Какой-то процесс ETL (или процессы), возможно, вариант. мы используем MS SSIS и Oracle собственными силами; SSIS, кажется, довольно хорош для работы типа ETL (но я не работаю над этим конкретным угольным лицом, поэтому я не могу сказать точно).

Насколько изменчивы данные? Вы сказали бы, что данные в основном операционные / транзакционные? О каких объемах данных вы говорите?

Используется ли центральный мастер в качестве локальной БД для офиса, в котором он расположен? если это так, вы можете изменить это - иметь головной офис, работающий так же, как удаленный офис, - чтобы вы могли одинаково относиться ко всем офисам; Вы будете часто сталкиваться с проблемами / аномалиями, если разные сайты будут обрабатываться по-разному.

...