Compare varias bibliotecas de serialización de datos para C++.
Este proyecto no tiene dependencias de bibliotecas de serialización externas. Todas las bibliotecas necesarias (impulso, ahorro, etc.) se descargan y crean automáticamente, pero necesita suficiente espacio libre en el disco (aproximadamente 2,3 G) para construir todos los componentes. Para construir este proyecto necesita un compilador que admita funciones de C++14. El proyecto fue probado con los compiladores Clang y 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
Los siguientes resultados se obtuvieron ejecutando 1000000 operaciones de serialización-deserializar 50 veces y luego promediando los resultados en una computadora de escritorio típica con procesador Intel Core i7 que ejecuta Ubuntu 16.04. Las versiones exactas de las bibliotecas utilizadas son:
serializador | tamaño del objeto | promedio tiempo total |
---|---|---|
binario de ahorro | 17017 | 1190.22 |
compacto de segunda mano | 13378 | 3474.32 |
protobuf | 16116 | 2312.78 |
aumentar | 17470 | 1195.04 |
paquete de mensajes | 13402 | 2560.6 |
cereal | 17416 | 1052.46 |
avro | 16384 | 4488.18 |
sí | 17416 | 302.7 |
yas-compacto | 13321 | 2063.34 |
Para capnproto y flatbuffers, dado que ya almacenan datos en un formato "serializado" y la serialización básicamente significa obtener un puntero al almacenamiento interno, medimos el ciclo completo de compilación /serializar/deserializar. En el caso de otras bibliotecas, medimos el ciclo de serialización/deserializar de la estructura de datos ya construida.
serializador | tamaño del objeto | promedio tiempo total |
---|---|---|
capnproto | 17768 | 400.98 |
buffers planos | 17632 | 491,5 |
Tamaño medido en bytes, tiempo medido en milisegundos.