14 Stimmen

Gibt es Tools zum Schätzen der Indexgröße in MongoDB?

Ich bin auf der Suche nach einem Werkzeug, um eine anständige Schätzung zu erhalten, wie groß ein MongoDB-Index basierend auf ein paar Signale wie sein wird:

  • Wie viele Dokumente in meiner Sammlung
  • Die Größe des/der indizierten Feldes/Felder
  • Die Größe der _id, die ich verwende, wenn nicht ObjectId
  • Geo/Nicht-Geo

Ist jemand über so etwas gestolpert? Ich kann mir vorstellen, dass es angesichts der Leistungseinbußen von Mongo extrem nützlich wäre, sobald es an die Grenzen des Speichers stößt und die Dokumente auf die Festplatte ausgelagert werden. Wenn ich eine funktionierende Datenbank habe und einen weiteren Index hinzufügen möchte, kann ich nur wissen, ob er zu groß sein wird, wenn ich ihn tatsächlich hinzufüge.

Es müsste nicht auf das Bit genau sein, aber mit einigen Annahmen über B-Trees und die Indeximplementierung könnte es sicher sinnvoll genug sein, um hilfreich zu sein.

Wenn es das nicht schon gibt, würde ich es gerne entwickeln und als Open Source zur Verfügung stellen. Wenn ich also irgendwelche erforderlichen Parameter für diese Berechnung übersehen habe, geben Sie das bitte in Ihrer Antwort an.

23voto

Tyler Brock Punkte 28598

Ich habe gerade mit einigen der 10gen-Ingenieure gesprochen, und es gibt kein Tool, aber man kann eine auf dieser Formel basierende Back-of-the-Envelope-Berechnung durchführen:

2 * [ n * ( 18 bytes overhead + avg size of indexed field + 5 or so bytes of conversion fudge factor ) ]

Dónde n ist die Anzahl der Dokumente, die Sie haben.

Der Overhead und die Konvertierungsauffüllung sind mongo-spezifisch, aber das Zweifache ergibt sich daraus, dass die B-Baum-Datenstruktur im schlimmsten Fall etwa halb voll ist (aber 100 % des Platzes belegt hat, den ein voller Baum benötigen würde).

Ich würde mehr dazu sagen, aber ich lerne es gerade selbst. Diese Präsentation wird mehr Details enthalten: http://www.10gen.com/presentations/mongosp-2011/mongodb-internals

4voto

Ostati Punkte 4377

Eine andere Möglichkeit der Berechnung besteht darin, ca. 1000 Dokumente in jede Sammlung aufzunehmen, d. h. ein kleines Modell dessen zu erstellen, was in der Produktion anfallen wird, Indizes zu erstellen und die endgültigen Zahlen auf der Grundlage von db.collection.stats() Durchschnitt.

bearbeiten (aus ein Kommentar ):

Tylers Antwort beschreibt die ursprüngliche MMAP-Speicher-Engine um MongoDB 2.0, aber diese Formel ist definitiv nicht auf moderne Versionen von MongoDB anwendbar. WiredTiger, die Standard-Speicher-Engine in MongoDB 3.2+, verwendet Index Präfix-Kompression, so dass die Indexgrößen je nach Verteilung der der Schlüsselwerte. Es gibt auch eine Vielzahl von Index-Typen und Optionen die die Größe beeinflussen können. Der beste Ansatz für eine vernünftige Schätzung ist die empirische Schätzung mit repräsentativen Testdaten für Ihr für Ihr geplantes Wachstum.

3voto

Minh Nguyen Punkte 415

Sie können die Größe der Indizes in einer Sammlung mit dem Befehl überprüfen:

db.collection.stats()

Weitere Einzelheiten finden Sie hier: http://docs.mongodb.org/manual/reference/method/db.collection.stats/#db.collection.stats

0voto

R2D2 Punkte 7619

Die beste Option ist der Test in einer Nicht-Produktionsumgebung!

Legen Sie 1000 Dokumente ein und prüfen Sie die Indexgrößen, legen Sie 100000 Dokumente ein und prüfen Sie die Indexgrößen usw.

Einfache Möglichkeit, in einer Schleife die Gesamtindexgröße aller Sammlungen zu überprüfen:

  var y=0;db.adminCommand("listDatabases").databases.forEach(function(d){mdb=db.getSiblingDB(d.name);mdb.getCollectionNames().forEach(function(c){s=mdb[c].stats(1024*1024).totalIndexSize;y=y+s;print("db.Collection:"+d.name+"."+c+" totalIndexSize: "+s+" MB"); })});print("============================");print("Instance totalIndexSize: "+y+" MB");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X