Vores applikation har brug for 5 samlinger i en db. Når vi tilføjer klienter til vores applikation, vil vi gerne opretholde separat db for hver kunde. For eksempel, hvis vi har 500 kunder, ville vi have 500 dbs og 2500 samlinger (hver db har 5 samlinger). På denne måde kan vi adskille hver kundedata.
Det er en god ide. Ud over den logiske adskillelse, som dette vil give dig, vil du også være i stand til at bruge databaseniveausikkerhed i MongoDB for at forhindre utilsigtet adgang til andre kunders data.
Min bekymring er, vil det føre til ydeevneproblemer?
Nej, og faktisk vil det hjælpe, da ekstremt tunge låsestridigheder for en kunde (hvis det er muligt i dit scenarie) ikke vil påvirke ydeevnen for en anden kunde (det kan stadig være, hvis de konkurrerer om den samme I/O-båndbredde) men hvis du bruger --directoryperdb mulighed, har du mulighed for at placere disse DB'er på separate fysiske enheder.
Sharding vil også tillade nem skalering, da du ikke engang behøver at partitionere nogen samlinger - du kan bare round-robin databaser på tværs af flere shards for at tillade belastningen at blive distribueret til separate klynger (hvis og når du når det niveau).
I modsætning til påstanden i det andet svar, trækker TTLMonitor-tråden IKKE dokumenter ind i RAM, medmindre de bliver slettet (og tilføjet til den frie liste). De arbejder ud fra TTL-indekser både for at fortælle, om nogen dokumenter skal udløbe, samt for at lokalisere dokumentet direkte.
Jeg vil kraftigt anbefale den ene database mange samlinger løsning, da det ikke tillader dig at partitionere belastningen eller give sikkerhed, og det er heller ikke nemmere at håndtere på applikationssiden.