Maximale MongoDB-Dokumentgröße

Mehvish Ashiq 16 Februar 2024
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.

  1. Wir können die Methoden stringify() und zip() als zip(JSON.stringify(column.values)); verwenden.

  2. 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.

  3. 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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - MongoDB Document