قارن بين مكتبات تسلسل البيانات المختلفة لـ C++.
لا يحتوي هذا المشروع على أي تبعيات لمكتبات التسلسل الخارجية. يتم تنزيل جميع المكتبات المطلوبة (التعزيز والتوفير وما إلى ذلك) وإنشائها تلقائيًا، ولكنك تحتاج إلى مساحة قرص حرة كافية (حوالي 2.3 جيجا بايت) لإنشاء جميع المكونات. لإنشاء هذا المشروع، تحتاج إلى مترجم يدعم ميزات C++ 14. تم اختبار المشروع باستخدام مترجمي Clang وGC.
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 |
com.msgpack | 13402 | 2560.6 |
رقائق الذرة | 17416 | 1052.46 |
أفرو | 16384 | 4488.18 |
ياس | 17416 | 302.7 |
ياس المدمجة | 13321 | 2063.34 |
بالنسبة إلى capnproto وflatbuffers نظرًا لأنهما يقومان بالفعل بتخزين البيانات في نموذج "متسلسل" ويعني التسلسل بشكل أساسي الحصول على مؤشر إلى وحدة التخزين الداخلية، فإننا نقيس دورة البناء /التسلسل/إلغاء التسلسل الكاملة. في حالة المكتبات الأخرى، نقوم بقياس دورة التسلسل/إلغاء التسلسل لبنية البيانات المبنية بالفعل.
متسلسل | حجم الكائن | متوسط الوقت الإجمالي |
---|---|---|
com.capnproto | 17768 | 400.98 |
مخازن مسطحة | 17632 | 491.5 |
الحجم يقاس بالبايت، والوقت يقاس بالمللي ثانية.