From 24613b4ac25da098ddf359b0d170c18fcae27c5a Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Sun, 16 Aug 2026 15:09:11 +0700 Subject: [PATCH 1/2] update: parseable version upgrade to v3.0.0 publish new results for c6a.4xlarge add script `download-hits-json` in lib directory fix data-size script to look for data directory after ingestion time range to pick from stream info api --- lib/download-hits-json | 13 +++++ parseable/benchmark.sh | 1 + parseable/data-size | 2 +- parseable/install | 2 +- parseable/load | 10 +++- parseable/query | 48 ++++++++++++---- parseable/results/20260811/c6a.4xlarge.json | 61 +++++++++++++++++++++ 7 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 lib/download-hits-json create mode 100644 parseable/results/20260811/c6a.4xlarge.json diff --git a/lib/download-hits-json b/lib/download-hits-json new file mode 100644 index 0000000000..5ae1404b51 --- /dev/null +++ b/lib/download-hits-json @@ -0,0 +1,13 @@ +#!/bin/bash +# Standalone version: the ClickBench Playground bakes a pre-decompressed +# hits.json into /opt/clickbench/datasets_ro and symlinks to it here. Outside +# the Playground that path doesn't exist, and parseable/load already falls +# back to downloading+decompressing hits.json.gz itself, so this script is a +# no-op there. Kept as a stub only so bench_download() has something to call. +set -e +if [ -d /opt/clickbench/datasets_ro ]; then + dir="${1:-.}" + mkdir -p "$dir" + cd "$dir" + ln -sf /opt/clickbench/datasets_ro/hits.json hits.json +fi \ No newline at end of file diff --git a/parseable/benchmark.sh b/parseable/benchmark.sh index 535701276c..861bf8055d 100755 --- a/parseable/benchmark.sh +++ b/parseable/benchmark.sh @@ -1,3 +1,4 @@ #!/bin/bash export BENCH_DOWNLOAD_SCRIPT="download-hits-json" +chmod +x ../lib/download-hits-json exec ../lib/benchmark-common.sh diff --git a/parseable/data-size b/parseable/data-size index 559b25d677..134b52d960 100755 --- a/parseable/data-size +++ b/parseable/data-size @@ -1,4 +1,4 @@ #!/bin/bash set -eu -du -bcs local-store | grep total | awk '{print $1}' +du -bcs data | grep total | awk '{print $1}' diff --git a/parseable/install b/parseable/install index 2d61f7ead5..3d39a979d7 100755 --- a/parseable/install +++ b/parseable/install @@ -13,7 +13,7 @@ if [ ! -x ./parseable ]; then # v2.7.2 fixes the inference; verified locally end-to-end against # the bundled static_schema.json and hits.json. wget --continue --progress=dot:giga \ - https://github.com/parseablehq/parseable/releases/download/v2.7.2/Parseable_OSS_x86_64-unknown-linux-gnu + https://github.com/parseablehq/parseable/releases/download/v3.0.0/Parseable_OSS_x86_64-unknown-linux-gnu mv Parseable_OSS_x86_64-unknown-linux-gnu parseable chmod +x parseable fi diff --git a/parseable/load b/parseable/load index 5cf60065f3..715f786f58 100755 --- a/parseable/load +++ b/parseable/load @@ -51,8 +51,14 @@ fi # subsequent chunk fails. 3 × 1000 lines is ~4x lower peak pressure # and empirically clears without 408s. curl --retry survives short # stalls so a briefly-saturated parseable doesn't fail the load. -LINES_PER_CHUNK=1000 -INGEST_JOBS=3 +NUM_CORES=$(nproc) +if [ "$NUM_CORES" -ge 190 ]; then + LINES_PER_CHUNK=2500 + INGEST_JOBS=20 +else + LINES_PER_CHUNK=1000 + INGEST_JOBS=3 +fi pv hits.json | parallel --pipe -N$LINES_PER_CHUNK --block 10M \ --jobs "$INGEST_JOBS" --halt-on-error 0 ' awk "BEGIN{print \"[\"} NR>1{print prev \",\"} {prev=\$0} END{if (prev) print prev; print \"]\"}" | diff --git a/parseable/query b/parseable/query index 34df5b8085..e468aeea20 100755 --- a/parseable/query +++ b/parseable/query @@ -7,16 +7,44 @@ set -e query=$(cat) -# Parseable filters every query by [startTime, endTime] against the -# row's ingest timestamp. The original benchmark used today's calendar -# day, which only works if the dataset was loaded today. In the -# playground the data is ingested during initial provisioning and -# then frozen into a snapshot, so "today" from the query script's -# point of view drifts past the load day and every row falls outside -# the window → all queries return zero. Use a wide window that -# covers any plausible load + query date. -START_TIME="2000-01-01T00:00:00.000Z" -END_TIME="2099-12-31T23:59:00.000Z" +# Derive Parseable's mandatory query window from the stream itself. Keep a +# five-minute margin so events exactly at either reported boundary are not +# lost to timestamp precision or boundary semantics. This lookup happens +# before the query timer starts. +stream_info=$(curl -sS --fail-with-body \ + -u "admin:admin" 'http://localhost:8000/api/v1/logstream/hits/info') + +mapfile -t time_range < <( + printf '%s' "$stream_info" | python3 -c ' +import json +import sys +from datetime import datetime, timedelta, timezone + +info = json.load(sys.stdin) + +def parse_timestamp(field): + value = info.get(field) + if not value: + raise ValueError(f"stream info has no {field}") + return datetime.fromisoformat(value.replace("Z", "+00:00")).astimezone(timezone.utc) + +def format_timestamp(value): + return value.isoformat(timespec="milliseconds").replace("+00:00", "Z") + +print(format_timestamp(parse_timestamp("firstEventAt") - timedelta(minutes=5))) +print(format_timestamp(parse_timestamp("latestEventAt") + timedelta(minutes=5))) +' +) + +if [ "${#time_range[@]}" -ne 2 ]; then + echo "could not derive query time range from hits stream info" >&2 + exit 1 +fi + +START_TIME=${time_range[0]} +END_TIME=${time_range[1]} + +echo "==> query time range: $START_TIME .. $END_TIME" >&2 # JSON-escape quotes inside the query. escaped=$(printf '%s' "$query" | sed 's/"/\\"/g') diff --git a/parseable/results/20260811/c6a.4xlarge.json b/parseable/results/20260811/c6a.4xlarge.json new file mode 100644 index 0000000000..9ae7a5beb8 --- /dev/null +++ b/parseable/results/20260811/c6a.4xlarge.json @@ -0,0 +1,61 @@ +{ + "system": "Parseable (Parquet, partitioned)", + "date": "2026-08-11", + "machine": "c6a.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "comment": "v3.0.0 (356cc4)", + + "tags": ["Rust", "column-oriented", "lukewarm-cold-run"], + + "load_time": 0, + "data_size": 14025329027, + + "result": [ +[0.493542,0.067776,0.071022], +[0.428251,0.063338,0.056473], +[0.678710,0.105489,0.109963], +[1.390201,0.101248,0.102751], +[1.476701,0.398862,0.407181], +[1.736728,0.558338,0.557891], +[0.434044,0.038418,0.038138], +[0.456126,0.074693,0.070224], +[1.849412,0.564605,0.557141], +[2.371802,0.732533,0.727236], +[1.504355,0.232181,0.228262], +[1.524348,0.253782,0.249339], +[1.775986,0.586283,0.595995], +[2.982766,0.926486,0.906219], +[1.819304,0.634304,0.633007], +[1.512708,0.475662,0.456854], +[2.869507,1.095904,1.067743], +[2.852487,1.058142,1.066542], +[4.704672,1.915833,1.972501], +[1.125664,0.067948,0.067382], +[7.553225,1.054315,1.054244], +[8.858243,1.469912,1.543574], +[12.852504,2.816205,2.745961], +[9.418178,0.533880,0.432884], +[2.869450,0.175672,0.159719], +[1.652646,0.382153,0.380070], +[3.270628,0.262695,0.258430], +[7.627400,1.598220,1.585260], +[10.078666,9.275044,8.626704], +[0.925878,0.476272,0.485603], +[3.011216,0.646095,0.677166], +[5.923695,0.722890,0.714952], +[4.774500,1.938017,1.927156], +[8.018286,2.648875,2.602161], +[8.062629,2.594357,2.619039], +[1.497635,0.755363,0.734848], +[0.412620,0.105401,0.107315], +[0.341053,0.066914,0.065614], +[0.358669,0.064785,0.057259], +[0.525337,0.173516,0.174269], +[0.315910,0.038849,0.034165], +[0.307878,0.034725,0.033291], +[0.306508,0.031363,0.032386] +] +} From cae7507e08a4b0f705fed54a0b79111e6fe624ea Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 03:25:17 +0000 Subject: [PATCH 2/2] Add benchmark results for parseable (c6a.4xlarge) --- parseable/results/20260811/c6a.4xlarge.json | 61 --------------------- parseable/results/20260818/c6a.4xlarge.json | 60 ++++++++++++++++++++ 2 files changed, 60 insertions(+), 61 deletions(-) delete mode 100644 parseable/results/20260811/c6a.4xlarge.json create mode 100644 parseable/results/20260818/c6a.4xlarge.json diff --git a/parseable/results/20260811/c6a.4xlarge.json b/parseable/results/20260811/c6a.4xlarge.json deleted file mode 100644 index 9ae7a5beb8..0000000000 --- a/parseable/results/20260811/c6a.4xlarge.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "system": "Parseable (Parquet, partitioned)", - "date": "2026-08-11", - "machine": "c6a.4xlarge", - "cluster_size": 1, - "proprietary": "no", - "hardware": "cpu", - "tuned": "no", - "comment": "v3.0.0 (356cc4)", - - "tags": ["Rust", "column-oriented", "lukewarm-cold-run"], - - "load_time": 0, - "data_size": 14025329027, - - "result": [ -[0.493542,0.067776,0.071022], -[0.428251,0.063338,0.056473], -[0.678710,0.105489,0.109963], -[1.390201,0.101248,0.102751], -[1.476701,0.398862,0.407181], -[1.736728,0.558338,0.557891], -[0.434044,0.038418,0.038138], -[0.456126,0.074693,0.070224], -[1.849412,0.564605,0.557141], -[2.371802,0.732533,0.727236], -[1.504355,0.232181,0.228262], -[1.524348,0.253782,0.249339], -[1.775986,0.586283,0.595995], -[2.982766,0.926486,0.906219], -[1.819304,0.634304,0.633007], -[1.512708,0.475662,0.456854], -[2.869507,1.095904,1.067743], -[2.852487,1.058142,1.066542], -[4.704672,1.915833,1.972501], -[1.125664,0.067948,0.067382], -[7.553225,1.054315,1.054244], -[8.858243,1.469912,1.543574], -[12.852504,2.816205,2.745961], -[9.418178,0.533880,0.432884], -[2.869450,0.175672,0.159719], -[1.652646,0.382153,0.380070], -[3.270628,0.262695,0.258430], -[7.627400,1.598220,1.585260], -[10.078666,9.275044,8.626704], -[0.925878,0.476272,0.485603], -[3.011216,0.646095,0.677166], -[5.923695,0.722890,0.714952], -[4.774500,1.938017,1.927156], -[8.018286,2.648875,2.602161], -[8.062629,2.594357,2.619039], -[1.497635,0.755363,0.734848], -[0.412620,0.105401,0.107315], -[0.341053,0.066914,0.065614], -[0.358669,0.064785,0.057259], -[0.525337,0.173516,0.174269], -[0.315910,0.038849,0.034165], -[0.307878,0.034725,0.033291], -[0.306508,0.031363,0.032386] -] -} diff --git a/parseable/results/20260818/c6a.4xlarge.json b/parseable/results/20260818/c6a.4xlarge.json new file mode 100644 index 0000000000..a9f24c92af --- /dev/null +++ b/parseable/results/20260818/c6a.4xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "Parseable (Parquet, partitioned)", + "date": "2026-08-18", + "machine": "c6a.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Rust","column-oriented","lukewarm-cold-run"], + "load_time": 4931, + "data_size": 14023558981, + "concurrent_qps": 0.88, + "concurrent_error_ratio": 0, + "result": [ + [0.477, 0.068, 0.065], + [0.321, 0.06, 0.059], + [0.79, 0.106, 0.118], + [1.036, 0.118, 0.112], + [1.148, 0.513, 0.509], + [1.569, 0.694, 0.72], + [0.313, 0.048, 0.042], + [0.353, 0.074, 0.076], + [1.626, 0.83, 0.861], + [2.234, 0.927, 0.954], + [1.317, 0.251, 0.242], + [1.35, 0.274, 0.276], + [1.66, 0.798, 0.795], + [3.182, 1.38, 1.373], + [1.651, 0.908, 0.946], + [1.324, 0.615, 0.673], + [3.065, 1.552, 1.539], + [2.96, 1.538, 1.536], + [5.412, 2.636, 2.649], + [0.672, 0.088, 0.09], + [9.009, 2, 1.995], + [10.67, 2.762, 2.698], + [15.419, 4.219, 4.185], + [13.271, 1.074, 0.873], + [3.111, 0.231, 0.255], + [1.422, 0.442, 0.428], + [3.458, 0.364, 0.324], + [9.095, 2.894, 2.867], + [9.497, 8.115, 8.389], + [0.872, 0.519, 0.5], + [3.284, 0.854, 0.884], + [6.862, 1.068, 1.086], + [5.168, 3.15, 3.153], + [9.669, 4.369, 4.466], + [9.658, 4.382, 4.402], + [1.489, 1.222, 1.184], + [0.584, 0.109, 0.114], + [0.514, 0.081, 0.071], + [0.541, 0.056, 0.057], + [0.703, 0.191, 0.189], + [0.492, 0.04, 0.038], + [0.482, 0.037, 0.035], + [0.476, 0.033, 0.031] +] + } + \ No newline at end of file