MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Indexpräfixkomprimierung in MongoDB 3.0 WiredTiger

MongoDB 3.0 mit WiredTiger führt eine neue Funktion namens „Indexpräfixkomprimierung“ ein, die den von den Indizes verbrauchten Speicher erheblich reduziert. Weniger von Indizes verwendeter Speicher bedeutet mehr Speicher für die Dokumentenspeicherung oder andere Indizes, was eine bessere Leistung impliziert.

Um die beste Leistung in MongoDB zu erzielen, ist es großartig, Ihre Indizes im Speicher zu halten. Ein Seitenfehler in einem Index ist ein Doppelschlag – ein Seitenfehler, um die eigentliche Indexseite in den Speicher zu bringen, und ein weiterer Seitenfehler später, um die Datenseite in den Speicher zu bringen.

Technologie

Die Indexpräfixkomprimierung verwendet keine Blockkomprimierung (wie zlib, snappy usw.), sondern ist eine andere Technik, um die Indizes im Speicher zu speichern. Es reduziert die Speichernutzung, indem identische Präfixe nur einmal gespeichert werden. Die „Schlüsselpräfix-Komprimierung“ ist eine domänenspezifische Art der Datenkomprimierung und bezieht sich auf das Schlüsselspeicherformat in WiredTiger. Weitere Einzelheiten finden Sie in der WiredTiger-Dokumentation der Dateiformate.

Leistungstests

Für unsere Leistungstests verwenden wir eine Dokumentenstruktur wie unten beschrieben:

{
   employeeID: <long>,
   firstName: <string>,
   lastName: <string>,
   income: <long>,
   supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
}

Wir haben die folgenden Indizes zu diesem Setup hinzugefügt:

Index 1: db.ensureIndex({'employeeID':1});
Index 2: db.ensureIndex({'lastName':1, 'firstName':1});
Index 3: db.ensureIndex({'income':1});
Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})

Ergebnisse

In unserem Testlauf haben wir identische Daten (etwa 10 Millionen Datensätze) in zwei Cluster eingefügt – einen 2.6.x-Replikatsatz und den anderen eine MongoDB 3.0 mit WiredTiger. Dann haben wir die obigen Indizes auf beiden Clusterkonfigurationen hinzugefügt. Die Ergebnisse sind ziemlich umwerfend – in einigen Fällen gibt es einen Unterschied von einer Größenordnung in der Indexgröße!

 Indexname MMAP-Indexgröße (MB) WT-Indexgröße (MB)  % Größenreduzierung
{Mitarbeiter-ID:1} 230,7 94 59 %
{Nachname:1, Vorname:1} 1530 36 97 %
{Einkommen:1} 230 94 59 %
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} 1530 35 97 %

Der gesamte auf Indizes gespeicherte Speicher ist Speicher, der zum Zwischenspeichern von Daten, anderen Indizes usw. verwendet werden kann. Ihre Laufleistung kann variieren – testen Sie unbedingt Ihre spezielle Indexstruktur. Die Reduzierung der Indexgröße ist eine viel unterschätzte Verbesserung in Mongo 3.0 und kann einen enormen Unterschied für Ihre Leistung bewirken!