Ich habe kürzlich meine Sammlung mit dem folgenden Befehl komprimiert:
db.<collectionName>.runCommand( "compact" )
Und jetzt scheint meine Sammlung größer zu sein als die Größe auf der Festplatte!
SECONDARY> db.<collectionName>.stats()
{
"ns" : "<databaseName>.<collectionName>",
"count" : 2937359,
"size" : 5681676492, # 5.6 GB
"avgObjSize" : 1934.2805874256433,
"storageSize" : 4292853728, # 4.2 GB
"numExtents" : 2,
"nindexes" : 2,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1.669999999836597,
"flags" : 1,
"totalIndexSize" : 220735648,
"indexSizes" : {
"_id_" : 162326304,
"e_1_" : 58409344
},
"ok" : 1
}}
Ich verstehe nicht, wie das möglich ist. Sind nicht alle Mongodb-Sammlungen immer auf der Festplatte gesichert?
Kann jemand diese Ergebnisse erklären?
validate
?Antworten:
storageSize
ist die Summe aller Speicherbereiche für diese Daten ohne Indizes.Damit diese Sammlung 2 Bereiche einnimmt, sind sie jeweils ~ 2 GB, also ~ 4 GB.
size
enthält Indizes und ich glaube ein paar andere Dinge, die die Zahl aufblasen. Beides entspricht nicht wirklich der richtigen Größe auf der Festplatte.db.stats()
Hat für die Festplattengröße ein Dateigrößenfeld, das näher an dem liegt, was Sie möchten. Ich denke, Sie suchen danach.Das Handbuch beschreibt etwas besser, was die verschiedenen Felder bedeuten. Sammlungen finden Sie hier:
http://docs.mongodb.org/manual/reference/collection-statistics/
Und hier für Datenbankstatistiken:
http://docs.mongodb.org/manual/reference/database-statistics/
Einige andere potenziell relevante Informationen:
Der Befehl compact verkleinert keine Datendateien. Es defragmentiert nur gelöschten Speicherplatz, damit größere Objekte ihn wiederverwenden können. Der Befehl compact löscht oder verkleinert niemals Datenbankdateien und benötigt im Allgemeinen zusätzlichen Speicherplatz für seine Arbeit, normalerweise mindestens einen zusätzlichen Bereich.
Wenn Sie die Datenbank reparieren , werden die Datendateien im Wesentlichen von Grund auf neu geschrieben, wodurch Auffüllungen entfernt und so effizient wie möglich auf der Festplatte gespeichert werden. Sie müssen jedoch ~ 2x die Größe auf der Festplatte haben, um dies zu tun (eigentlich weniger, aber es ist eine anständige Anleitung).
Eine andere Sache, die Sie hier beachten sollten - Polster reparieren und kompakt entfernen. Der Auffüllfaktor variiert zwischen 1 (keine Verschiebungen von Dokumenten aufgrund wachsender Dokumente) und 2 (viele Verschiebungen aufgrund wachsender Dokumente). Ihr Polsterungsfaktor von ~ 1,67 würde anzeigen, dass Sie ziemlich stark wachsen (und daher Bewegungen verursachen).
Wenn Sie eine Datenbank komprimieren oder reparieren, entfernen Sie diese Auffüllung. Das nachfolgende Wachstum von Dokumenten wird daher noch mehr Verschiebungen auslösen als zuvor. Da Umzüge relativ teuer sind, kann dies schwerwiegende Auswirkungen auf Ihre Leistung haben. Mehr Infos hier:
http://www.mongodb.org/display/DOCS/Padding+Factor
quelle
Für Mongodb> 3.x.
Für db.getCollection ('name'). Stats ()
Für db.stats ()
Wir können nicht genutzten Speicherplatz oder Loch dadurch löschen
Nach dem Ausführen des Kompakt- oder Reparaturbefehls können wir den genauen Unterschied zwischen Speichergröße und Datengröße ermitteln.
Komprimierungstechnik in mongodb wiredTiger:
quelle