summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md236
1 files changed, 236 insertions, 0 deletions
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
+