ANNOUNCEMENTVoyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas. Learn more >
NEWSLearn why MongoDB was named a leader in the 2024 Gartner® Magic Quadrant™ Read the report >
NEWMongoDB 8.0: Experience unmatched speed and performance. Check it out >

JSON ist ein weit verbreitetes Datenaustauschformat, das in vielen Anwendungen und Technologie-Stacks beliebt ist. BSON, die binäre Darstellung von JSON, wird von MongoDB hauptsächlich intern zur effizienten Speicherung und Datendurchquerung verwendet.


Inhaltsverzeichnis

Was ist JavaScript Object Notation?

JSON oder JavaScript Object Notation ist ein für Menschen lesbares Format für den Datenaustausch, das Anfang der 2000er Jahre eingeführt wurde. Obwohl JSON auf einer Teilmenge des Programmiersprachenstandards JavaScript basiert, ist es völlig sprachunabhängig.

JSON-Objekte sind assoziative Container, in denen ein Zeichenfolgenschlüssel einem Wert zugeordnet wird (der eine Zahl, eine Zeichenfolge, ein Boolescher Wert, ein Array, ein leerer Wert – null oder sogar ein anderes Objekt sein kann). Fast jede Programmiersprache unterstützt diese abstrakte Datenstruktur – Objekte in JavaScript, Wörterbücher in Python, Hash-Tabellen in Java und C#, assoziative Arrays in C++ usw.


Wie sehen JSON-Daten aus?

JSON-Objekte sind in menschenlesbaren Formaten strukturiert, die auch für Anwendungen leicht zu lesen sind.

