Gibt es Werkzeuge, um die Indexgröße in MongoDB zu schätzen?

8

Ich suche nach einem Tool, um eine vernünftige Schätzung zu erhalten, wie groß ein MongoDB-Index auf ein paar Signalen wie:

basiert
  • Wie viele Dokumente in meiner Sammlung
  • Die Größe der indexierten 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 sehr nützlich wäre, wenn Mongo die Performance verschlechtert, sobald es auf die Speicherwand trifft und 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 sie zu groß ist, um sie tatsächlich hinzuzufügen.

Es müsste nicht bis ins Detail genau sein, aber mit einigen Annahmen über B-Trees und der Index-Implementierung bin ich mir sicher, dass es vernünftig genug sein könnte, hilfreich zu sein.

Wenn dies nicht bereits existiert, möchte ich es erstellen und öffnen. Wenn ich also die erforderlichen Parameter für diese Berechnung verpasst habe, füge sie bitte in deine Antwort ein.

    
jpredham 22.12.2011, 17:27
quelle

3 Antworten

21

Ich habe gerade mit einigen der 10gen-Ingenieure gesprochen, und es gibt kein Werkzeug, aber Sie können die Hüllkurvenberechnung, die auf dieser Formel basiert, rückgängig machen:

2 * [n * (18 Bytes Overhead + durchschnittliche Größe des indizierten Feldes + etwa 5 Bytes des Konvertierungsfudge-Faktors)]

Dabei ist n die Anzahl der Dokumente, die Sie haben.

Der Overhead und das Conversion-Padding sind mongo-spezifisch, aber das 2x kommt aus der b-tree-Datenstruktur, die ungefähr halb voll ist (aber im schlimmsten Fall 100% des Platzes, den ein kompletter Baum benötigen würde).

Ich würde mehr erklären, aber ich lerne gerade selbst darüber. Diese Präsentation wird mehr Details haben: Ссылка

    
Tyler Brock 22.12.2011 22:47
quelle
2

Sie können die Größen der Indizes für eine Sammlung mit dem Befehl:

überprüfen %Vor%

Weitere Details finden Sie hier: Ссылка

    
Minh Nguyen 09.05.2013 18:21
quelle
1

Eine andere Möglichkeit, um zu berechnen, ist es, ~ 1000 Dokumente in jede Sammlung aufzunehmen, mit anderen Worten, ein kleines Modell dessen zu erstellen, womit Sie in der Produktion enden, Indizes erstellen oder was Sie haben und berechnen endgültige Zahlen basierend auf db.collection.stats() Durchschnitt.

Macht das Sinn? :)

    
ostati 06.08.2014 16:53
quelle

Tags und Links