2016-12-31 4 views
0

ich viele Dinge über die Indizierung lernen und ein paar Sachen aus Hier enter link description hereMongoDB Interne Implementierung der Indizierung?

Indizes unterstützen die effiziente Durchführung von Abfragen in MongoDB finden. Ohne die Indizes muss MongoDB eine Sammlungsüberprüfung durchführen, d. H. Alle Dokumente in einer Sammlung durchsuchen, um die Dokumente auszuwählen, die der Abfrageabfrage entsprechen. Wenn ein entsprechender Index für eine Abfrage vorhanden ist, kann MongoDB den Index verwenden, um die Anzahl der zu prüfenden Dokumente zu begrenzen.

Ich habe einige Abfrage:

  1. Während Index anlegen Mit Hilfe von (create), ist der Record speichert immer in RAM?.
  2. Muss jedes Mal ein Index erstellt werden Immer wenn Meine Anwendung neu gestartet wird?
  3. Was passiert im Falle der Standard-ID (_id). Ist immer im RAM gespeichert.

  4. _id Ist Standard Index, das heißt, alle Datensätze immer für bestimmte Sammlungen im RAM gespeichert werden sollen?

Bitte helfen Sie mir, wenn ich falsch gehe. Danke

Antwort

3

Ich denke, Sie haben eine Idee, dass Indizes im RAM gespeichert sind. Was, wenn ich sage, dass sie es nicht sind?

Zunächst einmal müssen wir verstehen, welche Indizes sind, Indizes sind im Grunde ein Zeiger, wo auf der Festplatte zu sagen, dass Dokument ist. Genau wie wir im Buch indexieren, können wir für einen schnelleren Zugriff sehen, welches Thema auf welcher Seitennummer steht.

Also, wenn Indizes erstellt werden, sind sie auch auf der Festplatte gespeichert, aber wenn eine Anwendung ausgeführt wird, basierend auf der häufigen Verwendung und noch schneller Zugriff werden sie in RAM geladen, aber es gibt einen Unterschied zwischen geladen und erstellt.

Das Laden eines Indexes ist nicht das Gleiche wie das Laden einer Sammlung oder von Datensätzen in den Arbeitsspeicher. Wenn wir den Index geladen haben, wissen wir, was alle Dokumente von der Platte aufnehmen müssen, im Gegensatz zum Laden aller Dokumente und Verifizieren jedes einzelnen von ihnen. So vermeiden Indizes den Sammlungs-Scan.

Die Erstellung von Indizes ist ein einmaliger Prozess, aber jeder Schreibvorgang auf dem Dokument kann möglicherweise die Indizierung ändern, sodass ein Teil möglicherweise neu berechnet werden muss, da Datensätze basierend auf der Datenänderung gemischt werden können. Aus diesem Grund schreibt die Indexierung langsam und liest schnell.

Denken Sie wieder wie ein Buch, wenn Sie ein neues Thema von sagen, 2 Seiten zwischen dem Buch hinzufügen, müssen alle Indizes nach dieser Thema Nummer neu berechnet werden. entsprechend.

Während Index anlegen Mit Hilfe von (create) Ist Record Store immer in RAM ?.

  • Nein, Aufzeichnungen im RAM nicht gespeichert werden, es ist eine Art, während die Schaffung eines Indexblatt alle das Dokument in der Sammlung verarbeitet und schaffen, würde diesmal verständlicherweise aufwendig sein, wenn es zu viele Dokumente sind, das ist Warum gibt es eine Option, Index im Hintergrund zu erstellen.

Ist müssen jedes Mal Index erstellen Jedes Mal, wenn meine Anwendung Neustart wird?

  • Index werden einmal erstellt, können Sie es löschen und erneut erstellen, aber es wird auf die Anwendung oder DB Neustart nicht neu erstellt. das wäre wahnsinnig für riesige Sammlung in sharded Umgebung.

Was wird im Falle des Zahlungsverzuges id (_id) geschehen. Ist immer Speicher in RAM.

  • Auch das ist nicht wahr. _id kommt als indiziertes Feld, daher wird der Index bereits für die leere Sammlung erstellt, da beim Schreiben der Index neu berechnet wird. Da es sich um einen eindeutigen Index handelt, ist die Verarbeitung schneller.

_id Ist Standard Index, das heißt, alle Datensätze immer für bestimmte Sammlungen im RAM gespeichert werden sollen?

  • alle Datensätze würden nur im RAM gespeichert werden, wenn Sie im Speicher-Engine von MongoDB verwenden, die ich kommt als Enterprise Edition denken. Aufgrund der Indizierung würde der Datensatz nicht automatisch in den RAM geladen.
+1

Wenn Sie zum Vorwärmen (laden Sie es in den RAM) Ihre Indizes wenn mongod beginnen können Sie 'db.runCommand ({ "touch" verwenden: "Daten": true, "Index": wahr}) '. Der Zugriff auf Indexeinträge, die sich nicht im Speicher befinden, ist besonders ineffizient, da sie oft zwei Seitenfehler verursacht. Es gibt einen Fehler, um den Indexeintrag in den Speicher zu laden, und dann , um das Dokument in den Speicher zu laden. Wenn eine Indexsuche einen Seitenfehler verursacht, wird dies als btree miss bezeichnet. MongoDB verfolgt auch btree-Treffer: wenn ein Indexzugriff nicht auf die Festplatte gehen muss (aus dem definitiven MongoDB-Handbuch). –

+0

Danke für den Kommentar, macht wirklich Sinn. –

+0

@Rahul Kumar: Tolles Zeug, ich verstehe, dass alle Datensätze nicht im RAM gespeichert werden, RAM Immer Indizes (im Grunde ein Zeiger), die Datensätze, die auf der Festplatte gespeichert sind, speichern? –

Verwandte Themen