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
| Vorteil | Nachteil |
|---|---|
| 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.