Heim >Technologie-Peripheriegeräte >IT Industrie >Datenserialisierungsvergleich: JSON, YAML, BSON, MessagePack
Der tatsächliche Standard für den Netzwerkdatenaustausch ist JSON (JavaScript -Objektnotation), hat aber auch Nachteile, und in einigen Fällen können andere Formate besser anwendbar sein. Dieser Artikel wird die Vor- und Nachteile verschiedener Alternativen, einschließlich Benutzerfreundlichkeit und Leistung, vergleichen.
Hinweis: In diesem Artikel werden keine Implementierungsdetails im Detail eingeführt. Wenn Sie jedoch ein Ruby -Programmierer sind, lesen Sie bitte diesen Artikel, der von Dhaivat geschrieben wurde. Dies führt zur Implementierung einiger Serialisierungsformate in Ruby.
nach der Definition von Wikipedia ist die Serialisierung:
Der Prozess des Konvertierens von Datenstrukturen oder Objektzuständen in Formate, die gespeichert werden können (z. B. in einer Datei oder einem Speicherpuffer, oder über eine Netzwerkverbindungsverbindung übertragen werden) und später in derselben oder anderen Computerumgebung rekonstruiert werden.
Angenommen, Sie möchten bestimmte Daten über eine Gruppe von Personen sammeln - Name, Nachname, Spitzname, Geburtsdatum, Instrumente, die sie spielen. Sie können problemlos eine Tabelle einrichten, einige Spalten definieren und jede Zeile als Eintrag platzieren. Sie können noch einen Schritt weiter gehen, das Definitionsdatum der Geburtsdatum muss eine Nummer sein, und die Spalte Instrumenten kann eine Liste von Optionen sein. Es sieht so aus:
Name kurzer Name Geburtsdatum Spitzname Musikinstrument William Bailey 1962 AXL Rose Vocals, Klavier Saul Hudson 1965 Slash -Gitarre
mehr oder weniger, was Sie dort tun, definieren eine Datenstruktur. Das Problem ist, dass, wenn Sie diese Informationen mit einer Datenbank oder Website austauschen möchten, die Implementierungsmechanismen dieser Datenstrukturen auf diesen anderen Plattformen sehr unterschiedlich sind, selbst wenn die zugrunde liegende Semantik im Allgemeinen gleich sind. Sie können nur eine Tabelle in eine Webanwendung einfügen, es sei denn, die Anwendung ist speziell dafür ausgelegt. Wenn Sie keine Art von Exporttool oder Gateway haben, können Sie Informationen nicht von der Website in die Datenbank übertragen.
Nehmen wir an, dass unsere Website diese Datenstrukturen bereits in seiner internen Logik implementiert und dass sie einfach keine Tabellenkalkulationsformate verarbeiten kann. Um diese Probleme zu lösen, können Sie diese Datenstrukturen in ein Format umwandeln, das leicht zwischen verschiedenen Anwendungen, Architekturen oder anderen Inhalten weitergeben kann: Sie serialisieren sie. Auf diese Weise können Sie sicherstellen, dass diese Daten nicht nur auf Plattformen übertragen werden können, sondern auch in einem umgekehrten Prozess als Deserialisierung rekonstruiert werden können. Wenn Sie von der Website in eine Tabelle ausgetauscht werden, erhalten Sie semantisch denselben Klon des ursprünglichen Objekts - das heißt, die Zeilen, die genauso aussehen wie die, die Sie ursprünglich gesendet haben.
Kurz gesagt: Serialisierende Daten müssen ein gemeinsames Format finden, das leicht unter verschiedenen Anwendungen zu teilen ist.Format
JSON (JavaScript -Objektnotation) ist ein leichtes Datenaustauschformat. Es ist leicht zu lesen und zu schreiben.json ist das am häufigsten verwendete Datenserialisierungsformat und hat die folgenden Eigenschaften:
<code>[ { "name": "William", "last name": "Bailey", "dob": 1962, "nickname": "Axl Rose", "instruments": [ "vocals", "piano" ] }, { "name": "Saul", "last name": "Hudson", "dob": 1965, "nickname": "Slash", "instruments": [ "guitar" ] } ] </code>bson
BSON, d. H. Binärer JSON, ist eine Binärcode -Serialisierung von Dokumenten der JSON -Klasse ... Es enthält auch Erweiterungen, die Darstellungen von Datentypen ermöglichen, die nicht zur JSON -Spezifikation gehören.
JSON ist ein einfaches Textformat. BSON wird verwendet, um mit diesen Problemen umzugehen.
Es hat die folgenden Eigenschaften:
Es ähnelt JSON. Aber schneller und kleiner.
messagePack (auch als MSGPack bekannt) ist ein weiteres binäres Format für die Serialisierung. Nicht so berühmt wie BSON, aber einen Blick wert.
Zu ihren Eigenschaften gehören:
yaml: Yaml ist keine Markup -Sprache. Was es ist: YAML ist ein humanisierter Datenserialisierungsstandard für alle Programmiersprachen.
Zurück zum einfachen Textformat ist Yaml eine Alternative zu JSON:
Folgendes ist, wie unsere Tabelle nach der Serialisierung in YAML aussieht:
<code>[ { "name": "William", "last name": "Bailey", "dob": 1962, "nickname": "Axl Rose", "instruments": [ "vocals", "piano" ] }, { "name": "Saul", "last name": "Hudson", "dob": 1965, "nickname": "Slash", "instruments": [ "guitar" ] } ] </code>
Es gibt viele andere Serialisierungsformate, wie Protokollpuffer (Protobuf, ebenfalls im binären Format), die ich weggelassen habe (ziemlich zufällig). Wenn Sie nur alle möglichen Formate kennen möchten, lesen Sie Wikipedia über Vergleiche des Datenserialisierungsformates.
Wir werden hier ein wenig vom Thema abweichen. Layered Data Format Version 5 (HDF5) dient nicht wirklich zur Serialisierung, sondern zur Speicherung, und sie überflutet die Datenwissenschaft und andere Branchen. Es ist ein sehr schnelles und universelles Format, mit dem nicht nur viele Datenstrukturen gespeichert werden können, sondern auch als Ersatz für relationale Datenbanken.
Um diese Episode zu beenden, erwähnen wir einfach, dass Sie versucht sind, HDF5 zu lesen, wenn Sie Binärformate wie BSON und MessagePack verwenden, um viele Informationen zu speichern/auszutauschen.
Es ist auch erwähnenswert, dass die Leistung selbst für das gleiche Format vom von Ihnen gewählten Serializer und Parser abhängt.
Während es albern klingt, hat BSON den Vorteil des Namens: Die Leute verbinden mongoDB-entwickelte Formate (BSON) automatisch mit Standard (JSON), und es gibt keine Verbindung zwischen ihnen. Daher können Sie auch andere Optionen in Betracht ziehen, wenn Sie nach binären Alternativen zu JSON suchen.
MessagePack scheint BSON in jeder Hinsicht zu übertreffen: Es ist schneller und kleiner und es ist noch mehr kompatibel als BSON. (Wenn Sie JSON bereits verwenden, ist MessagePack fast eine Plug-and-Play-Optimierung.) Vielleicht sollte ich als "Reporter" etwas ausgeglichener sein, aber als Entwickler besteht kein Zweifel daran.
Dennoch ist BSON das von MongoDB verwendete Format, das Daten speichert und darstellt. Wenn Sie diese NoSQL -Datenbank verwenden, gibt es einen Grund, sich daran zu halten.
In der Serialisierung in der Serialisierung geht es natürlich nicht nur darum, binäre Daten zu speichern. Zugegeben, JSON hat ein anderes Ziel - d. H. Ein wenig Aufmerksamkeit wird jedoch zeigen, dass Yaml in dieser Hinsicht besser abschneidet.Die YAML -Spezifikation ist jedoch im Vergleich zur JSON -Spezifikation sehr groß. Es muss jedoch gesagt werden, dass es mehr Datentypen und Funktionen enthält.
Andererseits kann es nicht ignoriert werden, dass die Einfachheit von JSON für seine Einführung als andere Serialisierungsformate der Schlüssel ist. Es stützt sich auf eine weit verbreitete Sprache, die bereits vorhanden ist, JavaScript, und wenn Sie JS kennen oder der Sie ausgesetzt waren (wenn Sie in der Webentwicklungsindustrie sind, werden Sie über JSON Bescheid wissen).
Warum also nicht Yaml jetzt verwenden? In vielen Fällen ist dies nicht einfach. JSON hat immer noch einen Platz in der Web -API, da Sie JSON -Code problemlos in HTTP -Anfragen einbetten können (für GETs, z. B. in URLs und Beiträge, z. , weil der Code automatisch ungültig wird, was bei YAML und anderen konkurrierenden Klartextformaten möglicherweise nicht der Fall ist. Darüber hinaus müssen Sie noch immer mit dem JSON-basierten API und dem Legacy-Code interagieren, und die Aufrechterhaltung von zwei Codeausschnitten (JSON- und YAML-Methoden) für denselben Zweck (Datenserialisierung) ist immer eine schmerzhafte Sache.
Aber diese Teile sind das gleiche wie das Argument, das uns nach hinten drängt und uns daran hindert, neuere, effizientere Technologien einzusetzen (z. B. Python 3 anstelle von Python 2). Ich habe einmal eine Minute lang darüber nachgedacht, dass wir Programmierer und Unternehmer Innovatoren sind, oder?
JSON und YAML sind beide Datenserialisierungsformate, haben jedoch einige wichtige Unterschiede. JSON ist eine Untergruppe von JavaScript und wird aufgrund seiner Kompatibilität mit JavaScript häufig in Webanwendungen verwendet. Es verwendet eine einfache Syntax und ist leicht zu lesen und zu schreiben. Es fehlen jedoch einige Funktionen wie Kommentare und Multi-Line-Saiten. Yaml hingegen ist ein Superset von JSON und hat eine humanisierte Syntax. Es unterstützt Kommentare und Multi-Line-Zeichenfolgen und erleichtert die Verwendung als Konfigurationsdatei. Es ist jedoch komplexer als JSON und ist nicht so weit verbreitet wie JSON.
BSON oder Binary JSON ist eine binäre Darstellung eines JSON -Klassendokuments. Es ist so konzipiert, dass es im Raum effizient ist, und gilt auch in rechenintensiven Szenarien wie der Netzwerkübertragung. BSON kann mehr Datentypen speichern als JSON, einschließlich Binär- und Datumsdatentypen. Es ist jedoch nicht so lesbar wie JSON oder YAML und wird hauptsächlich zum Speichern und Abrufen von Daten in MongoDB verwendet.
MessagePack ist ein JSON-ähnlicher, aber effizienterer binärer Serialisierungsformat. Es ist kompakt, schnell und unterstützt eine Vielzahl von Datentypen. Es wird häufig in Anwendungen verwendet, die eine hohe Leistung erfordern, z. B. Echtzeit-Streaming-Anwendungen. Wie BSON ist es jedoch nicht so lesbar wie JSON oder YAML.
Ja, es gibt mehrere andere Alternativen zu JSON, darunter XML, Protobuf und Avro. XML ist eine menschlich-lesbare Markup-Sprache, die komplexe Datenstrukturen unterstützt, aber ausführlicher als JSON. Protobuf- oder Protokollpuffer ist ein von Google entwickeltes binäres Serialisierungsformat, das kompakt und schnell, aber nicht lesbar ist. AVRO ist ein von Apache entwickeltes binäres Serialisierungsformat, das die Musterentwicklung unterstützt, um es für die Langzeitdatenspeicherung geeignet zu machen.
Die Auswahl des Datenserialisierungsformats von Daten hängt von Ihren spezifischen Anforderungen ab. Wenn Sie ein menschliches lesbares und einfach zu bedienendes Format benötigen, ist JSON oder YAML möglicherweise die beste Wahl. Wenn Sie ein kompaktes und schnelles Format benötigen, ist MessagePack oder BSON möglicherweise besser geeignet. Wenn Sie ein Format benötigen, das die Musterentwicklung unterstützt, ist AVRO wahrscheinlich die beste Wahl. Vor einer Entscheidung ist es wichtig, die Vor- und Nachteile jedes Formats zu verstehen.
Ja, mehrere Datenserialisierungsformate können in derselben Anwendung verwendet werden. Beispielsweise können Sie JSON verwenden, um Daten zwischen dem Client und dem Server auszutauschen und BSON zum Speichern von Daten in MongoDB zu verwenden. Die Verwendung mehrerer Formate kann jedoch die Komplexität Ihrer Anwendung erhöhen. Stellen Sie daher sicher, dass die Vor- und Nachteile sorgfältig abgewogen werden.
Es gibt mehrere Bibliotheken und Tools, mit denen Daten zwischen verschiedenen Serialisierungsformaten konvertiert werden können. Beispielsweise können Sie das JSON -Modul in Python verwenden, um Daten zwischen JSON- und Python -Objekten umzuwandeln oder das YAML -Modul zum Umwandeln von Daten zwischen YAML- und Python -Objekten zu verwenden. Es gibt auch einige Online -Tools wie JSON2YAML, mit denen Daten zwischen JSON und YAML konvertiert werden können.
Die Leistungseinflüsse der Verwendung verschiedener Datenserialisierungsformate kann je nach Anwendungsfall variieren. Binärformate wie BSON und MessagePack sind oft schneller und kompakter als textbasierte Formate wie JSON und YAML. Sie sind jedoch weniger lesbar als Menschen, was das Debuggen erschweren kann. Die Leistung von Bibliotheken und Tools zur Serialisierung und Deserialisierung von Daten muss ebenfalls berücksichtigt werden.
Ja, es gibt einige Sicherheitsvorkehrungen bei der Verwendung von Datenserialisierungsformat. Wenn beispielsweise einige Formate wie JSON und YAML nicht korrekt gereinigt werden, können sie beliebigen Code ausführen, was zu Sicherheitslücken führen kann. Stellen Sie sicher, dass Sie vertrauenswürdige Bibliotheken und Tools verwenden, um Daten zu serialisieren und zu deserialisieren und alle von Benutzer bereitgestellten Daten zu säubern.
Es gibt viele Ressourcen online, mit denen Sie mehr über Datenserialisierungsformate erfahren können. Sie können zunächst offizielle Dokumente in jedem Format lesen, die normalerweise Tutorials und Beispiele enthalten. Es gibt auch viele Tutorials und Artikel auf Websites wie Stack Overflow und Medium. Schließlich können Sie in Ihrem eigenen Projekt verschiedene Formate ausprobieren, um praktische Erfahrungen zu sammeln.
Das obige ist der detaillierte Inhalt vonDatenserialisierungsvergleich: JSON, YAML, BSON, MessagePack. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!