Musím vyřešit stejný problém a také zvažovat varianty. Jelikož mám dlouholeté zkušenosti s vytvářením aplikací SaaS pro více nájemců, chystal jsem se také zvolit druhou možnost na základě mých předchozích zkušeností s relačními databázemi.
Při průzkumu jsem našel tento článek na webu podpory mongodb (přidaný, protože je pryč):https://web.archive.org/web/20140812091703/http://support.mongohq.com/use-cases/multi -tenant.html
Kluci uvedli, že se za každou cenu vyvarují druhé možnosti, což, jak jsem pochopil, není pro mongodb nijak zvlášť specifické. Můj dojem je, že je to použitelné pro většinu NoSQL dbs, které jsem zkoumal (CoachDB, Cassandra, CouchBase Server atd.) kvůli specifikům návrhu databáze.
Kolekce (nebo buckety nebo jak tomu říkají v různých databázích) nejsou totéž jako bezpečnostní schémata v RDBMS, přestože se chovají jako kontejner pro dokumenty, které jsou k použití dobrého oddělení tenantů nepoužitelné. Nemohl jsem najít NoSQL databázi, která by mohla aplikovat bezpečnostní omezení na základě kolekcí.
Samozřejmě můžete použít zabezpečení založené na rolích mongodb k omezení přístupu na úrovni databáze/serveru. (http://docs.mongodb.org/manual/core/authorization/)
Doporučil bych 1. možnost, když:
- Máte dostatek času a zdrojů na to, abyste se vypořádali se složitostí návrhu, implementace a testování tohoto scénáře.
- Pokud nebudete mít velké rozdíly ve struktuře a funkčnosti databáze pro různé nájemce.
- Návrh vaší aplikace umožní nájemcům provádět pouze minimální úpravy za běhu.
- Pokud chcete optimalizovat prostor a minimalizovat využití hardwarových zdrojů.
- Pokud budete mít tisíce nájemníků.
- Pokud chcete škálovat rychle a za dobrou cenu.
- Pokud NEBUDETE zálohovat data na základě tenantů (uchovávejte samostatné zálohy pro každého tenanta). Je to možné i v tomto scénáři, ale úsilí bude obrovské.
Šel bych pro variantu 3, pokud:
- Budete mít malý seznam nájemců (několik stovek).
- Specifika podnikání vyžadují, abyste byli schopni podporovat velké rozdíly ve struktuře databáze pro různé nájemce (např. integrace se systémy třetích stran, import a export dat).
- Návrh vaší aplikace umožní zákazníkům (nájemcům) provádět významné změny v běhu aplikace (přidávání modulů, přizpůsobení polí atd.).
- Pokud máte dostatek prostředků k rychlému rozšíření pomocí nových hardwarových uzlů.
- Pokud jste povinni uchovávat verze/zálohy dat na klienta. Také obnovení bude snadné.
- Existují právní/regulační omezení, která vás nutí držet různé nájemce v různých databázích (dokonce i v datových centrech).
- Pokud chcete plně využít předdefinované bezpečnostní funkce mongodb, jako jsou role.
- Mezi nájemci jsou velké rozdíly ve velikosti (máte mnoho malých nájemníků a málo velmi velkých nájemníků).
Pokud zveřejníte další podrobnosti o své žádosti, možná vám mohu poskytnout podrobnější radu.