Сравните различные библиотеки сериализации данных для C++.
Этот проект не имеет каких-либо зависимостей от внешних библиотек сериализации. Все необходимые библиотеки (boost, thrift и т. д.) загружаются и собираются автоматически, но для сборки всех компонентов вам потребуется достаточно свободного места на диске (около 2,3 ГБ). Для сборки этого проекта вам понадобится компилятор, поддерживающий функции C++14. Проект тестировался с компиляторами Clang и 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
Следующие результаты были получены при выполнении 1000000 операций сериализации-десериализации 50 раз, а затем усреднении результатов на типичном настольном компьютере с процессором Intel Core i7 под управлением Ubuntu 16.04. Точные версии используемых библиотек:
сериализатор | размер объекта | средн. общее время |
---|---|---|
бережливый бинарный | 17017 | 1190,22 |
эконом-компактный | 13378 | 3474,32 |
протобуф | 16116 | 2312,78 |
способствовать росту | 17470 | 1195.04 |
пакет сообщений | 13402 | 2560,6 |
злак | 17416 | 1052,46 |
авро | 16384 | 4488,18 |
да | 17416 | 302,7 |
Яс-компактный | 13321 | 2063,34 |
Для capnproto и плоских буферов, поскольку они уже хранят данные в «сериализованной» форме, а сериализация в основном означает получение указателя на внутреннее хранилище, мы измеряем полный цикл сборки /сериализации/десериализации. В случае других библиотек мы измеряем цикл сериализации/десериализации уже построенной структуры данных.
сериализатор | размер объекта | средн. общее время |
---|---|---|
капнпрото | 17768 | 400,98 |
плоские буферы | 17632 | 491,5 |
Размер измеряется в байтах, время измеряется в миллисекундах.