sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvad betyder det at passe arbejdssæt ind i RAM til MongoDB?

"Arbejdssæt" er grundlæggende mængden af ​​data OG indekser, der vil være aktive/i brug af dit system.

Antag for eksempel, at du har 1 års data. For nemheds skyld relaterer hver måned sig til 1 GB data, der giver 12 GB i alt, og for at dække hver måneds data har du indekser på 1 GB igen på i alt 12 GB for året.

Hvis du altid har adgang til de sidste 12 måneders data, er dit arbejdssæt:12 GB (data) + 12 GB (indekser) =24 GB.

Men hvis du faktisk kun har adgang til de sidste 3 måneders data, så er dit arbejdssæt:3GB (data) + 3GB (indekser) =6GB. I dette scenarie, hvis du havde 8 GB RAM, og derefter begyndte du regelmæssigt at få adgang til de sidste 6 måneders data, ville dit arbejdssæt begynde at overskride dit tilgængelige RAM og have en indvirkning på ydeevnen.

Men generelt, hvis du har nok RAM til at dække mængden af ​​data/indekser, du forventer at få adgang til ofte, så vil du være i orden.

Rediger:Svar på spørgsmål i kommentarer
Jeg er ikke sikker på, at jeg følger helt med, men jeg vil prøve at svare. For det første er beregningen for arbejdssæt en "boldparkfigur". For det andet, hvis du har et (f.eks.) 1 GB indeks på user_id, så er det kun den del af det indeks, der almindeligvis tilgås, der skal være i RAM (antag f.eks. at 50 % af brugerne er inaktive, så vil 0,5 GB af indekset være hyppigere påkrævet/nødvendig i RAM). Generelt, jo mere RAM du har, jo bedre, især da arbejdssættet sandsynligvis vil vokse over tid på grund af øget brug. Det er her sharding kommer ind - opdel dataene over flere noder, og du kan omkostningseffektivt skalere ud. Dit arbejdssæt bliver derefter opdelt over flere maskiner, hvilket betyder, at jo mere kan opbevares i RAM. Har du brug for mere RAM? Tilføj en anden maskine til at skære på.



  1. Matcher et array-felt, som indeholder en hvilken som helst kombination af det leverede array i MongoDB

  2. Node redis-udgiver bruger for meget hukommelse

  3. MongoDB-aggregering med $lookup inkluderer (eller projekterer) kun nogle felter, der skal returneres fra forespørgslen

  4. Skal jeg altid bruge pipelining, når der er mere end 1 kommando i Redis?