Sereal Comparison Graphs

tsee edited this page Sep 9, 2012 · 4 revisions
Clone this wiki locally

Here is a survey of how Sereal stands up against alternative serialization tools in Perl.

The code that generates these, including the data that they were run on can be found in the source code repository at Perl/shared/author_tools/bench.pl. You can run it yourself by building both Encoder and Decoder, then running from the Perl directory:

perl -Mblib=Decoder -Mblib=Encoder Encoder/author_tools/bench.pl --encoder --decoder

There are many flags that control parts of the behaviour of that script. Read the source to find out more.

Array Of Small Hashes With Relations

![Decoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20hashes%20with%20relations%20-%20Decoder%20performance%20per%20second.png)

![Encoded Output Sizes In Bytes] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20hashes%20with%20relations%20-%20Encoded%20output%20sizes%20in%20bytes.png)

![Encoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20hashes%20with%20relations%20-%20Encoder%20performance%20per%20second.png)

Array Of Small Objects With Relations

Same as the example before, but using objects in the place of unblessed hashes.

![Decoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20objects%20with%20relations%20-%20Decoder%20performance%20per%20second.png)

![Encoded Output Sizes In Bytes] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20objects%20with%20relations%20-%20Encoded%20output%20sizes%20in%20bytes.png)

![Encoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/array%20of%20small%20objects%20with%20relations%20-%20Encoder%20performance%20per%20second.png)

Empty Hash

Basically measuring start-up performance. Not very meaningful.

![Decoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/empty%20hash%20-%20Decoder%20performance%20per%20second.png)

![Encoded Output Sizes In Bytes] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/empty%20hash%20-%20Encoded%20output%20sizes%20in%20bytes.png)

![Encoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/empty%20hash%20-%20Encoder%20performance%20per%20second.png)

Large Data Structure

![Decoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/large%20data%20structure%20-%20Decoder%20performance%20per%20second.png)

![Encoded Output Sizes In Bytes] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/large%20data%20structure%20-%20Encoded%20output%20sizes%20in%20bytes.png)

![Encoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/large%20data%20structure%20-%20Encoder%20performance%20per%20second.png)

Small Hash

A small hash with three keys, an integer value, an array of three integers, and a Unicode string.

![Decoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/small%20hash%20-%20Decoder%20performance%20per%20second.png)

![Encoded Output Sizes In Bytes] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/small%20hash%20-%20Encoded%20output%20sizes%20in%20bytes.png)

![Encoder Performance Per Second] (https://raw.github.com/Sereal/Sereal/master/Perl/performance_diagrams/small%20hash%20-%20Encoder%20performance%20per%20second.png)