Я маю вирішити таку ж проблему, а також розглянути варіанти. Оскільки я маю багаторічний досвід створення додатків для декількох орендарів SaaS, я також збирався вибрати другий варіант на основі свого попереднього досвіду роботи з реляційними базами даних.
Проводячи дослідження, я знайшов цю статтю на сайті підтримки mongodb (додано зворотний шлях, оскільки її вже немає):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Хлопці заявили, що будь-якою ціною слід уникати 2-го варіанту, який, як я розумію, не особливо характерний для mongodb. У мене таке враження, що це стосується більшості баз даних NoSQL, які я досліджував (CoachDB, Cassandra, CouchBase Server тощо) через специфіку дизайну бази даних.
Колекції (або сегменти, або як вони їх називають у різних БД) - це не те саме, що схеми безпеки в СУБД, незважаючи на те, що вони поводяться як контейнер для документів, які вони марні для застосування належного розділення орендаря. Я не зміг знайти базу даних NoSQL, яка може застосовувати обмеження безпеки на основі колекцій.
Звичайно, ви можете використовувати захист на основі ролі mongodb, щоб обмежити доступ на рівні бази даних / сервера. ( http://docs.mongodb.org/manual/core/authorization/ )
Я б рекомендував перший варіант, коли:
- У вас є достатньо часу та ресурсів, щоб вирішити складність проектування, впровадження та тестування цього сценарію.
- Якщо ви не збираєтеся мати великих відмінностей у структурі та функціональності в базі даних для різних орендарів.
- Дизайн вашого додатка дозволить орендарям робити лише мінімальні налаштування під час виконання.
- Якщо ви хочете оптимізувати простір та мінімізувати використання апаратних ресурсів.
- Якщо у вас будуть тисячі орендарів.
- Якщо ви хочете масштабувати швидко і з хорошою вартістю.
- Якщо ви НЕ збираєтесь робити резервні копії даних на основі орендарів (зберігайте окремі резервні копії для кожного орендаря). Це можливо зробити навіть за цього сценарію, але зусилля будуть величезними.
Я піду на варіант 3, якщо:
- У вас буде невеликий список орендарів (кілька сотень).
- Специфіка бізнесу вимагає від вас можливості підтримувати великі відмінності в структурі баз даних для різних орендарів (наприклад, інтеграція із сторонніми системами, імпорт-експорт даних).
- Дизайн вашого додатка дозволить клієнтам (орендарям) внести суттєві зміни в час роботи програми (додавання модулів, налаштування полів тощо).
- Якщо у вас є достатньо ресурсів, щоб швидко масштабувати нові апаратні вузли.
- Якщо вам потрібно зберігати версії / резервні копії даних для кожного орендаря. Також відновлення буде легким.
- Існують законодавчі / регулятивні обмеження, які змушують тримати різних орендарів у різних базах даних (навіть центрах обробки даних).
- Якщо ви хочете повністю використовувати нестандартні функції безпеки mongodb, такі як ролі.
- Між орендарями існують великі відмінності у розмірі (у вас багато маленьких орендарів і мало дуже великих орендарів).
Якщо ви опублікуєте додаткові відомості про свою заявку, можливо, я можу дати вам більш детальну пораду.