From 625269764ebbe8d0b566e6ef5fc26a6bccd4181d Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sun, 13 Jul 2014 14:04:45 +0200 Subject: init --- README.md | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 README.md (limited to 'README.md') diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa41339 --- /dev/null +++ b/README.md @@ -0,0 +1,236 @@ +Serializer Benchmark +==================== + +Comparing parsing speed/memory usage of all C++ JSON libs I could find. Also including two msgpack implementations (C++/ruby). +Goal is to output data.edges.last.rule.substr(1, 4). +Data is fairly large and complex object (a hypergraph representation) with a lot of different types, e.g. strings (ASCII), ints, floats, arrays +and sub-objects. +Note that the comparison is unfair for some parsers, as they just do SAX-style parsing and do not actually fill objects +with data (e.g. the cdec parser). + +* cdec-json-parser: ripped out of [1]. +* gason: git clone https://github.com/vivkin/gason.git +* JsonBox: git clone https://github.com/anhero/JsonBox.git +* jsoncpp: git clone https://github.com/open-source-parsers/jsoncpp.git +* json-cpp: wget "https://raw.githubusercontent.com/ascheglov/json-cpp/master/single_include/json-cpp.hpp" +* jsonxx: git clone https://github.com/hjiang/jsonxx.git +* libjson: wget "http://downloads.sourceforge.net/project/libjson/libjson_7.6.1.zip?r=&ts=1405248411&use_mirror=heanet" +* MicroJSON: wget http://grigory.info/distfiles/MicroJSON-0.3.2.tar.bz2 +* msgpack-c: git clone https://github.com/msgpack/msgpack-c.git +* msgpack-ruby: gem install msgpack +* nosjob: go to [2] and figure out how to download a tarball +* picojson: git clone https://github.com/kazuho/picojson.git +* rapidjson: git clone https://github.com/miloyip/rapidjson.git +* sajson: git clone https://github.com/chadaustin/sajson.git + +You'll also need root privileges to clear the disk caches. Assumes these scripts [3] +are in the PATH. + +Versions: +--------- +* cdec-json-parser: SHA-1 d124d4aaa78b52b46f7ac8d7306be342d3405124 +* gason: SHA-1 ede29fc5f0de8e47fd82c09f2f98123d2c867f28 +* JsonBox: SHA-1 fcb82ebae41dffb90d32a49ac236d1608d9a67ee +* jsoncpp: SHA-1 655a9db0cc62394e81d3074a98c7191fbfc00259 +* json-cpp: SHA-1 170121e2dc099895064305e38bfb25d90a807ce3 +* libjson: version 7.6.1 +* MicroJSON: version 0.3.2 +* msgpack-c: SHA-1 197ed8c983a70d5892bf73dcd1a352bf8e2588df +* msgpack-ruby: version 0.5.8 +* nosjob: SHA-1 e1d67401fcda6e05a536272532bdb9770bec27e8 +* picojson: SHA-1 5e71db9bec7f22a041cd251c6d6d67e954396d5d +* rapidjson: SHA-1 63d054349ab56d278060cd3373e76a6933cf194a +* sajson: SHA-1 003988269f1774dfb184e1864f2f4e654965581e + + +[1] https://github.com/redpony/cdec/tree/master/decoder +[2] http://fossil.wanderinghorse.net/repos/nosjob/index.cgi/index +[3] https://github.com/pks/scripts + + +Results +======= + +On my machine (Lenovo X61s) which has an SSD: +Linux x 3.12.23 #1 SMP PREEMPT Fri Jul 4 15:09:43 CEST 2014 x86_64 Intel(R) Core(TM)2 Duo CPU L7500 @ 1.60GHz GenuineIntel GNU/Linux + +Spoiler: sajson and rapidjson are the fastest JSON parsers -- but msgpack is even faster. + +JSON parsing benchmark +---------------------- + REAPEAT=10 + +[test_cdec_json_parser] +data/1020.json: 8.81 s +data/1570.json: 3.07 s +data/1391.json: 1.99 s +data/429.json: 0.6 s +data/2002.json: 0.32 s +data/1889.json: 0.07 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 1.84 s + memory: 1 m + +[test_gason] +data/1020.json: 4.34 s +data/1570.json: 1.52 s +data/1391.json: 1.05 s +data/429.json: 0.29 s +data/2002.json: 0.16 s +data/1889.json: 0.03 s +data/1495.json: 0.01 s +data/748.json: 0.01 s +--- +overall: 0.91 s + memory: 389 m + +[test_JsonBox] +data/1020.json: 36.15 s +data/1570.json: 11.91 s +data/1391.json: 8.25 s +data/429.json: 2.3 s +data/2002.json: 1.21 s +data/1889.json: 0.24 s +data/1495.json: 0.02 s +data/748.json: 0.0 s +--- +overall: 7.42 s + memory: 901 m + +[test_jsoncpp] +data/1020.json: 9.59 s +data/1570.json: 3.32 s +data/1391.json: 2.19 s +data/429.json: 0.64 s +data/2002.json: 0.34 s +data/1889.json: 0.07 s +data/1495.json: 0.01 s +data/748.json: 0.01 s +--- +overall: 2.0 s + memory: 804 m + +[test_json-cpp] +data/1020.json: 4.32 s +data/1570.json: 1.44 s +data/1391.json: 0.99 s +data/429.json: 0.28 s +data/2002.json: 0.15 s +data/1889.json: 0.03 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 0.89 s + memory: 263 m + +[test_jsonxx] +data/1020.json: 36.85 s +data/1570.json: 12.86 s +data/1391.json: 8.36 s +data/429.json: 2.4 s +data/2002.json: 1.29 s +data/1889.json: 0.26 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 7.66 s + memory: 1440 m + +[test_libjson] +data/1020.json: 13.09 s +data/1570.json: 4.51 s +data/1391.json: 3.0 s +data/429.json: 0.86 s +data/2002.json: 0.46 s +data/1889.json: 0.09 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 2.72 s + memory: 1649 m + +[test_nosjob] +data/1020.json: 17.64 s +data/1570.json: 6.18 s +data/1391.json: 4.09 s +data/429.json: 1.16 s +data/2002.json: 0.62 s +data/1889.json: 0.13 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 3.68 s + memory: 931 m + +[test_picojson] +data/1020.json: 17.35 s +data/1570.json: 5.51 s +data/1391.json: 3.97 s +data/429.json: 1.07 s +data/2002.json: 0.55 s +data/1889.json: 0.11 s +data/1495.json: 0.01 s +data/748.json: 0.01 s +--- +overall: 3.53 s + memory: 1049 m + +[test_rapidjson] +data/1020.json: 3.27 s +data/1570.json: 1.08 s +data/1391.json: 0.75 s +data/429.json: 0.21 s +data/2002.json: 0.11 s +data/1889.json: 0.03 s +data/1495.json: 0.01 s +data/748.json: 0.0 s +--- +overall: 0.67 s + memory: 415 m + +[test_sajson] +data/1020.json: 2.94 s +data/1570.json: 0.97 s +data/1391.json: 0.66 s +data/429.json: 0.19 s +data/2002.json: 0.1 s +data/1889.json: 0.02 s +data/1495.json: 0.0 s +data/748.json: 0.0 s +--- +overall: 0.6 s + memory: 293 m + + +MSGPACK parsing benchmark +------------------------- + REAPEAT=10 + +[test_msgpack] +data/1020.pak: 2.2 s +data/1570.pak: 0.8 s +data/1391.pak: 0.5 s +data/429.pak: 0.15 s +data/2002.pak: 0.09 s +data/1889.pak: 0.02 s +data/1495.pak: 0.0 s +data/748.pak: 0.0 s +--- +overall: 0.47 s + memory: 451 m + +[test_msgpack_ruby] +data/1020.pak: 1.91 s +data/1570.pak: 0.76 s +data/1391.pak: 0.52 s +data/429.pak: 0.23 s +data/2002.pak: 0.19 s +data/1889.pak: 0.14 s +data/1495.pak: 0.13 s +data/748.pak: 0.13 s +--- +overall: 0.5 s + memory: 216 m + -- cgit v1.2.3