NAME

Benchmark::Serialize - Benchmarks of serialization modules

SYNOPSIS

use Benchmark::Serialise qw(cmpthese);

        my $structure = {
            array  => [ 'a' .. 'j' ],
            hash   => { 'a' .. 'z' ]
            string => 'x' x 200,
        };

        cmpthese( -5, $structure, qw(:core :json :yaml) );

DESCRIPTION

This module encapsulates some basic benchmarks to help you choose a module for serializing data. Note that using this module is only a part of chosing a serialization format. Other factors than the benchmarked might be of relevance!

Included is support for 24 different serialization modules. Also supported is the Data::Serializer wrapper providing a unified interface for serialization and some extra features. Benchmarking of specialized modules made with Protocol Buffers for Perl/XS (protobuf-perlxs) is also available.

See the in-module documentation for more information.

RESULTS

The following is the result from benchmarking the serialization modules included in the core Perl distribution (Storable and Data::Dumper) and a couple of well-performing other modules. The 'StructureXS' module is an XS bases Google ProtocolBuffers class.

The tested datastructure is available from http://github.com/pmakholm/benchmark-serialize-perl/blob/e6263840439b7246c2b87a91b8db489c6eb80400/benchmarks/jvm-serializers/structure.pl

Modules

Data::Dumper      :    2.128 Identical
Data::MessagePack :     0.34 Identical
JSON::XS          :      2.3 Identical
Storable          :     2.21 Identical
StructureXS       :      1.0 Identical

Sizes

                  bytes StructureXS Data::MessagePack JSON::XS Storable Data::Dumper
StructureXS         245          --              -36%     -48%     -53%         -82%
Data::MessagePack   380         55%                --     -19%     -26%         -72%
JSON::XS            468         91%               23%       --      -9%         -65%
Storable            516        111%               36%      10%       --         -62%
Data::Dumper       1354        453%              256%     189%     162%           --

Deflate (perl -> serialized)

                      Rate Data::Dumper Storable StructureXS JSON::XS Data::MessagePack
Data::Dumper        8812/s           --     -59%        -85%     -92%              -92%
Storable           21354/s         142%       --        -63%     -80%              -80%
StructureXS        57961/s         558%     171%          --     -45%              -46%
JSON::XS          105411/s        1096%     394%         82%       --               -2%
Data::MessagePack 107789/s        1123%     405%         86%       2%                --

Inflate (serialized -> perl)

                     Rate Data::Dumper StructureXS Data::MessagePack Storable JSON::XS
Data::Dumper      11395/s           --        -67%              -78%     -79%     -83%
StructureXS       34600/s         204%          --              -32%     -36%     -50%
Data::MessagePack 50777/s         346%         47%                --      -6%     -26%
Storable          53894/s         373%         56%                6%       --     -21%
JSON::XS          68620/s         502%         98%               35%      27%       --

Roundtrip

                     Rate Data::Dumper Storable StructureXS Data::MessagePack JSON::XS
Data::Dumper       4830/s           --     -61%        -73%              -84%     -85%
Storable          12401/s         157%       --        -31%              -58%     -62%
StructureXS       18101/s         275%      46%          --              -39%     -44%
Data::MessagePack 29805/s         517%     140%         65%                --      -9%
JSON::XS          32582/s         575%     163%         80%                9%       --

AUTHOR

Peter Makholm, "<peter at makholm.net>"

BUGS

Please report any bugs or feature requests to "bug-benchmark-serialize at rt.cpan.org", or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Benchmark-Serialize>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

ACKNOWLEDGEMENTS

This module started out as a script written by Christian Hansen, see http://idisk.mac.com/christian.hansen/Public/perl/serialize.pl

COPYRIGHT & LICENSE

Copyright 2009 Peter Makholm.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.