Es ist allgemein bekannt, dass die Ressourcen in Produktionsumgebungen sehr begrenzt sind, und es stimmt, dass es Server gibt, die zehnmal leistungsstärker sind als vor fünf Jahren. Mit zunehmender Leistung dieser Geräte hat sich jedoch auch die Abfrage erhöht von Daten.
Je nachdem, wie lange es dauert, bis eine Abfrage ausgeführt wird, kann festgestellt werden, ob sie kritisch ist oder nicht. Obwohl es nicht kritisch ist, gibt es immer einen kleinen Spielraum, der verbessert werden muss. Dadurch werden Sekunden der Ausführung am Ende des Tages in Minuten umgewandelt Dies gibt uns die Möglichkeit, das Benutzererlebnis zu verbessern.
Wir benötigen auch eine Reihe von Daten oder Dokumenten , um unsere Sammlung zu füllen. In früheren Tutorials haben wir eine Reihe von Anfangsdaten angeboten. Für diejenigen, die diese nicht haben, können sie diese verwenden:
db.guiamongo.insert ({"name": "Maria", "age": "25", "gender": "Feminine", "country": "Colombia"}); db.guiamongo.insert ({"name ":" Pedro "," Alter ":" 32 "," Geschlecht ":" Männlich "," Land ":" Ecuador "}; db.guiamongo.insert ({" Name ":" Ramon "," Alter " : "18", "Genre": "Männlich", "Land": "Honduras"}; db.guiamongo.insert ({"Name": "John", "Alter": "22", "Geschlecht": "Männlich", "Land": "Argentinien"}); db.guiamongo.insert ({"Name": "Rosa", "Alter": "45", "Geschlecht": "Weiblich", "Land": " Chile "," Idiome ": [" Esp "," Ing "," Fra "]});
Damit haben wir genug für einen kleinen Einstieg und erhalten so Ergebnisse der Übungen, die wir als nächstes präsentieren werden.
1. Indizierung von MongoDB
Indizieren oder Arbeiten mit Indizes ist in MongoDB ein gemeinsames Konzept mit relationalen Datenbanken . Wenn wir also eine Vorstellung davon haben, wie MongoDB in kurzer Zeit funktioniert, müssen wir uns nur an die jeweilige Syntax anpassen.
Um einen Index in MongoDB zu erstellen, müssen wir die Funktion verifyIndex () verwenden und als Parameter ein JSON- Dokument übergeben, das die Felder oder Eigenschaften unseres Dokuments angibt, mit denen wir diesen Index anpassen müssen. Schauen wir uns ein kleines Beispiel an.
Angenommen, wir haben eine Sammlung namens guiamongo und suchen nach einem Feld namens name. Der Code wäre:
db.guiamongo.find ({"name": "Name"})
Dies ist eine normale Abfrage, die nichts Besonderes enthält. Das einzige Problem besteht darin, dass, wenn Millionen von Dokumenten sehr langsam sind, ein Index wie folgt angegeben werden muss, um ihn zu erstellen:
db.guiamongo.ensureIndex ({"name": 1})
Damit haben wir den Index für die Abfrage erstellt. Wenn wir ihn erneut ausführen, ist er viel schneller. Mal sehen, wie das in unserer MongoDB- Konsole aussieht:
Wir können feststellen, dass MongoDB nach dem Erstellen des Index ein Dokument zurückgibt, in dem der Status unserer Funktion und die Anzahl der vor und nach der Anwendung vorhandenen Indizes sowie das Feld ok in 1 angezeigt werden, das angibt, dass die Ausführung erfolgreich war.
Die vorherige Abfrage ist für ein einzelnes Feld sehr nützlich, aber wenn wir Folgendes tun:
db.guiamongo.find ({"name": "name", "age": {"$ gt": "20"}}). sort ({"age": - 1});
Wir stellen fest, dass in diesem Fall der vorherige Index nicht mehr funktioniert. Dies liegt daran, dass die Abfrage eine Kombination aus verschiedenen Feldern für die Suche verwendet. Deshalb müssen wir einen neuen Index erstellen, indem wir das verwenden, was wir zuvor gelernt haben. Mal sehen, wie er aussehen würde:
db.guiamongo.ensureIndex ("name": 1, "age": 1);
Wenn wir nun unsere Datenbank wie folgt überprüfen, sehen wir, dass wir einen neuen Index in der Sammlung haben:
2. Nachteil bei der Verwendung von Indizes
Trotz der großen Vorteile, die die Verwendung und das Arbeiten mit Indizes mit sich bringen, sind diese nicht immer von Vorteil. Deshalb müssen wir sie gründlich analysieren, bevor wir diese Funktion in unsere Datenbank implementieren.
Ein weiterer Nachteil ist, dass wir maximal 64 Indizes pro Sammlung haben. Deshalb müssen wir mit der geringstmöglichen Anzahl von Indizes in unserer Datenbank arbeiten, um sicherzustellen, dass nur das verwendet wird, was unbedingt erforderlich ist.
3. Wissen, wann wir einen Index verwenden sollten
Da wir die Einschränkungen und Nachteile der Verwendung von Indizes kennen, ist es eine gute Übung, zu wissen, ob wir sie erstellen sollten oder nicht, diese Reihe von Fragen zu beantworten. Wenn wir sie beantworten können, verfügen wir alle über die erforderlichen Merkmale, um einen Index zu erstellen. Wenn wir dies nicht können, müssen wir dies tun Analysieren Sie die Situation aus einem anderen Blickwinkel. Sehen wir uns die Fragen an:
Dies ist natürlich nur eine Anleitung. Es gibt spezielle und sehr spezielle Anwendungsmanager, in denen Sie Ihre Kriterien auf diese Art von Tutorials anwenden sollten. Es ist jedoch eine gute Anleitung, um in die Welt der Datenoptimierung einzusteigen .
4. Indizes in eingebetteten Dokumenten
Die Struktur von Dokumenten, die wir in MongoDB verarbeiten können, ermöglicht eine komplexe Datenspeicherung. Nicht alle Daten, die wir benötigen, befinden sich auf derselben Ebene. Aus diesem Grund müssen Indizes für eingebettete Dokumente erstellt werden . Mit diesen Indizes kann MongoDB möglicherweise Daten mit komplexeren Strukturen indizieren.
Um ein Ergebnis zu erzielen, verwenden wir die sogenannte Punktnotation , die nichts anderes ist, als auf die Felder der eingebetteten Dokumente zuzugreifen, als wären sie Eigenschaften eines Objekts durch einen Punkt. Im folgenden Beispiel erstellen wir einen Index dieser Merkmale. Sehen wir uns zunächst die Syntax an.
Fügen wir zunächst einen Datensatz mit einem eingebetteten Dokument in unseren Testdatensatz ein:
db.guiamongo.insert ({"name": "Juan", "alter": "40", "gender": "male", "country": "Brazil", "qualifications": {"history": "85 "," Literatur ":" 90 "," Kurs ":" 3 "}});
Dann werden wir in diesem Fall eine einfache Abfrage für den Immobilienkurs durchführen:
db.guiamongo.find ({"califcaciones.curso": "3"});
Wenn wir nun einen Index erstellen möchten, müssen wir einfach Folgendes tun:
db.guiamongo.ensureIndex ({"califcaciones.curso": 1});
Damit haben wir einen Index für ein Dokument erstellt, das in einem anderen Dokument in einer Sammlung in MongoDB eingebettet ist. Wenn wir uns das anschauen, ist es das, was wir in der Konsole erhalten sollten:
5. Verwenden Sie EXPLAIN ()
Da wir wissen, wie Indizes erstellt werden, und wir eine Vorstellung davon haben, wann und warum sie erstellt werden sollten, haben wir noch kein wichtiges Tool gesehen, mit dem wir ein wenig mehr wissen und unsere Konsultationen fortsetzen können. Wir verweisen auf EXPLAIN (). Mit dieser Funktion können wir die Zeit und die Indizes kennen, die in den Abfragen verwendet werden.
Lassen Sie uns sehen, wie wir diese Funktion auf eine Abfrage anwenden können. Wir werden die Funktion verwenden, die wir in unserem vorherigen Beispiel verwendet haben:
db.guiamongo.find ({"califcaciones.curso": "3"}). explain ();
Nach seiner Anwendung muss es etwa Folgendes zurückgeben:
Wir stellen fest, wie uns Daten zur Analyse der Abfrage angeboten werden. Im Cursor sehen wir, dass wir den Index verwendet haben, den wir in der vorherigen Übung mit dem Namen qualifications.curso_1 erstellt haben. Dies hat uns geholfen, 0 Millisekunden für die Ausführung zu erhalten, was der optimale Zeitpunkt für unsere Konsultationen ist Da dies eine Testumgebung ist, haben wir natürlich nichts anderes, aber wenn wir diese Übung auf Servern mit Millionen von Datensätzen durchführen können, werden wir die Leistungsfähigkeit der Indizes erkennen.
Damit haben wir dieses Tutorial abgeschlossen, Indizes in unseren Dokumentensammlungen erstellt und außerdem einige Tools untersucht, mit denen wir wichtige Informationen zur Verbesserung und vor allem Steigerung der Leistung unserer Datenbank erhalten .