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

capire il sistema di cache MongoDB

Nota :Questo è stato scritto nel 2013 quando MongoDB era ancora piuttosto giovane, non aveva le funzionalità che ha oggi, mentre questa risposta è ancora valida per mmap, non lo è per le altre tecnologie di archiviazione che MongoDB ora implementa, come WiredTiger, o Percona.

Un buon punto di partenza per capire esattamente cos'è un indice:http://docs.mongodb.org/manual/core/indexes/

Dopo aver rispolverato questo, capirai perché sono così buoni, tuttavia, saltando avanti ad alcune delle domande più complesse.

Come possiamo essere sicuri che i dati che interroghiamo provengano dalla memoria o meno?

Un modo è guardare i yields campo su qualsiasi query explain() . Questo ti dirà quante volte il lettore ha ceduto il blocco perché i dati non erano nella RAM.

Un altro modo più approfondito è guardare programmi come mongostat e altri programmi simili. Questi programmi ti diranno quali errori di pagina (quando è necessario eseguire il paging dei dati nella RAM dal disco) si verificano sul tuo mongod .

Capisco che MongoDB utilizzi la memoria libera per memorizzare nella cache i dati sulla memoria che è libera al momento, ma qualcuno potrebbe spiegare ulteriormente il comportamento globale?

Questo in realtà non è corretto. È più facile dire semplicemente che MongoDB lo fa, ma in realtà non lo fa. In effetti, è il sistema operativo e i suoi stessi algoritmi di paging, solitamente LRU, a farlo per MongoDB. MongoDB memorizza nella cache i piani degli indici per un certo periodo di tempo, in modo da non dover continuare a controllare e testare costantemente gli indici.

In tal caso potrebbe essere meglio utilizzare una variabile nel nostro server del nodo che memorizza i dati piuttosto che fidarsi del sistema di cache MongoDB?

Non sono sicuro di come ti aspetti che funzioni ... Voglio dire che i due fanno cose abbastanza diverse e se hai intenzione di leggere i tuoi dati da MongoDB nella tua applicazione all'avvio in quella var, allora sicuramente non lo consiglierei.

Inoltre, gli algoritmi del sistema operativo per la gestione della memoria sono estremamente maturi e veloci, quindi va bene.

Come consigli a livello globale di utilizzare MongoDB per un traffico enorme?

Hmm, questa è una domanda così grande. Davvero ti consiglierei un po' di Google su questo argomento, ma come afferma la documentazione devi assicurarti che il tuo set di lavoro si adatti alla RAM per uno.

Ecco un buon punto di partenza:cosa significa inserire "working set" nella RAM per MongoDB?