2009-11-13 5 views
1

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

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

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

Есть ли какие-либо инструменты, которые помогут или конкурируют с RDBMS, на которые лучше смотреть?

ответ

1

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

+0

Есть хороший шанс, который сделает это за нас. Мы обязательно проверим это. Спасибо! – skiphoppy

1

Короткий ответ нет, вы должны перепроектировать.

Долгий ответ да, но это довольно сумасшедший и будет настоящей болью для настройки и управления.

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

Другой вариант, который я не уверен, будет состоять в том, чтобы иметь N mysqls в главном офисе, который реплицируется из каждого офиса сайта, а затем использовать federated storage engine, чтобы обеспечить общий вид из основной базы данных на сайт рабы. Рабочие станции сайта могут реплицироваться из основной базы данных и получать любые изменения, которые им нужны.

0

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

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

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

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

2

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

Например, ваши таблицы может выглядеть следующим образом:

ID_column | column2 | пункт назначения

Данные в колонке могут выглядеть так: 12345 | 'данные' | 'site1'

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

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

Filtering Published Data for Merge Replication Существует также статья о MSDN под названием «Повышение репликации слиянием Performance», которая может помочь - и вы должны будете изучить основы создания издателей и подписчиков в Репликация слияния SQL Server.

Удачи вам!

0

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

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

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

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

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

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

1

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

1

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

3

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

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