Comparez différentes bibliothèques de sérialisation de données pour C++.
Ce projet n'a aucune dépendance de bibliothèques de sérialisation externes. Toutes les bibliothèques nécessaires (boost, thrift, etc.) sont téléchargées et créées automatiquement, mais vous avez besoin de suffisamment d'espace disque libre (environ 2,3 Go) pour créer tous les composants. Pour créer ce projet, vous avez besoin d'un compilateur prenant en charge les fonctionnalités C++14. Le projet a été testé avec les compilateurs Clang et GCC.
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
Les résultats suivants ont été obtenus en exécutant 1 000 000 opérations de sérialisation-désérialisation 50 fois, puis en faisant la moyenne des résultats sur un ordinateur de bureau typique équipé d'un processeur Intel Core i7 exécutant Ubuntu 16.04. Les versions exactes des bibliothèques utilisées sont :
sérialiseur | la taille de l'objet | moy. temps total |
---|---|---|
épargne-binaire | 17017 | 1190.22 |
économe-compact | 13378 | 3474.32 |
protobuf | 16116 | 2312.78 |
booster | 17470 | 1195.04 |
pack de messages | 13402 | 2560.6 |
céréale | 17416 | 1052.46 |
Avro | 16384 | 4488.18 |
ouais | 17416 | 302.7 |
oui-compact | 13321 | 2063.34 |
Pour capnproto et flatbuffers, puisqu'ils stockent déjà les données sous une forme "sérialisée" et que la sérialisation signifie essentiellement obtenir un pointeur vers le stockage interne, nous mesurons le cycle complet de construction /sérialisation/désérialisation. Dans le cas d'autres bibliothèques, nous mesurons le cycle de sérialisation/désérialisation de la structure de données déjà construite.
sérialiseur | la taille de l'objet | moy. temps total |
---|---|---|
capnproto | 17768 | 400,98 |
tampons plats | 17632 | 491,5 |
Taille mesurée en octets, temps mesuré en millisecondes.