Mongo ist eine Dokumentdatenbank, was bedeutet, dass sie die Struktur der gespeicherten Dokumente interpretieren kann (im Gegensatz zu Schlüsselwertspeichern).
Ein besonderer Vorteil dieses Ansatzes besteht darin, dass Sie Indizes für die Dokumente in der Datenbank erstellen können.
Index ist eine Datenstruktur (in der Regel eine Variante des B-Baumes), die auf einem Teil ihrer Attribute (zum Beispiel für die schnelle Suche von Dokumenten stützen kann id
(! = _id)
oder ein anderes Unterscheidungsmerkmal). Diese sind in der Regel
Wenn Sie nach Dokumenten suchen, die auf indexierten Attributen basieren (z. B. id
> 50), muss Mongo das Dokument nicht aus dem Speicher/disk/whatever - it holen kann sehen, welche Dokumente den Kriterien nur auf dem Index entsprechen (beachten Sie, dass das Abrufen von etwas von der Festplatte mehrere Größenordnungen langsamer ist als die Speicherabfrage, selbst wenn kein Cache vorhanden ist) o holen Sie das Dokument zur weiteren Verarbeitung (und das ist nicht von der von Ihnen genannten Statistik abgedeckt).
Indizes sind entscheidend, um hohe Leistung zu erzielen, haben aber auch Nachteile (z. B. selten verwendete Index kann verlangsamen Einsätze und nicht wert sein - nach jedem Einfügen muss der Index aktualisiert werden).
Es bedeutet, dass ein Index verwendet wurde. Indizes sind Datenstrukturen, die nur Teile der Dokumente enthalten, die eine schnelle Suche ermöglichen. – mszymborski
Genau das verwirrt mich. Ich stelle mir den MongoDB-Speicher so vor, als wäre es ein Array (oder eine andere ähnliche Datenstruktur), die die Indizes enthält (als Zeiger/Verweis auf das Objekt auf dem Datenträger, auf dem das Dokument tatsächlich gespeichert ist). Aber dies kollidiert mit dem nscannedObjects = 0, weil es bedeutet, dass MongoDB nicht auf die Festplatte gehen musste. Wo liege ich falsch? –
Index ist eine gesamte Datenstruktur, wie ein Baum. Es enthält Links von einigen Attributen zu _id - wenn Ihre Suchkriterien SOLELY auf dem Index basieren - können Sie nur den Index betrachten. und nicht an den Dokumenten selbst - da sie nicht mehr Informationen zur Auswahl von Dokumenten liefern. Es bedeutet nicht, dass Mongo die Dokumente schließlich nicht abholt - nur dass sie nicht für die Auswahlphase abgeholt wurden. – mszymborski