Можно ли настроить отфильтрованную репликацию базы данных по схеме «звезда»?

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

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

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

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


person skiphoppy    schedule 13.11.2009    source источник


Ответы (8)


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

person rjp    schedule 23.11.2009
comment
Есть хороший шанс, что сделает это за нас. Мы обязательно это проверим. Спасибо! - person skiphoppy; 23.11.2009

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

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

person chenson42    schedule 27.01.2010

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

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

ID_столбца | столбец2 | назначения

Данные в столбце могут выглядеть так: 12345 | 'данные' | 'сайт1'

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

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

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

Удачи!

person vdoogs    schedule 19.11.2009

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

person Community    schedule 22.11.2009

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

person wwerner    schedule 23.11.2009

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

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

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

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

person brian-brazil    schedule 14.11.2009

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

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

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

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

person Adrian K    schedule 19.11.2009

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

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

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

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

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

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

person MikeEL    schedule 19.11.2009