Синхронизация 2 базы данных с разными схемами - PullRequest
3 голосов
/ 13 июля 2010

У нас есть нормализованная база данных SQL Server 2008, разработанная с использованием общих таблиц. Таким образом, вместо отдельной таблицы для каждой сущности (например, «Продукты», «Заказы», ​​«Элементы заказа» и т. Д.) У нас есть общие таблицы (сущности, экземпляры, отношения, атрибуты и т. Д.).

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

Ура, Мош

1 Ответ

3 голосов
/ 13 июля 2010

Когда две базы данных имеют настолько радикально разные схемы, вам следует обратить внимание на методы переноса или репликации данных, а не на синхронизацию.SQL Server предоставляет две технологии для этого, SSIS и Replication, или вы можете написать свой собственный скрипт для этого.

Репликация будет принимать новые или измененные данные из исходной базы данных и копировать их в целевую базу данных.Он предоставляет механизмы для планирования, упаковки и распространения изменений и может обрабатывать как в режиме реального времени, так и пакетные обновления.Для работы необходимо добавить достаточно информации в обе базы данных, чтобы отслеживать изменения и соответствующие строки.В вашем случае было бы трудно определить, какие «Продукты» были изменены, поскольку вам нужно было бы идентифицировать все соответствующие измененные строки в 4 или более разных таблицах.Это можно сделать, но это потребует определенных усилий.В любом случае вам придется создавать представления, соответствующие целевой схеме, поскольку репликация не позволяет преобразовывать исходные данные.

Служба SSIS извлечет данные из одного источника, преобразует их и передает их вцель.Он не имеет встроенных механизмов для отслеживания изменений, поэтому вам придется добавлять поля в таблицы для отслеживания изменений.Это строго пакетный процесс, который может выполняться по расписанию.Основное преимущество заключается в том, что вы можете выполнять самые разнообразные преобразования, в то время как репликация практически не позволяет (кроме рисования данных из представления).Вы можете создавать потоки данных, которые изменяют только соответствующее поле Продукта, когда изменяется запись Атрибута, связанного с продуктом, или просто воссоздавать всю запись Продукта и перезаписывать целевую запись.

Наконец, вы можете создавать свои собственные триггеры или хранимые процедуры, которыебудет работать при изменении данных и копировать их из одной базы данных в другую.

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

Возможно, вам стоит взглянуть на функцию Sparse Column в SQL Server 2008, чтобы найти способ поддержки гибких схем при сохранении производительности и масштабируемости.

...