Чи множинні БД мають кілька баз даних або спільних таблиць?


25

База даних для багатьох орендарів:

  • Сервер БД, який має різну (ідентичну) базу даних / схему для кожного клієнта / орендаря ?; або
  • Сервер БД, який має базу даних / схему, де клієнти / орендарі діляться записами всередині одних і тих же таблиць?

Наприклад, у варіанті №1 вище, у мене, можливо, є сервер MySQL на, скажімо,, mydb01.example.comі він може мати customer1базу даних всередині нього. Ця customer1база даних може мати, скажімо, 10 таблиць, які забезпечують мою програму для конкретного клієнта (Клієнт №1). Він також може мати customer2базу даних з такими ж 10 таблицями, але лише дані, що містять клієнта №2. Він може мати customer3базу даних, customer4базу даних тощо.

У варіанті №2 вище буде лише одна база даних / схема, скажімо myapp_db, знову з 10 таблицями в ній (ті ж, що і вище). Але ось, дані для всіх клієнтів існують всередині цих 10 таблиць, і тому вони "діляться" таблицями. І на рівні програми, логіці та контролю безпеки, до яких користувачі отримують доступ до записів у цих 10 таблицях, і дуже обережно слідкуйте за тим, щоб Клієнт №1 ніколи не входив у додаток і бачив дані клієнта №3 тощо.

Яка з цих парадигм становить традиційну БД "багатоорендарів"? І якщо ні, то хтось може надати мені приклад (використовуючи описані вище сценарії) того, що таке БД з кількома орендарями?


"мультиорендар" має на увазі сильну безпеку - десь реалізовану - так що один орендар не може бачити дані інших, не може змінювати їх, не може заборонити доступ до них тощо. Цю безпеку потрібно якось реалізовувати. Варіанти №1 та №2 ОП працюють як, але аналіз безпеки та робота, необхідна для впровадження безпеки, відрізняються. Для того, що це варто, я працював у стартапі, який реалізовував багатожиткові послуги за допомогою варіанту №2, де таблиці - рядки, що належать декільком орендарям - були приховані (за допомогою дозволів) від усіх кінцевих користувачів і безпека була повністю реалізована в збережених процедурах.
давидбак


1
Якщо це в кінцевому підсумку закривається як дублікат, я думаю, що нам слід познайомитись, щоб об'єднати його з цільовою манерою, оскільки на обидва питання є кілька справді хороших відповідей.

Відповіді:


30

Яка з цих парадигм становить традиційну БД "багатоорендарів"

Обидві концепції називаються багатоквартирними, оскільки це просто логічне поняття, "коли один екземпляр програмного забезпечення працює на сервері та обслуговує декількох орендарів"Вікіпедії ). Але як ви реалізуєте цю концепцію "фізично", залежить від вас.

Звичайно, додатку потрібна концепція бази даних, яка дозволяє розділяти дані різних орендарів, а ідея мульти-орендарів полягає у спільному використанні деяких серверних ресурсів (принаймні апаратних) для кращого використання ресурсів та полегшення адміністрування. Отже, "БД з декількома орендарями" - це та, яка підтримує це безпосередньо , де діляться частини моделі db або таблиці.

Якщо бути точним, можна створити програму з декількома орендарями з БД, що не має кількох орендарів, надаючи індивідуальний екземпляр БД на клієнта. Однак це виключає спільний доступ до будь-яких ресурсів БД безпосередньо між орендарями, і рівень додатків повинен забезпечити підключення правильного орендаря до потрібної бази даних.


Дякую @Doc Brown (+1), але тоді, як ви могли мати будь-яку базу даних, яка не була багатоорендарем ?!?
smeeb

4
@smeeb: багаторічна оренда - це властивість програми, якою користуються різні орендарі, а не база даних «позаду» програми. Звичайно, концепція db повинна підтримувати багаторічну оренду, щоб зробити це можливим.
Док Браун

4
@smeeb: добре припустимо, у вас є таблиця користувача з обмеженням, що ім’я користувача унікальне, тепер якийсь співробітник орендаря вже не може використовувати ім'я користувача лише тому, що його вже використовує інший, хто працює у іншого орендаря.
RemcoGerlich

5
@smeeb: якщо єдиний спосіб обслуговувати двох орендарів - це встановити та запустити програму двічі, на двох різних серверах, з двома окремими базами даних, я думаю, ніхто не назвав би це багатостороннім наймом.
Док Браун

1
Я завітав на презентацію в Azure, де говорилося, що MYOB запускає хмарне рішення на Azure, і кожен орендар отримує свою БД (і, мабуть, і веб-сервери); у них просто є кілька чудових інструментів автоматизації для управління сотнями екземплярів БД, які потрібно вимагати. З іншого боку, організація, над якою я зараз працюю, запускає сотні клієнтів з єдиної бази даних, у програмі проводиться досить багато роботи, щоб забезпечити ізоляцію даних клієнтів. Ми також розглядали гібрид, де наші найбільші клієнти отримали власну БД, а інші поділилися оригіналом.
David Keaveny

36

За даними Microsoft, термін має 3 потенційні значення (одна база даних для всіх орендарів або одна база даних на орендаря).

Щоб використовувати ваш приклад, кожен замовник буде власним орендарем.

  1. База даних на орендаря (клієнта)

    • Кожен орендар ізольований від інших (немає випадкового доступу до даних інших орендарів)
    • Ізоляція також полегшує управління відновленням даних, а також пристосування потреб у сховищах для потреб орендарів.
  2. Спільна база даних, окрема схема.

    • У кожного орендаря є своя схема, а їх дані - у власних таблицях.
    • Відновлення може зайняти більше часу, оскільки всі знаходяться в одній базі даних, ви не можете просто відновити базу даних до попередньої резервної копії (вона повертає дані кожного орендаря). Опція - відновити нову базу даних, а потім об'єднати / скопіювати лише дані 1 орендаря.
  3. Спільна база даних, спільна схема.

    • Дані кожного орендаря знаходяться в одних таблицях. Якщо ви відстежуєте замовлення, наприклад, усі замовлення орендарів розміщуватимуться у "dbo.Orders".
    • Дані орендарів розділені стовпцем у кожній таблиці (може бути TenantId), який показує власника рядка.

У кожній статті є плюси і мінуси, які добре пояснено в цій статті: https://msdn.microsoft.com/en-us/library/aa479086.aspx

Бонус: ви можете вважати це житловими приміщеннями (грубо спрощеними).

  1. У кожного орендаря є свій будинок. Вони можуть робити все, що завгодно, і якщо воно згорить, це насправді не вплине на когось іншого.

  2. Кожен орендар знаходиться в одній будівлі, але має власну квартиру.

  3. Усі живуть в одній квартирі, і всі речі позначені клейкою запискою, щоб показати, хто їй належить.


2
Спасибі за вашу відповідь. Чи можете ви трохи уточнити свою відповідь. Це створило б кращу відповідь.
Thomas Junk

1
ваш бонусний приклад - приголомшливий @ imms90
Аравін

3
Майкрософт видалив сторінку, яку ви пов’язали з MSDN. Вайбак машина все ще є копія.
Майк Шеррілл 'Відкликання котів'

1
Подібна стаття від MS (можливо, та сама, що перейшла): docs.microsoft.com/en-us/azure/sql-database/…
П'єр Генрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.