{
  "_id": 1,
  "name": { "first" : "John", "last" : "Backus" },
  "contribs": [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
  "awards": [
    {
      "award": "W.W. McDowell Award",
      "year": 1967,
      "by": "IEEE Computer Society"
    }, {
      "award": "Draper Prize",
      "year": 1993,
      "by": "National Academy of Engineering"
    }
  ]
}

Beachten Sie, dass die JSON-Datei aus Schlüssel-Wert-Paaren besteht, die durch Kommas getrennt sind, und dass die Schlüssel-Wert-Paare durch Doppelpunkte (:) gekennzeichnet sind. Das JSON-Objekt (Dokument) beginnt und endet mit geschweiften Klammern. Sie können jeden der unterstützten Datentypen verwenden. Das obige Beispiel zeigt Zeichenfolgen (in Anführungszeichen), Zahlen und Arrays (in eckigen Klammern).

Als JavaScript zur führenden Sprache für die Webentwicklung wurde, begann JSON ein Eigenleben zu entwickeln. Da JSON sowohl menschen- als auch maschinenlesbar ist und die Unterstützung in anderen Sprachen vergleichsweise einfach zu implementieren ist, hat es schnell den Weg über die Webseite hinaus in jede Software gefunden.

Heute kommt JSON in vielen verschiedenen Fällen zum Einsatz:

  • APIs Konfigurationsdateien
  • Log-Meldungen
  • Datenbankspeicher

Die MongoDB-JSON-Verbindung

MongoDB wurde von Anfang an als eine Datenbank konzipiert, die sich auf die Bereitstellung einer großartigen Entwicklungserfahrung konzentriert. Die Allgegenwärtigkeit von JSON machte es zur offensichtlichen Wahl für die Darstellung von Datenstrukturen im Dokumentdatenmodell von MongoDB.

Es ist einfacher, Anwendungen mit Technologie-Stacks wie MEAN und MERN zu erstellen, da Entwickler durchgängig eine einzige Programmiersprache (JavaScript) verwenden können.

Es gibt jedoch mehrere Probleme, die JSON für die Verwendung innerhalb einer Datenbank weniger ideal machen.

  1. JSON unterstützt nur eine begrenzte Anzahl grundlegender Datentypen. Insbesondere fehlt JSON die Unterstützung für Datums- und Uhrzeitangaben sowie für Binärdaten.

  2. JSON-Objekte und -Eigenschaften haben keine feste Länge, was die Durchquerung verlangsamt.

  3. JSON stellt keine Metadaten und Typinformationen bereit, wodurch das Abrufen von Dokumenten länger dauert.

Um MongoDB JSON-orientiert, aber dennoch leistungsstark und universell einsetzbar zu machen, wurde BSON erfunden, um diese Lücke zu schließen: eine binäre Darstellung zum Speichern von Daten als JSON-Dokumente, optimiert auf Geschwindigkeit, Speicherplatz und Effizienz. Vom Ansatz her ist es anderen binären Austauschformaten wie Protocol Buffers oder Thrift nicht unähnlich.

Binäres JSON-Dokument

BSON steht für „Binary JSON“ und das ist genau das, wofür es erfunden wurde. Eine BSON-Datei ist eine binäre Darstellung der entsprechenden JSON-Datei. Das binär codierte Serialisierungsformat von BSON codiert auch Typ- und Längeninformationen, was im Vergleich zu JSON eine viel schnellere Durchquerung ermöglicht.

BSON fügt einige zusätzliche Datentypen (nicht JSON-nativ) hinzu, wie Datumsangaben und Binärdaten, ohne die MongoDB wertvolle Unterstützung gefehlt hätte.


BSON-Dateien

Nachfolgend sind einige Beispiel-JSON-Objekte und ihre entsprechenden binären JSON-Darstellungen aufgeführt.

{"hello": "world"} →
\x16\x00\x00\x00           // total document size
\x02                       // 0x02 = type String
hello\x00                  // field name
\x06\x00\x00\x00world\x00  // field value
\x00                       // 0x00 = type EOO ('end of object')
 
{"BSON": ["awesome", 5.05, 1986]} →
\x31\x00\x00\x00
 \x04BSON\x00
 \x26\x00\x00\x00
 \x02\x30\x00\x08\x00\x00\x00awesome\x00
 \x01\x31\x00\x33\x33\x33\x33\x33\x33\x14\x40
 \x10\x32\x00\xc2\x07\x00\x00
 \x00
 \x00

Sie können mehr über die BSON-Grammatik in der BSON-Spezifikation erfahren.

Verwendet MongoDB BSON oder JSON?

MongoDB speichert Daten sowohl intern als auch über das Netzwerk im BSON-Format. Alles, was Sie in JSON darstellen können, kann nativ in MongoDB gespeichert und genauso einfach in JSON abgerufen werden.


Ein Bild, das beschreibt, wie MongoDB JSON-Daten in BSON-Daten konvertiert.

Bei Verwendung des MongoDB-Treibers für Ihre bevorzugte Programmiersprache arbeiten Sie mit den nativen Datenstrukturen für diese Sprache. Ihre Anwendung muss die native Datenstruktur (z. B. ein JavaScript-Objekt oder POJO) in JSON konvertieren. Der MongoDB-Treiber kümmert sich dann bei der Abfrage der Datenbank um die Konvertierung der Daten von JSON in BSON und zurück.

Im Gegensatz zu Systemen, die JSON als stringcodierte Werte oder binärcodierte Blobs speichern, verwendet MongoDB BSON, um leistungsstarke Indexing- und Abfragefunktionen zusätzlich zum beliebtesten Datenformat des Webs anzubieten.

MongoDB ermöglicht es Entwicklern beispielsweise, Objekte anhand bestimmter Schlüssel im JSON/BSON-Dokument abzufragen und zu bearbeiten, sogar in verschachtelten Dokumenten, die viele Ebenen tief in einem Datensatz liegen, und leistungsstarke Indizes für dieselben Schlüssel und Werte zu erstellen.

Erstens können BSON-Dateien Datums- und Uhrzeitangaben oder Binärobjekte enthalten, die in reinem JSON nicht nativ darstellbar sind.

Zweitens hat jede Programmiersprache ihre eigene Objektsemantik. JSON-Objekte haben beispielsweise geordnete Schlüssel, während Python-Dictionaries (die nächstgelegene native Datenstruktur, die JavaScript-Objekten analog ist) ungeordnet sind. Auch Unterschiede bei numerischen und Zeichenfolgen-Datentypen können eine Rolle spielen. Drittens unterstützt BSON eine Vielzahl numerischer Typen, die nicht nativ für JSON sind und in vielen Sprachen unterschiedlich dargestellt werden.


EJSON

EJSON oder Extended JSON ist eine JSON-kompatible Möglichkeit, BSON-Werte in MongoDB darzustellen. Da JSON nur eine Teilmenge der von BSON unterstützten Typen unterstützt, fügt MongoDB dem JSON-Format bestimmte Erweiterungen hinzu, nämlich den kanonischen Modus und den entspannten Modus. MongoDB bietet Methoden wie Serialisieren, Deserialisieren, Parsen und Stringifizieren für EJSON.


JSON parsen

Wenn eine Anwendung mithilfe der Shell, der API oder von MongoDB Atlas Daten in MongoDB schreibt oder aktualisiert, werden die Daten vom MongoDB-Treiber in das BSON-Format geparst. Beim Parsen geht es darum, die JavaScript-Objekte oder die JSON-Struktur zu identifizieren und zu interpretieren, jedes Feld dem richtigen BSON-Datentyp zuzuordnen und die Werte zu konvertieren. Wenn eine Anwendung Daten von MongoDB anfordert, konvertiert der Treiber die Daten in eine JSON-Zeichenfolge, bevor sie über den Server gesendet werden.

Überprüfen Sie Ihre Treiberdokumentation, um sicherzustellen, dass Sie verstehen, wie Sie am besten in Ihrer Sprache auf MongoDB BSON-gestützte Daten zugreifen.

JSON vs. BSON

JSONBSON
EncodingUTF-8 stringBinary
Data SupportString, boolean, number, array, object, nullString, boolean, number (integer, float, long, decimal128...), array, null, date, BinData
ReadabilityHuman and machineMachine only

JSON und BSON sind in der Tat vom Design her eng verwandt. BSON ist als binäre Darstellung von JSON-Daten mit spezifischen Erweiterungen für breitere Anwendungen konzipiert und für die Datenspeicherung und -durchquerung optimiert. Genau wie JSON unterstützt BSON das Einbetten von Objekten und Arrays.

Ein besonderer Unterschied zwischen BSON und JSON besteht in der Unterstützung einiger erweiterter Datentypen. JSON unterscheidet beispielsweise nicht zwischen Ganzzahlen (die runde Zahlen sind) und Gleitkommazahlen (die eine unterschiedlich hohe Dezimalgenauigkeit haben).

Die meisten serverseitigen Programmiersprachen verfügen über anspruchsvollere numerische Typen (zu den Standards gehören Integer, Gleitkommazahl mit einfacher Genauigkeit – auch bekannt als „float“ – Gleitkommazahl mit doppelter Genauigkeit – auch bekannt als „double“ – und boolesche Werte), die jeweils optimal für effiziente mathematische Operationen genutzt werden können.

Schemaflexibilität und Datenverwaltung

Einer der großen Vorteile für Entwickler, die Datenbanken mit JSON- und BSON-Datenmodellen verwenden, ist das dynamische und flexible Schema, das diese im Vergleich zu den starren, tabellarischen Datenmodellen relationaler Datenbanken bieten.

Erstens sind MongoDB-Dokumente polymorph – Felder können innerhalb einer einzelnen Sammlung von Dokument zu Dokument variieren (analog zu Tabellen in einer relationalen Datenbank). Diese Flexibilität erleichtert die Modellierung von Daten beliebiger Strukturen und die Anpassung des Modells, wenn sich die Anforderungen ändern.

Zweitens besteht keine Notwendigkeit, die Struktur von Dokumenten gegenüber der Datenbank offenzulegen – Dokumente sind selbstbeschreibend. Die Entwickler können mit dem Schreiben von Code beginnen und Objekte bei ihrer Erstellung persistieren.

Drittens: Wenn einem Dokument ein neues Feld hinzugefügt werden muss, kann dies erstellt werden, ohne dass dies Auswirkungen auf alle anderen Dokumente in der Sammlung hat, ohne dass ein zentraler Systemkatalog aktualisiert werden muss und ohne dass die Datenbank offline genommen werden muss. Wenn Sie Änderungen am Datenmodell vornehmen müssen, speichert die Dokumentdatenbank die aktualisierten Objekte weiterhin, ohne dass kostspielige ALTER TABLE-Vorgänge erforderlich sind – oder, schlimmer noch, das Schema von Grund auf neu entwerfen zu müssen.

Durch diese Vorteile ist die Flexibilität des Dokumentdatenmodells gut an die Anforderungen moderner Anwendungsentwicklungspraktiken angepasst.

Obwohl ein flexibles Schema eine leistungsstarke Funktion ist, gibt es Situationen, in denen Sie möglicherweise mehr Kontrolle über die Datenstruktur und den Inhalt Ihrer Dokumente wünschen. Die meisten Dokumentdatenbanken überlassen die Durchsetzung dieser Kontrollen dem Entwickler, der sie im Anwendungscode implementieren muss. Fortgeschrittenere Dokumentdatenbanken ermöglichen jedoch eine Schemavalidierung mithilfe von Ansätzen wie dem von MongoDB übernommenen IETF-JSON-Schema-Standard. Testen Sie MongoDB Atlas jetzt online!

FAQs

So konvertieren Sie BSON in JSON

Sie können die Online-JSON-Tools verwenden, um zwischen BSON und JSON zu konvertieren. MongoDB bietet auch das bsondump-Tool, um BSON in JSON zu konvertieren.

Warum BSON anstelle von JSON verwenden?

BSON bietet gegenüber JSON folgende Vorteile:

  • BSON unterstützt mehr Datentypen wie Datum, Uhrzeit und Binärdaten.
  • Die binäre Struktur von BSON ermöglicht eine schnellere Durchquerung und Datenabfrage.

  • BSON bietet zusätzliche Metadaten wie Längen- und Typinformationen und beschleunigt so die Suche.

Was ist das BSON-JSON-Format?

BSON ist die binär kodierte Serialisierung von JSON-Daten. Während JSON-Zeichenfolgen für Menschen lesbar sind, muss BSON analysiert werden. BSON bietet die zusätzlichen Vorteile, dass es mehr Datentypen unterstützt, leichtgewichtig und durchsuchbar ist und Daten effizienter speichert. Es ist auch effizient für die Kodierung und Dekodierung mit vielen Programmiersprachen.