Leitfaden zu Datenserialisierungsformaten: Parquet, Avro, Proto und mehr
In der Welt des Data Engineering und der Softwareentwicklung ist die Art und Weise, wie wir Daten speichern und übertragen, von entscheidender Bedeutung. Während JSON aufgrund seiner Lesbarkeit der König der Web-APIs ist, ist es für die Verarbeitung großer Datenmengen, Hochfrequenz-Messaging oder spezialisiertes Debugging oft zu sperrig oder zu langsam.
Dieser Leitfaden untersucht die spezialisierten Dateierweiterungen, die für die Datenserialisierung über grundlegendes JSON und CSV hinaus verwendet werden.
Kurzreferenztabelle: Datenserialisierungsformate
| Erweiterung | Vollständiger Name | Format | Primärer Anwendungsfall |
|---|---|---|---|
.ndjson, .jsonl |
Newline Delimited JSON | Text (ASCII) | Logdateien, Datenstreaming, Big Data Importe |
.parquet |
Apache Parquet | Binär (Spaltenbasiert) | Big Data Analysen (Hadoop, Spark, AWS S3) |
.avro |
Apache Avro | Binär (Zeilenbasiert) | Datenserialisierung mit Schemata (Kafka) |
.proto |
Protocol Buffers | Text (DSL) | Definition von gRPC-Schnittstellen und Datenstrukturen |
.bson |
Binäres JSON | Binär | MongoDB-Speicherung und Datenaustausch |
.cbor |
Concise Binary Object Representation | Binär | IoT, Umgebungen mit geringer Bandbreite |
.har |
HTTP-Archiv | Text (JSON) | Debugging von Netzwerkanfragen in Browsern |
.edn |
Extensible Data Notation | Text (Lisp-ähnlich) | Clojure-Ökosystem, Metadatenkonfiguration |
1. Stream-freundliches JSON (.ndjson, .jsonl)
Standard-JSON erfordert, dass eine gesamte Datei in den Speicher gelesen wird, um analysiert zu werden (sie beginnt mit [ und endet mit ]). Dies ist für 100 GB große Logdateien unmöglich.
- NDJSON / JSONL: Jede Zeile ist ein gültiges, unabhängiges JSON-Objekt.
- Warum sollte man es verwenden? Sie können eine Datei Zeile für Zeile lesen, ohne die gesamte Datei laden zu müssen. Wenn die Datei abgeschnitten oder beschädigt ist, verlieren Sie nur die letzte Zeile, nicht den gesamten Datensatz.
2. Big Data Spaltenspeicherung (.parquet, .orc)
Herkömmliche Datenbanken speichern Daten zeilenweise. Analytische Datenbanken bevorzugen oft die spaltenbasierte Speicherung.
- Parquet: Der Industriestandard für Big Data. Da es Daten spaltenweise speichert, kann es Daten viel effektiver komprimieren und ermöglicht es Ihnen, Spalten zu "überspringen", die Sie für eine bestimmte Abfrage nicht benötigen.
- ORC: Optimized Row Columnar. Ähnlich wie Parquet, wird aber hauptsächlich im Apache Hive-Ökosystem verwendet.
3. Schema-First Serialisierung (.avro, .proto)
Im Gegensatz zu JSON, wo die Schlüsselnamen ("first_name") in jedem einzelnen Datensatz wiederholt werden, trennen Schema-First-Formate die "Regeln" von den "Daten".
- Avro: Das Schema wird als JSON gespeichert, aber die Daten sind binär. Es ist der Standard für Apache Kafka, da es schnell ist und die Schemaentwicklung unterstützt.
- Protobuf (.proto): Von Google entwickelt. Sie definieren Ihre Datenstruktur in einer
.proto-Datei, und dann generiert ein Compiler Code für Ihre bevorzugte Sprache. Es ist das Rückgrat von gRPC.
4. Binäre JSON-Alternativen (.bson, .cbor, .msgpack)
Wenn Sie die Flexibilität von JSON mögen, aber mehr Geschwindigkeit oder kleinere Dateigrößen benötigen, sind Binärformate die Antwort.
- BSON: Wird intern von MongoDB verwendet. Es unterstützt mehr Datentypen als JSON (wie Datum und Binärdaten).
- CBOR: Auf extreme Kompaktheit und Effizienz ausgelegt. Es wird häufig in IoT-Geräten (Internet der Dinge) verwendet, bei denen jedes Byte Bandbreite zählt.
- MessagePack: Ähnlich wie CBOR, es ist "wie JSON, aber schnell und klein".
5. Spezialisierte Formate (.har, .edn)
- HAR (HTTP Archive): Wenn Sie jemals einen Netzwerk-Trace aus den Chrome- oder Firefox-DevTools "exportiert" haben, handelt es sich um eine
.har-Datei. Es ist eigentlich nur eine massive JSON-Datei, die jeden Header, jedes Cookie und jeden Antwortkörper Ihrer Browsing-Sitzung enthält. - EDN: Wird hauptsächlich in der Clojure-Welt verwendet. Es ist leistungsfähiger als JSON, da es benutzerdefinierte Typen (Tags) und komplexere Datenstrukturen nativ unterstützt.
So zeigen Sie diese Dateien an
- NDJSON/JSONL: Verwenden Sie einen beliebigen Texteditor oder das Kommandozeilen-Tool
jq. - Parquet: Erfordert spezielle Viewer oder Python-Bibliotheken (wie
pandasoderfastparquet). - Protobuf: Normalerweise benötigen Sie die
.proto-Definitionsdatei, um die Binärdaten zu dekodieren. - HAR: Sie können sie per Drag & Drop zurück in die Chrome/Firefox-DevTools ziehen oder einen Online-HAR-Viewer verwenden.
Häufig gestellte Fragen (FAQ)
F: Warum ist meine Parquet-Datei kleiner als meine CSV-Datei?
A: Parquet verwendet fortschrittliche Kompressionstechniken wie "Wörterbuch-Kodierung" und "Lauflängenkodierung". Da Daten spaltenweise gespeichert werden, sind die Werte in einer Spalte (wie "Land") oft identisch, was massive Kompressionsraten im Vergleich zu Textdateien ermöglicht.
F: Kann ich eine .proto-Datei bearbeiten?
A: Ja, .proto-Dateien sind für Menschen lesbare Textdateien, in denen Sie Ihre Datenstrukturen definieren. Sie können jedoch die daraus erzeugten Binärdaten nicht direkt "bearbeiten" – Sie müssen den kompilierten Code verwenden.
F: Ist .bson dasselbe wie JSON?
A: Nicht ganz. BSON ist eine binäre Repräsentation, die JSON-ähnliche Daten enthält, aber auch Typen wie Buffer, Long und Decimal128 hinzufügt, die Standard-JSON nicht unterstützt.
Verwandte Tools auf Tool3M
- JSON-zu-CSV-Konverter: Konvertieren Sie Ihre strukturierten Daten in eine flache Tabelle.
- Leitfaden zur binären Serialisierung: Erfahren Sie mehr über Protobuf und MessagePack.