Maximale MongoDB-Dokumentgröße
Dieses Tutorial beschreibt die standardmäßige maximale Größenbeschränkung für das Speichern eines Dokuments in MongoDB. Es bildet auch die alternative Lösung, wenn die Daten die Größenbeschränkung überschreiten.
Wir werden auch etwas über die effiziente Nutzung der standardmäßigen maximalen Größenbeschränkung für ein BSON-Dokument lernen.
Maximale MongoDB-Dokumentgröße
In MongoDB werden die Dokumente (Objekte) im BSON-Format gespeichert. Das BSON (das Binary JSON
) ist eine binäre Serialisierung der JSON-ähnlichen Dokumente.
Mit diesem Format können wir verschiedene Erweiterungen verwenden, um die verschiedenen Darstellungen von Datentypen zu verwenden, die nicht Teil von JSON sind.
Zum Beispiel haben wir einen Date
- und BinData
-Typ in BSON, die in JSON nicht verfügbar sind. Laut MongoDB Dokumentation beträgt die Größenbeschränkung für ein einzelnes BSON-Dokument 16MB
.
Wir haben die maximale Größe eines Dokuments, um sicherzustellen, dass ein Dokument während der Übertragung nicht die uneingeschränkte Menge an RAM oder Bandbreite verwenden kann. Denken Sie daran, dass wir die BSON-Dokumente bis zu 100 Ebenen verschachteln können, wobei jedes Array/Objekt eine Ebene hinzufügt.
In der heutigen Welt haben wir überall Daten um uns herum. Es besteht also die Möglichkeit, dass unsere Daten die Größenbeschränkung für ein BSON-Dokument auf 16 Megabyte erhöhen.
In diesem Fall unterstützt uns MongoDB, indem es die GridFS
-API bereitstellt, um die Dokumente zu speichern, die größer als 16MB
sind.
Was ist die GridFS
-API
Das GridFS
ist eine MongoDB-Spezifikation, die wir verwenden können, um die grossen Dateien zu speichern und darauf zuzugreifen, die die Grenze des BSON-Dokuments (16MB
) überschreiten, zum Beispiel Audio-, Video- oder Bilddateien. Es ähnelt dem Dateisystem zum Speichern von Dateien, aber die Daten werden in MongoDB-Sammlungen gespeichert.
Die GridFS
-API unterteilt die Datei in Chunks und speichert jeden Datenblock in einem separaten Dokument, wobei die Größe jedes Dokuments 255KB
beträgt. Das GridFS
enthält standardmäßig zwei Sammlungen, fs.files
und fs.chunks
, die die Metadaten und Chunks einer Datei speichern.
Jeder Chunk wird durch ein eindeutiges Feld _id
(die ObjectId
) erkannt, während die fs.files
als übergeordnetes Dokument dienen. Das Feld files_id
im Dokument fs.chunks
verknüpft den Chunk mit seinem Elternteil.
Sie können diesen Artikel durchgehen, um die Syntax bei der Verwendung von GridFS
zu verstehen.
Verwendung von die standardmäßige BSON-Dokumentgrößenbeschränkung effizient
Die Beschränkung der BSON-Dokumentgröße (16MB
) ist viel. Zum Beispiel ist der gesamte unkomprimierte Text des Krieg der Welten
nur 364k
(HTML), aber Ausnahmen gibt es immer.
Wenn Ihre Daten das Limit überschreiten, können Sie die zuvor besprochene GridFS
-API verwenden oder eine Strategie zur effizienten Nutzung von 16MB
entwickeln.
Lassen Sie uns ein Szenario haben, in dem wir eine XYZ-Anwendung entwickeln möchten. Die Anwendung benötigt vier Datentypen – Boolean
, numbers
, strings
und dates
(dargestellt als UNIX ms).
Mit einer Größenbeschränkung von 16MB
kann MongoDB problemlos rund zwei Millionen Werte von 64-bit
-Zahlen (auch Datum
und Booleans
) speichern.
Hier müssen die Werte vom Typ string
besonders beachtet werden, da jedes UTF-8-Zeichen ein byte
belegt. Wir müssen die Größe aller Spalten optimieren, die Werte vom Typ string
enthalten.
Wir können die folgenden Möglichkeiten ausprobieren, um die Größe einer Spalte mit Werten vom Typ string
zu verringern.
-
Wir können die Methoden
stringify()
undzip()
alszip(JSON.stringify(column.values));
verwenden. -
Wir können ein Wörterbuch erstellen und alle eindeutigen Werte vom Typ
string
in das Wörterbuch einfügen. Ersetzen Sie dann die Zeichenfolgenwerte durch Indizes.Dieser Ansatz ist nützlich, wenn wir viele wiederholte Zeichenfolgenwerte in einem Feld haben. Diese Methode hilft nicht, wenn jemand eine Spalte mit Hashes speichern möchte, aber er kann die
GridFS
-API verwenden. -
Wir können die Spalte auch in verschiedene Teile aufteilen und diese Teile in einigen anderen Dokumenten speichern, die mit dem Hauptdokument verknüpft sind.
Es gibt einen Referenzartikel, der all diese Ansätze demonstriert.