Я рекомендую вам прочитать статью « Многопользовательская архитектура данных» , в которой рассматриваются возможные варианты, а также плюсы и минусы. Подводя итог, он дает три варианта:
- отдельные БД
- отдельные схемы
- общая схема
Сейчас вы находитесь на стадии отдельных БД, которая предлагает лучшее разделение (изоляция между арендаторами), но является наиболее сложной в управлении. По мере того, как вы становитесь сотнями арендаторов, вы понимаете, что логистика администрирования сотен баз данных далеко не тривиальна. Подумайте о резервном копировании (расположение резервных копий файлов, заданий, расписаний и т. Д.) Подумайте, как вы будете контролировать и управлять распределением файлов, использованием дискового пространства и ростом базы данных на сотнях БД. Подумайте, каков будет ваш сценарий высокой доступности / аварийного восстановления в ближайшем будущем с 1000 арендаторами? 1000 зеркальных БД, 1000 сеансов доставки журналов? Подумайте, что если через 6 месяцев ваша команда разработчиков придет к вам и скажет: «Я знаю, как дать эту замечательную функцию нашему продукту, мы будем использовать репликацию транзакций!», Что вы скажете? «Конечно, позвольте мне создать 500 издателей,"! Не исключено, что вы можете управлять сотнями БД, но если вы планируете это сделать, вам лучше отточить свои навыки работы с PowerShell и прекратить использовать инструменты управления пользовательским интерфейсом прямо сейчас .
Кроме того, необходимо учитывать, что несколько (сотни) БД оказывают измеримое влияние на производительность и стоимость:
- физическое место на диске будет менее эффективно используется (каждая база данных должна иметь некоторую свободную комнату, вы будете иметь , что свободную комнату , умноженной на ряде БД)
- Невозможно создать выделенный диск журнала для интенсивных задач записи, вам придется переместить все эти LDF-файлы в одно (или более) хранилище SSD.
- Запись в журнал будет менее эффективной при частых фиксациях, поскольку они распространяются на множество отдельных записей блоков журнала по сравнению с агрегированием в одну (вы получите недостаточно используемые блоки журналов). Посмотрите, что такое LSN: регистрационный порядковый номер, чтобы понять, о чем я говорю.
Отдельные БД обладают некоторыми преимуществами, хотя из-за изоляции, основным преимуществом является независимое резервное копирование / восстановление.
Такой сценарий, как ваш, идеально подходит для баз данных SQL Azure . Нет администрирования дискового пространства, нет необходимости предоставлять HA / DR, расти до сотен / тысяч БД и т. Д.