Является ли многопользовательская база данных:
- Сервер БД, который имеет разные (идентичные) базы данных / схемы для каждого клиента / арендатора ?; или
- Сервер БД с базой данных / схемой, в которой клиенты / арендаторы обмениваются записями внутри одних и тех же таблиц?
Например, в варианте 1 выше, я мог бы иметь сервер MySQL, скажем mydb01.example.com
, и он мог бы иметь customer1
базу данных внутри него. Эта customer1
база данных может иметь, скажем, 10 таблиц, которые служат моим приложением для данного конкретного клиента (Клиент № 1). В ней также может быть customer2
база данных с теми же 10 таблицами, но содержащая только данные для клиента №2. Это может быть customer3
база данных, customer4
база данных и так далее.
В варианте № 2, выше, будет только одна база данных / схема, скажем myapp_db
, снова с 10 таблицами в ней (те же, что и выше). Но здесь данные для всех клиентов находятся внутри этих 10 таблиц, и поэтому они «разделяют» таблицы. И на уровне приложений, логика и контроль безопасности, к которым клиенты имеют доступ, к каким записям в этих 10 таблицах, и большое внимание уделяется тому, чтобы Клиент № 1 никогда не заходил в приложение и не видел данные Клиента № 3 и т. Д.
Какая из этих парадигм представляет собой традиционную многопользовательскую базу данных? И если нет, то кто-то может предоставить мне пример (используя сценарии, описанные выше), что такое многопользовательская БД?
Ответы:
Обе концепции называются мультитенантностью, поскольку это просто логическая концепция, «в которой один экземпляр программного обеспечения работает на сервере и обслуживает нескольких арендаторов» (из Википедии ). Но как вы реализуете эту концепцию «физически», зависит от вас.
Конечно, приложению нужна концепция базы данных, которая позволяет разделять данные разных арендаторов, и идея мультитенантности состоит в том, чтобы разделить некоторые ресурсы сервера (по крайней мере, оборудование) для лучшего использования ресурсов и упрощения администрирования. Таким образом, «многопользовательская БД» - это та, которая поддерживает это напрямую , когда части модели или таблиц БД совместно используются.
Чтобы быть точным, можно создать мультитенантное приложение с не мультитенантной БД, предоставляя отдельный экземпляр БД для каждого клиента. Однако это исключает возможность совместного использования любых ресурсов БД напрямую между арендаторами, и прикладной уровень должен убедиться, что подключен правильный арендатор к правильной базе данных.
источник
Согласно Microsoft, этот термин имеет 3 возможных значения (одна база данных для всех арендаторов или одна база данных на каждого арендатора).
Если использовать ваш пример, у каждого клиента будет свой арендатор.
База данных на каждого арендатора (клиента)
Общая база данных, отдельная схема.
Общая база данных, общая схема.
Есть плюсы и минусы для каждого, хорошо объясненные в этой статье: https://msdn.microsoft.com/en-us/library/aa479086.aspx
Бонус: вы можете думать об этом как о жилом помещении (чрезвычайно упрощенном).
У каждого арендатора есть свой дом. Они могут делать все, что захотят, и если это сгорит, это никого не затронет.
Каждый арендатор находится в одном здании, но имеет собственную квартиру.
Все живут в одной квартире, и все вещи помечены наклейкой, чтобы показать, кому принадлежит.
источник