Není to snadná odpověď, protože hodně záleží na architektuře vaší aplikace, způsobu použití a vzorcích dotazů, distribuci mezi klienty (tj.:budou úrovně využití u klientů zhruba stejné, nebo můžete mít 10 % klientů využívajících 90 % zdrojů), kolik můžete utratit za správu kódu vs ops a celou řadu dalších problémů. Zde je několik věcí, které je třeba zvážit:
1) Mít jednu databázi vám usnadní správu operací, bude vyžadovat méně výpočetních zdrojů a může vám umožnit lepší škálování, ale kódování přístupové vrstvy bude obtížnější a ze zřejmých důvodů musíte svou vrstvu zabezpečení skutečně dobře navrhnout. Budete také spotřebovávat méně zdrojů na straně klient/webový server, protože bude mnohem méně připojení.
Při přístupu k jedné monolitické databázi existují dvě oblíbené možnosti schématu:
- Všechna podobná data můžete vložit do jedné kolekce (tj. profily pro všechny účty jdou do stejné kolekce) a každému dokumentu přidělit klientský klíč pro identifikaci, která data patří ke kterému účtu. To vám může poskytnout nejlepší možnosti (v závislosti na architektuře vašeho schématu) pro škálování s co nejmenším počtem výpočetních zdrojů.
- Další možností je oddělení klientských dat podle kolekcí – každý klient bude mít v databázi své vlastní kolekce označené prefixem clientid (tj.:clientid_userprofiles).
2) Možnost databáze na klienta vám poskytne více starostí se správou operací a bude dražší, protože budete potřebovat více výpočetních zdrojů. Na druhou stranu by vaše náklady na kódování měly být nižší, protože kód bude snazší psát. Umožní vám také lépe distribuovat vaše zdroje mezi náročné a nenáročné uživatele. Můžete například přesunout klienty s velkým využitím na výkonnější stroje a poskytovat sharding na bázi jednotlivých zákazníků.
3) můžete poskytnout kombinaci dvou možností - specializované databáze pro špičkové uživatele (účty, které platí více), a pak sdílenou databázi s daty oddělenými sběrem pro klienty nižší třídy a testovací/freemium účty.
Všimněte si, že pokud se vydáte cestou mnoha databází, měli byste se podívat na možnost spuštění --smallfiles. To vám pomůže v situacích, kdy si mnoho lidí nastavuje „testovací účty“, ale kteří s nimi moc nedělají.
Každopádně, doufejme, že výše uvedené vám dá podnět k zamyšlení. Proveďte vyhledávání na https://groups.google.com /forum/?fromgroups#!searchin/mongodb-user/multitenant protože na fórech Mongo proběhla řada diskuzí o tomto konkrétním problému.
Pokud jde o důsledky auditu, záleží na tom, jakou úroveň dodržování auditu musíte dodržovat. Pokud očekáváte 1000 klientů, vaše požadavky na dodržování předpisů budou mnohem vyšší (a mnohem nákladnější – představte si 10 až 100 dolarů nebo tisíce dolarů), než když jsou vaši klienti začínající podnikatelé, kteří možná nikdy neslyšeli o SAS70 atd. Odpověď také záleží na tom, jaký typ dat ukládáte - jsou to finanční údaje uživatelů, nebo jsou to jen uživatelská fóra? V zásadě, pokud existují nějaké obavy z nutnosti v budoucnu projít bezpečnostními audity pro velké společnosti, nemyslete ani na přístup sdílené databáze.