Arbeiten mit Indizes in MongoDB

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.

Anforderungen
Um dieses Tutorial durchführen zu können, benötigen wir eine funktionsfähige Installation von MongoDB mit ausreichenden Berechtigungen, damit wir in der Kommandokonsole arbeiten können.

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.

Mit Indizes arbeiten
Wenn wir nicht mit dem Konzept verwandt sind, ist es erwähnenswert, dass das Arbeiten mit Indizes nichts anderes ist, als der Datenbank anzugeben, welche Felder im Speicher verwendet werden sollen, um Ihre Suche effizienter zu gestalten, z. B. wenn wir eine große Sammlung von Dokumenten anhand eines Felds namens name durchsuchen Ideal wäre es, dieses Feld zu indizieren, damit die Engine weiß, dass es direkt von diesem Feld geleitet werden muss. Dadurch werden die Abfragen, die dieses Feld verwenden, schneller.

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.

See also  So platzieren Sie Folienemojis und bewerten Instagram-Storys

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:

Mongodb-Working-Indizes.jpg

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:

Mongodb-Working-Indizes-2.jpg

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.

Größerer Nachteil
Der große Nachteil bei der Verwendung von Indizes besteht darin, dass die Engine die neuen Daten, die wir in die Tabelle oder die Liste der Indizes einfügen, einbeziehen muss. Bei jeder Erstellung einer insert () – Funktion wird daher eine Reihe benachbarter Prozesse erstellt, die zunehmen können die Verwendung von Datenträger und Verarbeitung.

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:

Welche Anfragen stellen wir?
Wir müssen eine Analyse der Situation durchführen und sehen, was in unserer Sammlung passiert. Dabei werden wir herausfinden, ob wir Indizes benötigen oder, falls nicht, müssen wir möglicherweise einige beseitigen.

Wie ist die richtige Ausrichtung der Indizes?
Wir müssen wissen, wie wir die Daten in den Indizes sortieren, ob alphabetisch oder numerisch, aufsteigend oder absteigend. Dies beeinflusst direkt die Geschwindigkeit der Indexierung.

Wie wirst du klettern?
Wir müssen über das Wachstum unserer Daten nachdenken, da wir auf diese Weise wissen, ob das, was heute mit 10- oder 100-mal mehr Daten funktioniert, richtig funktioniert.

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.

See also  Professionelle Texteffekte mit Photoshop

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:

Mongodb-Working-Indizes-3.jpg

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.

Was sagt es uns?
Bei der Rückgabe von EXPLAIN () handelt es sich um ein Dokument, in dem der für die Suche verwendete Cursor angegeben wird. Anschließend werden die Grenzen des Index angegeben. Es gibt auch ein Feld mit dem Namen millis und die Zeit in Millisekunden , die a angibt Konsultation braucht Zeit, um ausgeführt zu werden. Letzteres ist sehr wichtig, um die Leistung unserer Datenbank zu verstehen.

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:

See also  So aktualisieren Sie Windows 10 Oktober 2018

Mongodb-Working-Indizes-4.jpg

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 .

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *