-
-
Save jedisct1/896204 to your computer and use it in GitHub Desktop.
| * Results | |
| ruby json: 19,777,781 bytes | |
| ruby msgpack: 14,757,439 bytes | |
| php serialize(): 33,777,792 bytes | |
| php igbinary: 18,757,571 bytes | |
| php json_encode: 19,777,781 bytes | |
| msgpack vs json (MRI 1.9.2) speed: | |
| user system total real | |
| msgpack: | |
| 0.900000 0.040000 0.940000 ( 1.171771) | |
| json: | |
| 1.880000 0.130000 2.010000 ( 2.172833) | |
| * Source | |
| Ruby: | |
| require 'msgpack' | |
| require 'json' | |
| require 'benchmark' | |
| a = (0...1_000_000).group_by { |i| "k-#{i}" } | |
| Benchmark.bm do |x| | |
| x.report("msgpack:") { puts "size=" + MessagePack.pack(a).length.to_s } | |
| x.report("json:") { puts "size=" + a.to_json.length.to_s } | |
| end | |
| PHP: | |
| ini_alter('memory_limit', -1); | |
| $a = array(); | |
| for ($i = 0; $i < 1000000; $i++) { | |
| $a["k-$i"] = array($i); | |
| } | |
| echo 'serialize()d size=' . strlen(serialize($a)) . "\n"; | |
| echo 'igbinary_serialize()d size=' . strlen(igbinary_serialize($a)) . "\n"; | |
| echo 'json_encode()d size=' . strlen(json_encode($a)) . "\n"; | |
On our data sets msg_pack have 50% overhead over igbinary_serialize
strlen(igbinary_serialize($X->d()))
218869 218,869 0x3,56F5strlen(msgpack_pack($X->d()))
309118 309,118 0x4,B77Estrlen(json_encode($X->d()))
380856 380,856 0x5,CFB8
data - complex 3-4 level deep hash with strings and bigints
10+ years later, msgpack is over 50% smaller than php serialize (and best in the league too).
PHP Version 7.2.24-0ubuntu0.18.04.6
msgpack version: 2.0.3
igbinary version: 2.0.8
json version: 1.6.0
ini_alter('memory_limit', -1);
$a = array();
for ($i = 0; $i < 1000000; $i++) {
$a["k-$i"] = array($i);
}
echo 'serialize()d size=' . number_format(strlen(serialize($a))) . "\n";
echo 'igbinary_serialize()d size=' . number_format(strlen(igbinary_serialize($a))) . "\n";
echo 'msgpack_pack()d size=' . number_format(strlen(msgpack_pack($a))) . "\n";
echo 'json_encode()d size=' . number_format(strlen(json_encode($a))) . "\n";
Results:
Added elapsed time in microseconds - json serialize is way faster)
serialize()d size=33,777,792 (elapsed time = 0.46339988708496)
igbinary_serialize()d size=18,757,571 (elapsed time = 0.63907718658447)
msgpack_pack()d size=14,757,439 (elapsed time = 0.45030903816223)
json_encode()d size=19,777,781 (elapsed time = 0.15625810623169)
I did some benchmark in PHP (I know it is an old gist but it is the first on Google Search)
https://github.com/EFTEC/php-benchmarks#serializations
Conclusion: I am impressed with igbinary. 👍
Could you also add php+msgpack?