Auf einen Blick: MongoDB-Indizes erhöhen die Geschwindigkeit der Datenabrufe und ermöglichen effiziente Abfragen, indem das Dokumentenscannen minimiert wird. Der Leitfaden beschreibt verschiedene Indextypen, Erstellungsmethoden und Leistungsaspekte.
- Indextypen umfassen Einzelfeld-, zusammengesetzte, Mehrschlüssel-, geospatiale, Text- und gehashte Indexe.
- Einzigartige und spärliche Indizes erhalten die Datenintegrität und optimieren den Speicher.
MongoDB-Indizes bieten den Nutzern eine effiziente Möglichkeit, Daten abzufragen. Wenn Daten ohne Indizes abgefragt werden, muss die Abfrage nach allen Datensätzen in einer Datenbank suchen, um Daten zu finden, die mit der Abfrage übereinstimmen.
In MongoDB wird Abfragen ohne Indizes als Sammlungsscan bezeichnet. Ein Sammlungsscan bewirkt:
- Das führt zu verschiedenen Leistungsengpässen
- Verlangsamen Sie Ihre Bewerbung erheblich
Glücklicherweise beheben die Verwendung von MongoDB-Indizes beide Probleme. Indem Sie die Anzahl der abzufragenden Dokumente begrenzen, verbessern Sie die Gesamtleistung der Anwendung.
In diesem Tutorial führe ich Sie durch verschiedene Arten von Indizes und zeige Ihnen, wie Sie Indizes in MongoDB erstellen, finden und verwalten.
Was sind Indizes in MongoDB?
MongoDB-Indizes sind spezielle Datenstrukturen, die es schneller machen, eine Datenbank abzufragen. Sie beschleunigen das Finden und Abrufen von Daten, indem sie einen kleinen Teil des Datensatzes effizient speichern – man muss nicht jedes Dokument in einer Datensammlung durchsuchen.
MongoDB-Indizes speichern die Werte der indexierten Felder außerhalb der Datenerhebung und verfolgen deren Position auf der Festplatte. Die indizierten Felder sind nach den Werten geordnet. Das erleichtert die Durchführung von Gleichheitsabgleichungen und effiziente Bereichsabfragen. Man kann MongoDB-Indizes auf Sammlungsebene definieren, da Indizes für jedes beliebige Feld oder Teilfeld in einer Sammlung unterstützt werden.
Sie können die Indizes Ihrer Datensammlungen entweder mit der Atlas-CLI oder der Atlas-Benutzeroberfläche verwalten. Beides macht die Abfrageausführung effizienter.
Warum brauchen wir Indizes in MongoDB?
Indizes sind in MongoDB von unschätzbarem Wert. Sie sind eine effiziente Möglichkeit, Informationen in einer Sammlung zu organisieren, und beschleunigen Abfragen, sodass relevante Ergebnisse schneller zurückgegeben werden. Durch die Verwendung eines Index zum Gruppieren, Sortieren und Abrufen von Daten sparen Sie erhebliche Zeit. Ihre Datenbank-Engine muss nicht mehr jeden Datensatz durchsuchen, um Übereinstimmungen zu finden.
Was sind die Nachteile des Indexierens?
Indexierung hat allerdings einige Nachteile. Die Leistung bei Schreibvorgängen wird von jedem erstellten Index beeinflusst, und jeder nimmt Speicherplatz ein. Um Sammlungsaufblähungen und langsame Schreibvorgänge zu vermeiden, erstelle nur Indizes, die wirklich notwendig sind.
Wie viele Indizes kannst du verwenden?
MongoDB-Indizes sind auf 64 pro Datenerhebung begrenzt. In einem zusammengesetzten Index kann man nur 32 Felder haben. Die $text Abfrage benötigt einen speziellen Textindex – man kann ihn nicht mit einem anderen Abfrageoperator kombinieren, der einen anderen speziellen Index benötigt.
Arbeit mit Indizes
Für dieses Tutorial verwenden wir den folgenden Datensatz, um die Indexierungsfunktionalität von MongoDB zu demonstrieren:
use students
db.createCollection("studentgrades")
db.studentgrades.insertMany(
[
{name: "Barry", subject: "Maths", score: 92},
{name: "Kent", subject: "Physics", score: 87},
{name: "Harry", subject: "Maths", score: 99, notes: "Exceptional Performance"},
{name: "Alex", subject: "Literature", score: 78},
{name: "Tom", subject: "History", score: 65, notes: "Adequate"}
]
)
db.studentgrades.find({},{_id:0})
Ergebnis
Sind MongoDB-Indizes einzigartig?
Beim Erstellen von Dokumenten in einer Sammlung erstellt MongoDB einen eindeutigen Index mit dem _id-Feld. MongoDB bezeichnet dies als Default _id Index. Dieser Standardindex kann nicht aus der Sammlung entfernt werden.
Beim Abfragen des Testdatensatzes sehen Sie das _id-Feld, das als Standardindex verwendet wird:
db.studentgrades.find().pretty()
Ergebnis:
Wie man einen Index in MongoDB erstellt
Um einen Index in MongoDB zu erstellen, verwenden Sie die createIndex()-Methode mit folgender Syntax:
db..createIndex(, )
Beim Erstellen eines Index definieren Sie das zu indexierende Feld und die Richtung der Taste (1 oder -1), um die aufsteigende oder absteigende Reihenfolge anzuzeigen.
Wenn Sie einen absteigenden Einfeldindex verwenden, kann dies die Leistung verringern. Es ist besser, aufsteigende Einfeldindizes zu verwenden, wenn Sie optimale Ergebnisse erzielen möchten.
Ein weiterer Punkt, den man beachten sollte, sind die Indexnamen. Standardmäßig generiert MongoDB Indexnamen, indem die indexierten Schlüssel mit der Richtung jedes Schlüssels im Index unter Verwendung eines Unterstrichs als Trenner verkettet werden. Zum Beispiel: {name: 1} wird als name_1 erstellt.
Die beste Praxis ist, die Namensoption zu verwenden, um beim Erstellen eines Index einen benutzerdefinierten Indexnamen zu definieren. Indizes können nach der Erstellung nicht umbenannt werden. Die einzige Möglichkeit, einen Index umzubenennen, besteht darin, diesen Index zuerst zu entfernen, den wir unten zeigen, und ihn mit dem gewünschten Namen neu zu erstellen.
createIndex()-Beispiel
Lassen Sie uns einen Index mit dem Namensfeld in der studentgrades-Sammlung erstellen und ihn als Student Name Index benennen.
db.studentgrades.createIndex(
{name: 1},
{name: "student name index"}
)
Ergebnis:
Indizes in MongoDB finden
Alle verfügbaren Indizes in einer MongoDB-Sammlung können Sie mit der getIndexes() -Methode finden. Dadurch werden alle Indizes einer bestimmten Sammlung zurückgegeben.
db..getIndexes()
getIndexes()-Beispiel
Sehen wir uns alle Indizes in der studentgrades-Sammlung mit folgendem Befehl an:
db.studentgrades.getIndexes()
Ergebnis:
Die Ausgabe enthält den Standard-_id-Index und den vom Benutzer erstellten Index-Studentennamen-Index.
Wie man Indizes in MongoDB auflistet
Sie können Indizes einer Datensammlung mit Shell oder Kompass auflisten. Dieser Befehl gibt Ihnen ein Array von Indexdokumenten an:
db.collection.getIndexes()
Eine Alternative ist die Verwendung der MongoDB Atlas UI. Öffnen Sie einen Cluster und gehen Sie zum Reiter Sammlungen . Wählen Sie die Datenbank und die Sammlung aus und klicken Sie dann auf Indexes , um sie zu sehen.
Schließlich können Sie den folgenden Befehl in der MongoDB Atlas CLI verwenden, um die Indizes einzusehen:
atlas clusters index list --clusterName --db --collection
Wie man Indizes in MongoDB löscht
Um einen Index aus einer MongoDB-Sammlung zu entfernen oder zu löschen, verwenden Sie die dropIndex() -Methode, während Sie den zu entfernenden Indexnamen angeben.
db..dropIndex()
dropIndex()-Beispiele
Entfernen wir den vom Nutzer erstellten Index mit dem Indexnamen Student Name Index, wie unten gezeigt.
db.studentgrades.dropIndex("student name index")
Ergebnis:
Du kannst auch den Wert des Indexfeldes verwenden, um einen Index ohne definierten Namen zu entfernen:
db.studentgrades.dropIndex({name:1})
Ergebnis:
Der Befehl dropIndexes kann außerdem alle Indizes außer dem Standardindex _id entfernen.
db.studentgrades.dropIndexes()
Ergebnis:
Welche verschiedenen Arten von Indizes gibt es in MongoDB?
MongoDB bietet verschiedene Arten von Indexen, die je nach Bedarf der Nutzer genutzt werden können. Hier sind die wichtigsten Indextypen in MongoDB:
- Einzelfeldindex
- Zusammengesetzter Index
- Mehrfach-Index
Zusätzlich zu den oben genannten beliebten Indextypen bietet MongoDB auch einige spezielle Indextypen für gezielte Anwendungsfälle an:
- Geospatial Index
- Testindex
- Hashe-Index
Einzelfeldindex
Diese benutzerdefinierten Indizes verwenden ein einzelnes Feld in einem Dokument, um einen Index in aufsteigender oder absteigender Sortierreihenfolge (1 oder -1) zu erstellen. In einem einzelnen Feldindex hat die Sortierreihenfolge des Indexschlüssels keinen Einfluss, da MongoDB den Index in beide Richtungen durchlaufen kann.
Beispiel
db.studentgrades.createIndex({name: 1})
Ergebnis:
Der obige Index sortiert die Daten in aufsteigender Reihenfolge anhand des Namensfelds. Du kannst die Sort()- Methode verwenden, um zu sehen, wie die Daten im Index dargestellt werden.
db.studentgrades.find({},{_id:0}).sort({name:1})
Ergebnis:
Zusammengesetzter Index
Man kann mehrere Felder in einem MongoDB-Dokument verwenden, um einen zusammengesetzten Index zu erstellen. Dieser Indextyp verwendet das erste Feld für die Anfangssortierung und sortiert dann nach den vorherigen Feldern.
Beispiel
Im folgenden zusammengesetzten Index wird MongoDB:
- Sortiere zuerst nach dem Fachbereich
- Dann sortiere innerhalb jedes Fachwerts nach Note
db.studentgrades.createIndex({subject: 1, score: -1})
Der Index würde eine Datenstruktur erstellen, die der folgenden ähnelt:
db.studentgrades.find({},{_id:0}).sort({subject:1, score:-1})
Ergebnis:
MongoDB unterstützt die Indexierung von Array-Feldern. Wenn Sie einen Index für ein Feld mit einem Array erstellen, erstellt MongoDB separate Indexeinträge für jedes Element im Array. Diese Multikey-Indizes ermöglichen es den Nutzern, Dokumente mit den Elementen im Array abzufragen.
MongoDB erstellt automatisch einen Multikey-Index, wenn es mit einem Array-Feld konfrontiert wird, ohne dass der Benutzer den Multikey-Typ explizit definieren muss.
Lassen Sie uns einen neuen Datensatz mit einem Array-Feld erstellen, um die Erstellung eines Multischlüssel-Index in MongoDB zu demonstrieren.
db.createCollection("studentperformance")
db.studentperformance.insertMany(
[
{name: "Barry", school: "ABC Academy", grades: [85, 75, 90, 99] },
{name: "Kent", school: "FX High School", grades: [74, 66, 45, 67]},
{name: "Alex", school: "XYZ High", grades: [80, 78, 71, 89]},
]
)
db.studentperformance.find({},{_id:0}).pretty()
Ergebnis:
Jetzt erstellen wir einen Index mit dem Feld Noten.
db.studentperformance.createIndex({grades:1})
Ergebnis:
Der obige Code erstellt automatisch einen Multikey-Index in MongoDB. Wenn Sie ein Dokument mit dem Array-Feld (grades) anfragen, sucht MongoDB nach dem ersten Element des in der find() -Methode definierten Arrays und anschließend nach der gesamten passenden Abfrage.
Betrachten wir zum Beispiel die folgende Suchfrage:
db.studentperformance.find({grades: [80, 78, 71, 89]}, {_id: 0})
Anfangs verwendet MongoDB den Multikey-Index für die Suche in Dokumenten, bei denen das Grades-Array das erste Element (80) an jeder Position enthält. Dann werden innerhalb dieser ausgewählten Dokumente die Dokumente mit allen passenden Elementen ausgewählt.
Geospatialer Index
MongoDB stellt zwei Arten von Indizes bereit, um die Effizienz von Datenbankabfragen bei der Verarbeitung von georäumlichen Koordinatendaten zu erhöhen:
- 2D-Indizes , die planare Geometrie verwenden, die für Altkoordinatenpaare gedacht ist, die in MongoDB 2.2 und früher verwendet werden.
- 2Dsphären-Indexen , die kugelförmige Geometrie verwenden.
Syntax:
db..createIndex( { : "2dsphere" } )
Textindex
Der Textindextyp ermöglicht es Ihnen, den Inhalt der Zeichenketten in einer Sammlung zu durchsuchen.
Syntax:
db..createIndex( { : "text" } )
Hashe-Index
Der Indextyp MongoDB Hashed wird verwendet, um die Hash-basierte Sharding-Funktionalität zu unterstützen. Dies würde den Hashwert des angegebenen Feldes indizieren.
Syntax:
db..createIndex( { : "hashed" } )
Eigenschaften des MongoDB-Index
Sie können die Funktionalität eines Index weiter verbessern, indem Sie Indexeigenschaften nutzen. In diesem Abschnitt lernen Sie diese häufig verwendeten Indexeigenschaften kennen:
- Sparse-Index-Eigenschaft
- Partielle Indexeigenschaft
- Eindeutige Indexeigenschaft
Sparse-Index-Eigenschaft
Die Sparse-Eigenschaft MongoDB erlaubt es Indexen, Indexierungsdokumente in einer Sammlung wegzulassen, wenn das indexierte Feld in einem Dokument nicht verfügbar ist, und einen Index zu erstellen, der nur die Dokumente enthält, die das indexierte Feld enthalten.
Beispiel
db.studentgrades.createIndex({notes:1},{sparse: true})
Ergebnis:
In der vorherigen Studentgrades-Sammlung wird ein Index mit dem Notizenfeld nur zwei Dokumente indexiert, da das Notizenfeld nur in zwei Dokumenten vorhanden ist.
Partielle Indexeigenschaft
Die Funktion des partiellen Indexes ermöglicht es Benutzern, Indizes zu erstellen, die einer bestimmten Filterbedingung entsprechen. Partielle Indizes verwenden die Option partialFilterExpression, um die Filterbedingung anzugeben.
Beispiel
db.studentgrades.createIndex(
{name:1},
{partialFilterExpression: {score: { $gte: 90}}}
)
Ergebnis:
Der obige Code erstellt einen Index für das Namensfeld, enthält jedoch nur Dokumente, in denen der Wert des Punktfeldes größer oder gleich 90 ist.
Eindeutige Indexeigenschaft
Die eindeutige Eigenschaft ermöglicht es Nutzern, einen MongoDB-Index zu erstellen, der nur eindeutige Werte enthält. Dies wird:
- Lehne alle doppelten Werte im indizierten Feld ab
- Beschränken Sie den Index auf Dokumente, die eindeutige Werte enthalten
Beispiel
db.studentgrades.createIndex({name:1},{unique: true})
Ergebnis:
Der oben erstellte Index beschränkt die Indexierung auf Dokumente mit eindeutigen Werten im Namensfeld.
Indexzusammenfassung
Damit ist dieses MongoDB-Index-Tutorial und -Leitfaden abgeschlossen. Sie haben gelernt, wie man Indizes erstellt, findet und ablegt, verschiedene Indextypen verwendet und komplexe Indizes erstellt. Diese Indizes können dann genutzt werden, um die Funktionalität der MongoDB-Datenbanken weiter zu verbessern und die Leistung von Anwendungen zu steigern, die schnelle Datenbankabfragen nutzen.
Verwandte Literatur
- BMC Machine Learning & Big Data Blog
- MongoDB Guide, eine Reihe von Artikeln und Tutorials
- MongoDB: Die Mongo-Shell & Grundbefehle
- Datenspeicher erklärt: Data Lake vs. Warehouse vs. Datenbank
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.