Compare várias bibliotecas de serialização de dados para C++.
Este projeto não possui dependências de bibliotecas de serialização externas. Todas as bibliotecas necessárias (boost, thrift etc.) são baixadas e construídas automaticamente, mas você precisa de espaço livre em disco suficiente (aproximadamente 2,3 G) para construir todos os componentes. Para construir este projeto você precisa de um compilador que suporte recursos do C++14. O projeto foi testado com compiladores Clang e 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
Os resultados a seguir foram obtidos executando 1.000.000 operações de serialização-desserialização 50 vezes e, em seguida, calculando a média dos resultados em um computador desktop típico com processador Intel Core i7 executando Ubuntu 16.04. As versões exatas das bibliotecas usadas são:
serializador | tamanho do objeto | média. tempo total |
---|---|---|
parcimônia-binário | 17017 | 1190.22 |
econômico-compacto | 13378 | 3474,32 |
protobuf | 16116 | 2312,78 |
impulsionar | 17470 | 1195.04 |
pacote de mensagens | 13402 | 2560,6 |
cereal | 17416 | 1052,46 |
Avro | 16384 | 4488.18 |
sim | 17416 | 302,7 |
yas-compacto | 13321 | 2063,34 |
Para capnproto e flatbuffers, uma vez que eles já armazenam dados em um formato "serializado" e a serialização significa basicamente obter um ponteiro para o armazenamento interno, medimos o ciclo completo de construção /serialização/desserialização. No caso de outras bibliotecas medimos o ciclo de serialização/desserialização da estrutura de dados já construída.
serializador | tamanho do objeto | média. tempo total |
---|---|---|
capnproto | 17768 | 400,98 |
buffers planos | 17632 | 491,5 |
Tamanho medido em bytes, tempo medido em milissegundos.