Vergleichen Sie verschiedene Datenserialisierungsbibliotheken für C++.
Dieses Projekt weist keine Abhängigkeiten von externen Serialisierungsbibliotheken auf. Alle (Boost, Thrift usw.) benötigten Bibliotheken werden automatisch heruntergeladen und erstellt, Sie benötigen jedoch genügend freien Speicherplatz (ca. 2,3 GB), um alle Komponenten zu erstellen. Um dieses Projekt zu erstellen, benötigen Sie einen Compiler, der C++14-Funktionen unterstützt. Das Projekt wurde mit Clang- und GCC-Compilern getestet.
git clone https://github.com/thekvs/cpp-serializers.git
cd cpp-serializers
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
$ ./benchmark -h
Benchmark various C++ serializers
Usage:
benchmark [OPTION...]
-h, --help show this help and exit
-l, --list show list of supported serializers
-c, --csv output in CSV format
-i, --iterations arg number of serialize/deserialize iterations
-s, --serializers arg comma separated list of serializers to benchmark
$ ./benchmark -i 100000
$ ./benchmark -i 100000 -s protobuf
$ ./benchmark -i 100000 -s protobuf,cereal
Die folgenden Ergebnisse wurden durch 50-maliges Ausführen von 1000000 Serialisierungs-Deserialisierungsvorgängen und anschließender Mittelung der Ergebnisse auf einem typischen Desktop-Computer mit Intel Core i7-Prozessor und Ubuntu 16.04 erzielt. Die genauen Versionen der verwendeten Bibliotheken sind:
Serialisierer | Objektgröße | Durchschn. Gesamtzeit |
---|---|---|
sparsam-binär | 17017 | 1190.22 |
sparsam-kompakt | 13378 | 3474,32 |
protobuf | 16116 | 2312,78 |
Schub | 17470 | 1195.04 |
msgpack | 13402 | 2560,6 |
Getreide | 17416 | 1052,46 |
avro | 16384 | 4488.18 |
Ja | 17416 | 302,7 |
ja-kompakt | 13321 | 2063,34 |
Für capnproto und flatbuffers, da sie Daten bereits in „serialisierter“ Form speichern und Serialisierung im Wesentlichen bedeutet, einen Zeiger auf den internen Speicher zu erhalten, messen wir den vollständigen Build- /Serialisierungs-/Deserialisierungszyklus. Bei anderen Bibliotheken messen wir den Serialisierungs-/Deserialisierungszyklus der bereits erstellten Datenstruktur.
Serialisierer | Objektgröße | Durchschn. Gesamtzeit |
---|---|---|
capnproto | 17768 | 400,98 |
Flachpuffer | 17632 | 491,5 |
Größe gemessen in Bytes, Zeit gemessen in Millisekunden.