MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Cache-System verstehen

Hinweis :Dies wurde 2013 geschrieben, als MongoDB noch recht jung war, es hatte nicht die Funktionen, die es heute hat, während diese Antwort immer noch für mmap gilt, nicht für die anderen Speichertechnologien, die MongoDB jetzt implementiert, wie WiredTiger, oder Percona.

Ein guter Ausgangspunkt, um genau zu verstehen, was ist ein Index:http://docs.mongodb.org/manual/core/indexes/

Nachdem Sie das aufgefrischt haben, werden Sie verstehen, warum sie so gut sind, aber zu einigen der komplizierteren Fragen überspringen.

Wie können wir sicher sein, dass die von uns abgefragten Daten aus dem Speicher stammen oder nicht?

Eine Möglichkeit besteht darin, sich die yields anzusehen Feld bei jeder Abfrage explain() . Dadurch erfahren Sie, wie oft das Lesegerät seine Sperre aufgegeben hat, weil sich keine Daten im RAM befanden.

Ein weiterer tiefergehender Weg besteht darin, sich Programme wie Mongostat und andere solche Programme anzusehen. Diese Programme teilen Ihnen mit, welche Seitenfehler (wenn Daten von der Festplatte in den Arbeitsspeicher ausgelagert werden müssen) auf Ihrem mongod auftreten .

Ich verstehe, dass MongoDB den freien Speicher verwendet, um Daten über den momentan freien Speicher zwischenzuspeichern, aber kann jemand das globale Verhalten näher erläutern?

Das ist eigentlich falsch. Es ist einfacher zu sagen, dass MongoDB dies tut, aber in Wirklichkeit tut es das nicht. Tatsächlich sind es das Betriebssystem und seine eigenen Paging-Algorithmen, normalerweise die LRU, die dies für MongoDB tun. MongoDB speichert Indexpläne jedoch für einen bestimmten Zeitraum, sodass sie nicht ständig nach Indizes suchen und testen müssen.

In welchem ​​Fall könnte es besser sein, eine Variable in unserem Node-Server zu verwenden, die Daten speichert, als dem MongoDB-Cache-System zu vertrauen?

Ich bin mir nicht sicher, wie Sie erwarten, dass das funktioniert ... Ich meine, die beiden machen ganz unterschiedliche Dinge, und wenn Sie beabsichtigen, Ihre Daten aus MongoDB in Ihre Anwendung beim Start in diese var einzulesen, dann würde ich es definitiv nicht empfehlen.

Außerdem sind die Betriebssystemalgorithmen für die Speicherverwaltung extrem ausgereift und schnell, also ist es in Ordnung.

Wie raten Sie allgemein zur Verwendung von MongoDB für großen Datenverkehr?

Hmm, das ist so eine große Frage. Ich würde Ihnen wirklich empfehlen, Google zu diesem Thema ein wenig zu verwenden, aber wie in der Dokumentation angegeben, müssen Sie sicherstellen, dass Ihr Arbeitssatz in den RAM passt.

Hier ist ein guter Ausgangspunkt:Was bedeutet es, "Working Set" in den RAM für MongoDB einzupassen?