Myślę o utworzeniu aplikacji wielodostępnej przy użyciu MongoDB. Nie wiem, ilu najemców bym jeszcze miał, ale chciałbym mieć możliwość skalowania do tysięcy.
Przychodzą mi do głowy trzy strategie:
- Wszyscy dzierżawcy w tej samej kolekcji, przy użyciu pól specyficznych dla dzierżawcy w celu zapewnienia bezpieczeństwa
- 1 kolekcja na dzierżawcę w jednej udostępnionej bazie danych
- 1 baza danych na dzierżawcę
Głos w mojej głowie sugeruje, żebym wybrał opcję 2.
Czy ktoś myśli i implikacje?
mongodb
multi-tenant
Braintapper
źródło
źródło
Odpowiedzi:
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:
Wybrałbym wariant 3, gdyby:
Jeśli zamieścisz dodatkowe informacje o swojej aplikacji, być może mogę udzielić ci bardziej szczegółowych porad.
źródło
Znalazłem dobrą odpowiedź w komentarzach pod tym linkiem:
http://blog.boxedice.com/2010/02/28/notes-from-a-production-mongodb-deployment/
Zasadniczo opcja nr 2 wydaje się być najlepszym rozwiązaniem.
Cytat z komentarza Davida Myttona:
źródło
Istnieje rozsądny artykuł w witrynie MSDN dotyczący architektury danych dla wielu dzierżawców, do którego warto się odwołać. Niektóre kluczowe tematy poruszone w tym artykule:
Omówiono również niektóre wzorce konfiguracji oprogramowania jako usługi (SaaS).
Dodatkowo warto przyjrzeć się ciekawemu opisowi od facetów z SQL Anywhere .
Moje osobiste podejście - jeśli nie masz pewności co do wymuszonego bezpieczeństwa / zaufania, wybrałbym opcję 3 lub jeśli obawy dotyczące skalowalności zabraniają co najmniej powrotu do opcji 2. To powiedziawszy ... Nie jestem profesjonalistą w MongoDB. Denerwuję się używając wspólnego „schematu” - ale z radością poddam się bardziej doświadczonym praktykom.
źródło
Wybrałbym opcję 2.
Możesz jednak ustawić opcję wiersza polecenia mongod.exe --smallfiles. Oznacza to, że największy rozmiar pliku zakresu będzie wynosił 0,5 gigabajta, a nie 2 gigabajty. Przetestowałem to z Mongo 1.42. Tak więc opcja 3 nie jest niemożliwa.
źródło
Według moich badań w MongoDB. Trucos y consejos. Aplicaciones multitenant. ta opcja nie jest zalecana, jeśli nie wiesz, ilu najemców możesz mieć, może to być tysiące i byłoby to skomplikowane, jeśli chodzi o sharding, wyobraź sobie również, że masz tysiące kolekcji w jednej bazie danych ... Więc w twoim przypadku tak zaleca się użycie opcji pierwszej. Teraz, jeśli masz zamiar mieć ograniczoną liczbę użytkowników, jest już inaczej i tak, możesz użyć opcji drugiej, tak jak myślałeś.
źródło
Chociaż dyskusja dotyczy NoSQL, a przede wszystkim MongoDB, w Citus używamy PostgreSQL i budujemy rozproszoną / podzieloną na fragmenty bazę danych z wieloma dzierżawcami.
Nasz przewodnik po przypadkach użycia przedstawia przykładową aplikację, obejmującą schemat i różne funkcje specyficzne dla wielu dzierżawców.
W przypadku bardziej nieustrukturyzowanych danych używamy kolumny JSONB PostgreSQL do przechowywania takich danych specyficznych dla dzierżawców.
źródło