Ikke et nemt svar, fordi meget afhænger af din app-arkitektur, brug og forespørgselsmønstre, fordelingen blandt klienter (dvs.:vil forbrugsniveauerne være nogenlunde de samme på tværs af klienter, eller kunne du have 10 % af klienterne til at bruge 90 % af ressourcer), hvor meget du kan bruge på kode vs ops-styring og en lang række andre problemer. Her er nogle ting at overveje:
1) at have én database vil gøre din ops-administration lettere, kræve færre computerressourcer og måske give dig mulighed for at udskalere bedre, men kodning af adgangslaget vil være sværere, og du er virkelig nødt til at arkitekte dit sikkerhedslag godt af indlysende årsager. Du vil også bruge færre ressourcer på klient-/webserverenden, da der vil være mange færre forbindelser.
Der er to populære skemaindstillinger, når man nærmer sig én monolitisk database:
- Du kan lægge alle lignende data i én samling (dvs.:profiler for alle konti går ind i den samme samling) og give hvert dokument en klient-id-nøgle til at identificere, hvilke data der hører til hvilken konto. Dette kan give dig de bedste muligheder (afhængigt af din skemaarkitektur) for at skalere ud med de færreste computerressourcer.
- En anden mulighed er at adskille klientdata efter samlinger - hver klient vil have deres egne samlinger i databasen identificeret med et klientid-præfiks (dvs.:klientid_brugerprofiler).
2) Muligheden for databasen pr. klient vil give dig mere driftsadministration og koste mere, da du har brug for flere flere computerressourcer. På den anden side bør dine kodningsomkostninger være mindre, da koden vil være lettere at skrive. Det vil også give dig mulighed for bedre at fordele dine ressourcer mellem tunge og lette brugere. Du kan f.eks. flytte klienter med stor brug til mere kraftfulde maskiner og levere sønderdeling på kundebasis.
3) du kan give en kombination af de to muligheder - dedikerede databaser til high-end-brugere (konti, der betaler mere), og derefter en delt database med data adskilt af indsamling for low-end-klienter og test/freemium-konti.
Bemærk, at hvis du går ruten med mange databaser, bør du se på --smallfiles opstartsmuligheden. Dette vil hjælpe dig med situationer, hvor du har mange mennesker, der konfigurerer "testkonti", men som ikke gør ret meget med dem.
I hvert fald giver ovenstående forhåbentlig stof til eftertanke. Foretag en søgning på https://groups.google.com /forum/?fromgroups#!searchin/mongodb-user/multitenant da der har været en række diskussioner i Mongo-foraene om dette specifikke emne.
Hvad angår revisionens implikationer, afhænger af hvilket niveau af revisionsoverholdelse du skal overholde. Hvis du forventer Fortune 1000-kunder, vil dine overholdelseskrav være langt højere (og meget dyrere - tænk $10s til $100s af tusindvis af dollars), end hvis dine kunder er startups, der måske aldrig har hørt om SAS70 osv. Svaret afhænger også af hvilken type data du gemmer - er det brugerøkonomiske data, eller er det bare brugerfora? Grundlæggende, hvis der er nogen bekymringer om behovet for at bestå sikkerhedsrevisioner for store virksomheder i fremtiden, så tænk ikke engang på den delte database-tilgang.