Skip to content

X Experimental Benchmarks

pkoppstein edited this page Feb 22, 2018 · 24 revisions

Experimental Benchmarks Page

This page describes some benchmarks and gives some representative timings and "maxrss" (maximum resident set size) statistics.

Each "test" consists of a combination of input data (possibly null) and a program, normally a jq program. The first test however involves the md5 program, first so that the md5 value of a particular JSON file can be shown, and to give a reference point for comparison.

Each combination of input data and program is assigned a number, given in the form (N); for example, the first "test" is:

(1) md5 jeopardy.json

This page is organized as follows:

  • the SOURCES sections has one subsection each for DATA and for PROGRAMS;

  • the RESULTS section is organized into GROUPS so that the timings within each group are roughly comparable. Groups are identified by a string such as "Mac OS X (High Sierra) 3GHz 16GB RAM"

In the RESULTS section, the version of jq should be specified according to its tag, e.g. jq-1.5, jq-1.6rc1

SOURCES

SOURCES: DATA

"jeopardy.json" (aka JEOPARDY_QUESTIONS1.json)

Gzipped:

SOURCES: PROGRAMS

"schema.jq"

"testzip.jq"

def zip(headers):
  . headers as $headers
  | [$headers, .] | transpose | map({(.[0]): .[1]}) | add ;

def testzip(n):
  [range(0;n)] as $row
  | $row | zip( $row|map(tostring) ) ;

testzip(1000000) | length

RESULTS

GROUP: "Mac OS X (High Sierra) 3GHz 16GB RAM"

(1) md5 jeopardy.json

MD5 (jeopardy.json) = 2075398fa049b1c00223b2279ca5281d
user	0m0.126s
sys	0m0.025s
maxrss  11341824

(2) length jeopardy.json

jq-1.5 length jeopardy.json
216930
user	0m1.144s
sys	0m0.112s
maxrss  223440896

(3) schema.jq jeopardy.json

jq-1.5 -f schema.jq jeopardy.json > jeopardy.schema.json
user 7.10s
sys  0.13s
maxrss 223457280

(3) schema.jq jeopardy.json

jq-1.6rc1 -f schema.jq jeopardy.json > jeopardy.schema.json
user   8.26s
sys    0.13s
maxrss 223526912

(4) null testzip.jq

jq-1.5 -n testzip.jq
1000000
user 6.11s
sys  0.35s
maxrss 711286784

(5) . jeopardy.json

jq-1.5 . jeopardy.json | wc -l
1952372
user        4.69s
sys         0.12s
maxrss 223350784

(6) . jeopardy.json

jq-1.5 --stream 'select(length==2)' jeopardy.json | wc -l
10629570
user	0m8.901s
sys	0m0.087s
maxrss 1359872

APPENDIX 1: Output

"jeopardy.schema.json"

{
  "air_date": "string",
  "answer": "string",
  "category": "string",
  "question": "string",
  "round": "string",
  "show_number": "string",
  "value": "string"
}

FOOTNOTES

[*1] If you prefer to use schema.jq as it exists on the web, here are two alternative methods that can be considered:

(a) jq -f <(cat schema.jq; echo schema) ... (b) jq 'include "schema"; schema' ...

For further details about using include, see the jq documentation.

Clone this wiki locally