Ich versuche, Datensätze mit einer Menge von Doppel- und Ints (etwa 15-20) in mongoDB zu speichern. Die Aufzeichnungen haben meistens (99,99%) die gleiche Struktur.
Wenn ich die Daten in einem root speichern kann, was ein sehr strukturiertes Datenspeicherformat ist, Die Datei liegt bei 2,5 GB für 22,5 Millionen Datensätze. Für Mongo ist die Datenbankgröße (vom Befehl show dbs
) jedoch ungefähr 21GB , während die Datengröße (von db.collection.stats()
) ungefähr 13GB ist.
Das ist ein enormer Overhead ( Clarify: 13GB vs 2.5GB, ich spreche nicht einmal über die 21GB ), und ich denke, es liegt daran, dass es sowohl keys
als auch values
speichert. . Die Frage ist also, warum und wie Mongo es nicht besser macht, es kleiner zu machen?
Aber die Hauptfrage ist, was ist der Leistungseinfluss in diesem? Ich habe 4 Indizes und sie kommen heraus, 3GB , so kann ein Server auf einem einzigen 8GB-Computer ein Problem werden, wenn ich die Menge der Daten verdoppeln und versuchen, einen großen Arbeitssatz im Speicher zu halten.
Irgendwelche Vermutungen, wenn ich SQL oder irgendeine andere DB benutzen sollte? oder vielleicht einfach weiter mit ROOT-Dateien arbeiten, wenn jemand sie ausprobiert hat?
Im Grunde ist dies der mongo, der sich auf das Einfügen von Daten vorbereitet. Mongo führt die Vorbelegung des Speichers für Daten durch, um Fragmentierung auf der Festplatte zu verhindern (oder zu minimieren). Diese Vorbelegung wird in Form einer Datei beobachtet, die die mongod
Instanz erstellt.
Zuerst wird eine 64-MB-Datei erstellt, die nächste 128 MB, die nächste 512 MB und so weiter und so weiter, bis sie Dateien mit 2 GB (die maximale Größe der vordefinierten Datendateien) erreicht.
Es gibt noch mehr Dinge, die Mongo tun könnte, um mehr Speicherplatz zu belegen, Dinge wie Journaling ...
Für viel mehr Informationen darüber, wie mongoDB Speicherplatz verwendet, können Sie sich diese Seite ansehen und speziell den Abschnitt mit dem Titel Warum sind die Dateien in meinem Datenverzeichnis größer als die Daten in meiner Datenbank?
Es gibt einige Dinge, die Sie tun können, um den Platz zu minimieren, der verwendet wird, aber diese teqniques (wie die Verwendung der --smallfiles
option ) werden normalerweise nur für Entwicklungs- und Testzwecke empfohlen - niemals für die Produktion.
Tags und Links database mongodb large-data