Mam ten sam problem do rozwiązania i rozważenia wariantów. Ponieważ mam wieloletnie doświadczenie w tworzeniu wielodostępnych aplikacji SaaS, zamierzałem również wybrać drugą opcję w oparciu o moje wcześniejsze doświadczenia z relacyjnymi bazami danych.
Podczas poszukiwań znalazłem ten artykuł na stronie wsparcia mongodb (dodany, ponieważ już go nie ma):
https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Chłopaki stwierdzili, że za wszelką cenę unikają drugiej opcji, co, jak rozumiem, nie jest specyficzne dla mongodb. Mam wrażenie, że dotyczy to większości baz danych NoSQL, które badałem (CoachDB, Cassandra, CouchBase Server itp.) Ze względu na specyfikę projektu bazy danych.
Kolekcje (lub zasobniki, czy jakkolwiek nazywają to w różnych bazach danych) to nie to samo, co schematy zabezpieczeń w RDBMS, mimo że zachowują się jak kontener dla dokumentów, które są bezużyteczne przy stosowaniu dobrej separacji dzierżawców. Nie mogę znaleźć bazy danych NoSQL, która może zastosować ograniczenia bezpieczeństwa w oparciu o kolekcje.
Oczywiście możesz użyć zabezpieczeń opartych na rolach mongodb, aby ograniczyć dostęp na poziomie bazy danych / serwera. ( http://docs.mongodb.org/manual/core/authorization/ )
Polecam pierwszą opcję, gdy:
- Masz wystarczająco dużo czasu i zasobów, aby poradzić sobie ze złożonością projektowania, wdrażania i testowania tego scenariusza.
- Jeśli nie zamierzasz mieć dużych różnic w strukturze i funkcjonalności w bazie danych dla różnych dzierżawców.
- Projekt aplikacji umożliwi dzierżawcom wprowadzanie tylko minimalnych dostosowań w czasie wykonywania.
- Jeśli chcesz zoptymalizować przestrzeń i zminimalizować wykorzystanie zasobów sprzętowych.
- Jeśli zamierzasz mieć tysiące lokatorów.
- Jeśli chcesz szybko i niedrogo skalować.
- Jeśli NIE zamierzasz tworzyć kopii zapasowych danych na podstawie dzierżawców (przechowuj osobne kopie zapasowe dla każdego dzierżawcy). Jest to możliwe nawet w tym scenariuszu, ale wysiłek będzie ogromny.
Wybrałbym wariant 3, gdyby:
- Będziesz mieć małą listę lokatorów (kilkaset).
- Specyfika biznesu wymaga, abyś potrafił obsługiwać duże różnice w strukturze baz danych dla różnych najemców (np. Integracja z systemami firm trzecich, import-eksport danych).
- Projekt Twojej aplikacji umożliwi klientom (dzierżawcom) wprowadzanie znaczących zmian w czasie wykonywania aplikacji (dodawanie modułów, dostosowywanie pól itp.).
- Jeśli masz wystarczająco dużo zasobów, aby szybko skalować w poziomie z nowymi węzłami sprzętowymi.
- Jeśli musisz zachować wersje / kopie zapasowe danych na dzierżawcę. Również przywrócenie będzie łatwe.
- Istnieją ograniczenia prawne / regulacyjne, które zmuszają Cię do trzymania różnych najemców w różnych bazach danych (nawet w centrach danych).
- Jeśli chcesz w pełni wykorzystać gotowe funkcje zabezpieczeń mongodb, takie jak role.
- Między najemcami występują duże różnice w wielkości (masz wielu małych najemców i kilku bardzo dużych).
Jeśli zamieścisz dodatkowe informacje o swojej aplikacji, być może mogę udzielić ci bardziej szczegółowych porad.