-
Notifications
You must be signed in to change notification settings - Fork 0
/
runbenchmark.sh
executable file
·87 lines (73 loc) · 2.24 KB
/
runbenchmark.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
ITERATIONS=100
PSQL=psql
td="$(dirname $0)"
echo "Running benchmark with 100 iterations per step" >&2
range() {
local i=1
local end=$1
while [ "$i" -le "$end" ]
do
echo $i
i=$((i+1))
done
}
# The next three generators produce test scripts that report lengths of
# - binary parsed data
# - original data (no parse)
# - normalized (parsed to text)
generate_parse_to_binary() {
local i
for i in $(range $ITERATIONS); do
echo "select Length(JsonAsBinary(doc::json)), docname from jsontest_source_big;"
done
}
generate_parse_null() {
local i
for i in $(range $ITERATIONS); do
echo "select Length(doc), docname from jsontest_source_big;"
done
}
generate_parse_normalize() {
local i
for i in $(range $ITERATIONS); do
echo "select Length(JsonNormalize(doc)), docname from jsontest_source_big;"
done
}
generate_serialize() {
local i
for i in $(range $ITERATIONS); do
echo "select Length(doc::text), docname from jsontest_json_big;"
done
}
generate_roundtrip() {
local i
for i in $(range $ITERATIONS); do
echo "select Length((doc::json)::text), docname from jsontest_source_big;"
done
}
# Load data
echo "Loading data..."
$td/gensamples.sh | $PSQL > /dev/null
echo "Data loaded."
# Report size statistics
echo "=== DOCUMENT SIZE STATISTICS ==="
echo '
select docname "Document Name", Length(doc) "Original Size",
Length(JsonAsBinary(doc::json)) "Binary Size",
Length(JsonNormalize(doc)) "Normalized Size",
((Length(JsonNormalize(doc)) - Length(JsonAsBinary(doc::json)))::double precision / Length(JsonNormalize(doc))::double precision)*100 "Percentage Savings"
from jsontest_source;
' | $PSQL
### Run tests
echo "=== TEST PARSE AND SERIALIZATION ===" >&2
echo "Null Parse:" >&2
generate_parse_null | time $PSQL > $td/results-null.txt
echo "Parse to Binary:" >&2
generate_parse_to_binary | time $PSQL > $td/results-parsebinary.txt
echo "Serialize from Binary:" >&2
generate_serialize | time $PSQL > $td/results-serialize.txt
echo "Normalize Text:" >&2
generate_parse_normalize | time $PSQL > $td/results-parsenormalize.txt
echo "Roundtrip (parse to binary and serialize):" >&2
generate_parse_normalize | time $PSQL > $td/results-parsenormalize.txt