Как обновить в приложении Multi Tenant все схемы всех арендаторов? - PullRequest
8 голосов
/ 03 июня 2010

Я занимаюсь разработкой мультитенантного приложения. Я выбрал подход «Общая база данных / отдельные схемы».

Моя идея состоит в том, чтобы иметь схему по умолчанию (dbo) и при ее развертывании обновлять схемы арендаторов (tenantA, tenantB, tenantC); другими словами, для создания синхронизированных схем.

Как мне синхронизировать схемы арендаторов со схемой по умолчанию?

Я использую SQL Server 2008.

Ответы [ 2 ]

5 голосов
/ 09 июня 2010

Первое, что вам понадобится, - это таблица или другой механизм для хранения информации о версии схемы. Если ничего другого, чтобы вы могли связать ваше приложение и схему вместе. Нет ничего более болезненного, чем версия приложения с неверной схемой - сбой, повреждение данных и т. Д.

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

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

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

Конечно, вы всегда должны делать резервную копию базы данных, которая записывает во внешний файл, предпочтительно с идентифицируемым человеком номером версии, чтобы вы могли найти и восстановить его, когда скрипты (скрипты) выходят из строя. И в конечном итоге он просто планирует выяснить, как восстанавливать и восстанавливать.


Я видел какой-то инструмент обновления схемы в новой VS 2010, но я не использовал его. Это также может быть полезно для вас.

1 голос
/ 03 июня 2010

Насколько я знаю, нет волшебной команды для синхронизации схем. Вам нужно будет использовать инструмент - либо встроенный, либо купленный (ознакомьтесь с SQL Gate в Red Gate и SQL Examiner - вам нужно настроить их для сравнения различных схем).

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

Мое предложение было бы очень внимательно отслеживать все сценарии, которые вы запускаете для схемы dbo, и следить за тем, чтобы они также запускались для других схем, когда это необходимо. Затем вы можете использовать такой инструмент, как SQL Compare, в качестве периодической проверки работоспособности для поиска любых неожиданных различий.

...