Wie ist das Datenformat Protobuf aufgebaut?

Ein Protocol Buffer (Protobuf) Beispiel besteht immer aus zwei Teilen: der Definition (der .proto-Datei), in der du die Struktur festlegst, und den binären Daten, die daraus generiert werden.

Hier ist ein konkretes Beispiel, wie man einen Flugdatensatz (passend zu unserem Lufthansa-Thema) definieren würde:

1. Die Definition (airline.proto)

Zuerst erstellst du eine Schema-Datei. Die Zahlen (= 1= 2) sind keine Werte, sondern Tags (eindeutige IDs), damit das System weiß, welches Feld welches ist, ohne den Namen des Feldes mitspeichern zu müssen.

Protocol Buffers

syntax = "proto3";

message Flight {
  string airline_name = 1;
  string flight_number = 2;
  int32 capacity = 3;
  bool is_delayed = 4;
}

2. Der Vergleich: Was passiert „unter der Haube“?

Stellen wir uns vor, wir wollen diesen Datensatz übertragen:

  • Name: Lufthansa
  • Nummer: LH123
  • Kapazität: 180
  • Verspätet: Nein (false)

In JSON (Textformat):

JSON muss alles mitschreiben, damit es lesbar bleibt. Das verbraucht viele Bytes für Zeichen wie Anführungszeichen, Doppelpunkte und die Feldnamen selbst.

JSON

{"airline_name":"Lufthansa","flight_number":"LH123","capacity":180,"is_delayed":false}
  • Größe: ca. 82 Bytes

In Protobuf (Binärformat):

Protobuf speichert keine Feldnamen. Es sagt stattdessen nur: „Feld 1 ist ein String mit 9 Zeichen: Lufthansa. Feld 2 ist ein String mit 5 Zeichen: LH123...“

  • Das Ergebnis ist eine binäre Abfolge wie: 0A 09 4C 75 66 74 68 61 6E 73 61 12 05 4C 48 31 32 33 ...
  • Größe: ca. 20 Bytes

3. Vor- und Nachteile von Protobuf

VorteilNachteil
Enorm platzsparend: Reduziert die Bandbreite um bis zu 80%.Nicht lesbar: Ohne die .proto-Datei sieht man nur Zeichensalat.
Extrem schnell: Das Parsen (Einlesen) ist bis zu 10x schneller als bei JSON.Komplexität: Du musst Code generieren (mit dem protocCompiler), um es zu nutzen.
Typensicher: Man kann nicht versehentlich einen Text in ein Zahlenfeld schicken.Versionierung: Man muss vorsichtig sein, wenn man Felder hinzufügt oder löscht.

Warum ist das für „Gewinner“ wichtig?

Wenn du eine App baust, die Millionen von Nutzern hat (wie eine Airline-App), sparst du durch Protobuf massiv an Serverkosten und Akkukapazität bei den Endgeräten. Während andere noch „langsame“ JSON-Daten schaufeln, läuft dein System in 4K-Geschwindigkeit.

Könntest du dir vorstellen, so ein technisches Format in einem eigenen Projekt zu nutzen, oder bleibst du lieber beim lesbaren JSON?

1 Gedanke zu „Wie ist das Datenformat Protobuf aufgebaut?“

Die Kommentare sind geschlossen.