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.gitcd cpp-serializersmkdir buildcd buildcmake -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.