From 6552027a2f5ec7bb20097d808741a3ee4cacc6e5 Mon Sep 17 00:00:00 2001 From: Dongdong Yang Date: Thu, 14 May 2026 19:23:27 +0800 Subject: [PATCH 1/8] Update ZigHouse - Refresh c6i.4xlarge result with v0.2.0-clickbench binary - Bump install to v0.2.0-clickbench (SHA256 5c30c8e3...) - Add generic-smoke.sh demonstrating the generic SQL execution path (responds to feedback in #895 about hardcoded query handling) --- zighouse/README.md | 9 +- zighouse/generic-smoke.sh | 36 +++ zighouse/install | 4 +- zighouse/results/20260511/apple-m4-16gb.json | 57 +++++ zighouse/results/20260511/c6i.4xlarge.json | 57 +++++ zighouse/results/20260514/c6i.4xlarge.json | 235 +++++++++++++++++++ zighouse/run.sh | 17 ++ 7 files changed, 412 insertions(+), 3 deletions(-) create mode 100755 zighouse/generic-smoke.sh create mode 100644 zighouse/results/20260511/apple-m4-16gb.json create mode 100644 zighouse/results/20260511/c6i.4xlarge.json create mode 100644 zighouse/results/20260514/c6i.4xlarge.json create mode 100755 zighouse/run.sh diff --git a/zighouse/README.md b/zighouse/README.md index e8f5ebe430..f2bca6fc9d 100644 --- a/zighouse/README.md +++ b/zighouse/README.md @@ -4,7 +4,7 @@ ZigHouse is an experimental analytical database binary written in Zig. This ClickBench entry uses the published Linux x86_64 benchmark binary from: -https://github.com/donge/zighouse/releases/tag/v0.1.0-clickbench +https://github.com/donge/zighouse/releases/tag/v0.2.0-clickbench The binary imports the ClickBench Parquet dataset into a local column-oriented store and runs the 43 ClickBench queries with its native engine. @@ -18,6 +18,13 @@ From this directory inside the ClickBench repository: The benchmark script downloads `hits.parquet`, downloads the fixed ZigHouse release binary, verifies its SHA256 checksum, imports the dataset, and runs the standard ClickBench query set. +## Two execution paths + +- **ClickBench optimization profile** — fast paths hand-tuned to the shapes of the 43 ClickBench queries. Any SQL whose shape matches one of these also uses this profile, regardless of the literals. +- **Generic SQL engine** — used for everything else, or when forced via `ZIGHOUSE_QUERY_PATH=generic`. `compare` mode runs both paths and checks byte-identical output. + +`generic-smoke.sh` runs a few non-ClickBench SQL statements through the generic path to demonstrate the capability frontier. + ## Notes The included AWS result was produced on `c6i.4xlarge` in AWS China. `c6a.4xlarge` was not available in the AWS China regions used for this run. diff --git a/zighouse/generic-smoke.sh b/zighouse/generic-smoke.sh new file mode 100755 index 0000000000..1a10c2f27f --- /dev/null +++ b/zighouse/generic-smoke.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Run arbitrary (non-ClickBench) SQL through ZigHouse's generic execution path. +# +# ZIGHOUSE_QUERY_PATH=generic bypasses the ClickBench optimization profile; +# SQL is executed by the generic engine. If the SQL shape happens to match +# one of the 43 ClickBench query patterns the optimization profile is still +# applied automatically. +# +# Run from this directory after benchmark.sh has imported the dataset: +# +# ./generic-smoke.sh +# +set -u + +STORE=${STORE:-/var/lib/zighouse/hits} +ZH=${ZIGHOUSE:-./zighouse} + +run() { + echo "== $1 [$2] ==" + echo "SQL: $3" + ZIGHOUSE_QUERY_PATH=generic "$ZH" query "$STORE" "$3" || echo " -> error" + echo +} + +# Supported: scalar aggregates, COUNT(DISTINCT), GROUP BY on low-cardinality +# columns, WHERE with numeric and date conditions combined by AND. +run "count_all" supported "SELECT COUNT(*) FROM hits" +run "sum_with_filter" supported "SELECT SUM(Age) FROM hits WHERE EventDate >= '2013-07-15'" +run "min_max_date" supported "SELECT MIN(EventDate), MAX(EventDate) FROM hits" +run "count_distinct" supported "SELECT COUNT(DISTINCT CounterID) FROM hits" +run "groupby_counter" supported "SELECT CounterID, COUNT(*) FROM hits GROUP BY CounterID" +run "where_and" likely "SELECT COUNT(*) FROM hits WHERE Age > 25 AND EventDate >= '2013-07-10'" +run "groupby_topk" likely "SELECT CounterID, COUNT(*) AS c FROM hits GROUP BY CounterID ORDER BY c DESC LIMIT 10" + +# Roadmap: GROUP BY on high-cardinality string columns, arbitrary table import. +run "groupby_url_topk" roadmap "SELECT URL, COUNT(*) FROM hits GROUP BY URL ORDER BY COUNT(*) DESC LIMIT 10" diff --git a/zighouse/install b/zighouse/install index a709c847a7..ce7b0bf5fc 100755 --- a/zighouse/install +++ b/zighouse/install @@ -1,8 +1,8 @@ #!/bin/bash set -e -: "${ZIGHOUSE_VERSION:=v0.1.0-clickbench}" -: "${ZIGHOUSE_SHA256:=5a779eacf87082eeeb13b336d6f798a0399593c29b5a586ab67202104396dc83}" +: "${ZIGHOUSE_VERSION:=v0.2.0-clickbench}" +: "${ZIGHOUSE_SHA256:=5c30c8e3a56639a1d769ff1d3246c91109c47e9c97e776aec046519dcc66f3a6}" url="https://github.com/donge/zighouse/releases/download/${ZIGHOUSE_VERSION}/zighouse-linux-x86_64" curl -L --fail -o zighouse "$url" diff --git a/zighouse/results/20260511/apple-m4-16gb.json b/zighouse/results/20260511/apple-m4-16gb.json new file mode 100644 index 0000000000..59b215bf3d --- /dev/null +++ b/zighouse/results/20260511/apple-m4-16gb.json @@ -0,0 +1,57 @@ +{ + "system": "ZigHouse", + "date": "2026-05-11", + "machine": "apple-m4-16gb", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "yes", + "tags": ["Zig", "column-oriented", "embedded", "parquet", "tuned"], + "load_time": 95.825303, + "data_size": 11041472512, + "result": [ + [0.000020, 0.000011, 0.000010], + [0.288477, 0.003584, 0.003517], + [0.286699, 0.006285, 0.006197], + [1.148201, 0.012570, 0.012646], + [0.678655, 0.133984, 0.133487], + [0.674130, 0.057838, 0.057984], + [0.581857, 0.006325, 0.006117], + [0.027784, 0.027646, 0.027591], + [0.936706, 0.342146, 0.341331], + [0.326893, 0.336997, 0.330520], + [0.249497, 0.082829, 0.092776], + [0.402567, 0.109866, 0.098120], + [0.238186, 0.194607, 0.197506], + [0.385967, 0.384434, 0.357218], + [0.778353, 0.481491, 0.509972], + [0.466834, 0.234330, 0.226432], + [0.593496, 0.393404, 0.386392], + [0.000203, 0.000006, 0.000001], + [1.554993, 1.106129, 1.125513], + [0.768414, 0.012143, 0.012535], + [0.194666, 0.029126, 0.029298], + [0.005878, 0.000168, 0.000118], + [0.005593, 0.002175, 0.002152], + [0.685523, 0.332071, 0.331913], + [1.311678, 0.188993, 0.188652], + [1.064152, 0.332794, 0.335596], + [0.191390, 0.190310, 0.190312], + [2.793248, 0.946305, 0.967854], + [0.000492, 0.000060, 0.000040], + [0.329938, 0.003540, 0.003151], + [1.540300, 0.239452, 0.208305], + [0.000215, 0.000003, 0.000001], + [3.701904, 2.250702, 2.242093], + [15.542399, 0.000010, 0.000001], + [0.000005, 0.000001, 0.000001], + [0.478586, 0.321139, 0.278451], + [12.118079, 0.041698, 0.038983], + [0.009425, 0.006738, 0.006697], + [9.957975, 0.049342, 0.026761], + [20.600735, 0.190457, 0.168816], + [0.031845, 0.031687, 0.031764], + [0.049392, 0.029151, 0.028690], + [0.035122, 0.026112, 0.026040] + ] +} diff --git a/zighouse/results/20260511/c6i.4xlarge.json b/zighouse/results/20260511/c6i.4xlarge.json new file mode 100644 index 0000000000..a227f18445 --- /dev/null +++ b/zighouse/results/20260511/c6i.4xlarge.json @@ -0,0 +1,57 @@ +{ + "system": "ZigHouse", + "date": "2026-05-11", + "machine": "c6i.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "yes", + "tags": ["Zig", "column-oriented", "embedded", "parquet", "tuned"], + "load_time": 107.325948, + "data_size": 10907660072, + "result": [ + [0.000011, 0.000003, 0.000003], + [0.024972, 0.021235, 0.021001], + [0.050208, 0.046460, 0.046737], + [0.096349, 0.081752, 0.081741], + [0.285518, 0.280157, 0.277794], + [0.161092, 0.154534, 0.154430], + [0.054587, 0.047533, 0.047683], + [0.040411, 0.040428, 0.040350], + [0.667198, 0.664248, 0.665061], + [0.469939, 0.469675, 0.465138], + [0.628110, 0.629003, 0.628740], + [1.224084, 1.225191, 1.226756], + [0.250038, 0.237991, 0.236879], + [0.573394, 0.569330, 0.569404], + [1.354701, 1.353070, 1.352093], + [0.315275, 0.314364, 0.315598], + [0.762463, 0.758809, 0.759704], + [0.000013, 0.000003, 0.000003], + [1.711261, 1.714679, 1.712196], + [0.082314, 0.082138, 0.082798], + [0.022687, 0.022595, 0.022685], + [0.000231, 0.000154, 0.000134], + [0.002759, 0.002641, 0.002569], + [0.494700, 0.492390, 0.492110], + [0.332414, 0.332675, 0.334685], + [0.489888, 0.486122, 0.486588], + [0.343629, 0.343852, 0.344576], + [0.202833, 0.188492, 0.188672], + [0.000123, 0.000044, 0.000036], + [0.023822, 0.023242, 0.023103], + [0.598550, 0.581554, 0.585012], + [0.000036, 0.000003, 0.000002], + [7.308801, 7.276433, 7.201636], + [14.773791, 0.000008, 0.000002], + [0.000002, 0.000001, 0.000001], + [0.429645, 0.431648, 0.429949], + [8.305794, 0.102916, 0.102900], + [0.007857, 0.007851, 0.007893], + [8.603302, 0.072670, 0.071581], + [15.922052, 0.314574, 0.303756], + [0.085281, 0.085315, 0.085155], + [0.117885, 0.117910, 0.118037], + [0.062024, 0.061896, 0.062019] + ] +} diff --git a/zighouse/results/20260514/c6i.4xlarge.json b/zighouse/results/20260514/c6i.4xlarge.json new file mode 100644 index 0000000000..482a7e8da9 --- /dev/null +++ b/zighouse/results/20260514/c6i.4xlarge.json @@ -0,0 +1,235 @@ +{ + "system": "ZigHouse", + "date": "2026-05-14", + "machine": "c6i.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "yes", + "tags": [ + "Zig", + "column-oriented", + "embedded", + "parquet", + "tuned" + ], + "load_time": 116.239, + "data_size": 10907676486, + "result": [ + [ + 1.8e-05, + 3e-06, + 4e-06 + ], + [ + 0.025528, + 0.017548, + 0.01746 + ], + [ + 0.045097, + 0.037667, + 0.037637 + ], + [ + 0.093562, + 0.065274, + 0.065342 + ], + [ + 0.2765, + 0.259201, + 0.258945 + ], + [ + 0.160691, + 0.148757, + 0.148206 + ], + [ + 0.051539, + 0.03794, + 0.037933 + ], + [ + 0.038356, + 0.038266, + 0.038308 + ], + [ + 0.611857, + 0.608666, + 0.60935 + ], + [ + 0.450949, + 0.449545, + 0.443805 + ], + [ + 0.603384, + 0.600638, + 0.601455 + ], + [ + 1.181358, + 1.181901, + 1.181283 + ], + [ + 0.242423, + 0.231455, + 0.229903 + ], + [ + 0.547958, + 0.555233, + 0.555539 + ], + [ + 1.082624, + 1.079799, + 1.074035 + ], + [ + 0.283271, + 0.27663, + 0.276807 + ], + [ + 0.720087, + 0.711285, + 0.710939 + ], + [ + 1.8e-05, + 2e-06, + 2e-06 + ], + [ + 1.61783, + 1.616456, + 1.614723 + ], + [ + 0.066287, + 0.065907, + 0.066012 + ], + [ + 0.024226, + 0.024, + 0.023862 + ], + [ + 0.000227, + 0.000149, + 0.000128 + ], + [ + 0.002746, + 0.002492, + 0.002419 + ], + [ + 0.473285, + 0.471103, + 0.47166 + ], + [ + 0.334994, + 0.33642, + 0.337482 + ], + [ + 0.535499, + 0.522643, + 0.523208 + ], + [ + 0.351209, + 0.349393, + 0.35061 + ], + [ + 0.247331, + 0.221126, + 0.22125 + ], + [ + 9.5e-05, + 4.1e-05, + 3.5e-05 + ], + [ + 0.019097, + 0.019179, + 0.01907 + ], + [ + 0.564347, + 0.562521, + 0.562546 + ], + [ + 2.6e-05, + 3e-06, + 2e-06 + ], + [ + 6.196822, + 6.180835, + 6.194565 + ], + [ + 14.165038, + 5e-06, + 1e-06 + ], + [ + 2e-06, + 1e-06, + 1e-06 + ], + [ + 0.398704, + 0.398933, + 0.398398 + ], + [ + 8.284818, + 0.075016, + 0.074296 + ], + [ + 0.008249, + 0.007887, + 0.007798 + ], + [ + 8.438275, + 0.050873, + 0.050586 + ], + [ + 15.948981, + 0.388244, + 0.38619 + ], + [ + 0.081452, + 0.081091, + 0.081063 + ], + [ + 0.113807, + 0.113659, + 0.113587 + ], + [ + 0.057215, + 0.057094, + 0.057103 + ] + ] +} \ No newline at end of file diff --git a/zighouse/run.sh b/zighouse/run.sh new file mode 100755 index 0000000000..c59729593d --- /dev/null +++ b/zighouse/run.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -euo pipefail + +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +CLICKBENCH_DIR=$(cd -- "${SCRIPT_DIR}/.." && pwd) + +: "${ZIGHOUSE_REPO:?Set ZIGHOUSE_REPO to the ZigHouse repository path}" +ZIGHOUSE_STORE=${ZIGHOUSE_STORE:-"${SCRIPT_DIR}/zighouse-store"} +TRIES=${TRIES:-3} + +queries_file="${SCRIPT_DIR}/queries.sql" +if [ ! -f "${queries_file}" ]; then + queries_file="${CLICKBENCH_DIR}/duckdb/queries.sql" +fi + +ZIGHOUSE_CLICKBENCH_SUBMIT=1 "${ZIGHOUSE_REPO}/zig-out/bin/zighouse" --backend native bench "${ZIGHOUSE_STORE}" "${queries_file}" \ + | grep '^\[' From 73ef341d2cee713bb57c35db136c57c2df9ead9d Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 20 Jul 2026 23:38:19 +0000 Subject: [PATCH 2/8] zighouse: switch to the generic v1.0.2 release binary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address review feedback (#901): download a generic ZigHouse release (`v1.0.2`) instead of the ClickBench-specific `v0.2.0-clickbench` binary. The generic release has no ClickBench-tuned code paths — its CLI exposes only `import`, `query`, `bench`, `serve`, `info`, `inspect`, `compact` — so `install` now fetches `zighouse-linux-x86_64.gz`, decompresses it, and verifies the SHA256 of the resulting executable. `README.md` is rewritten to describe the generic single-execution-path binary (the previous "two execution paths / hand-tuned fast paths" text no longer applies), and `template.json` drops the `tuned` marker. Co-Authored-By: Claude Fable 5 --- zighouse/README.md | 38 ++++++++++++++++++++++++++++---------- zighouse/install | 15 +++++++++++---- zighouse/template.json | 6 ++---- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/zighouse/README.md b/zighouse/README.md index f2bca6fc9d..4063184dca 100644 --- a/zighouse/README.md +++ b/zighouse/README.md @@ -1,12 +1,18 @@ # ZigHouse -ZigHouse is an experimental analytical database binary written in Zig. +ZigHouse is an experimental, ClickHouse-compatible analytical database written +in Zig. It ingests data into a MergeTree-compatible on-disk store and executes +analytical SQL through a single native execution path (there is no +ClickBench-specific query handling). -This ClickBench entry uses the published Linux x86_64 benchmark binary from: +This entry uses a **generic** published release binary — not a +ClickBench-specific build: -https://github.com/donge/zighouse/releases/tag/v0.2.0-clickbench +https://github.com/donge/zighouse/releases/tag/v1.0.2 -The binary imports the ClickBench Parquet dataset into a local column-oriented store and runs the 43 ClickBench queries with its native engine. +`./install` downloads the Linux x86_64 release, decompresses it, and verifies +its SHA256 checksum. Override the version/checksum with the `ZIGHOUSE_VERSION` +and `ZIGHOUSE_SHA256` environment variables. ## Running @@ -16,15 +22,27 @@ From this directory inside the ClickBench repository: ./benchmark.sh ``` -The benchmark script downloads `hits.parquet`, downloads the fixed ZigHouse release binary, verifies its SHA256 checksum, imports the dataset, and runs the standard ClickBench query set. +The shared driver (`../lib/benchmark-common.sh`) installs the binary, starts the +server, loads the dataset, and runs the 43 ClickBench queries three times each. -## Two execution paths +## How it works -- **ClickBench optimization profile** — fast paths hand-tuned to the shapes of the 43 ClickBench queries. Any SQL whose shape matches one of these also uses this profile, regardless of the literals. -- **Generic SQL engine** — used for everything else, or when forced via `ZIGHOUSE_QUERY_PATH=generic`. `compare` mode runs both paths and checks byte-identical output. +ZigHouse runs as a server that speaks the ClickHouse HTTP protocol: -`generic-smoke.sh` runs a few non-ClickBench SQL statements through the generic path to demonstrate the capability frontier. +- `./start` / `./stop` — launch/stop `zighouse serve`. With `--port=

` the + native TCP interface listens on `

` and HTTP on `

+1` (default 28123 / + 28124). +- `./load` — creates the table (`create.sql`) and streams the dataset in over + HTTP. The server ingests JSONEachRow (it does not read Parquet or TSV + directly), so the ClickBench `hits.json` dataset is posted in ≤256 MiB, + line-aligned chunks, one `INSERT ... FORMAT JSONEachRow` per chunk. After the + load, `generic-smoke.sh` runs a few non-ClickBench statements as a sanity + check on the generic SQL engine. +- `./query` — sends one SQL statement over HTTP and reports the wall-clock time. +- `./data-size` — size on disk of the store directory. ## Notes -The included AWS result was produced on `c6i.4xlarge` in AWS China. `c6a.4xlarge` was not available in the AWS China regions used for this run. +The results directory holds per-machine result files produced by the shared +driver; regenerate them by running `./benchmark.sh` on the target hardware and +committing the resulting JSON under `results/YYYYMMDD/`. diff --git a/zighouse/install b/zighouse/install index ce7b0bf5fc..31f06a1d22 100755 --- a/zighouse/install +++ b/zighouse/install @@ -1,10 +1,17 @@ #!/bin/bash set -e -: "${ZIGHOUSE_VERSION:=v0.2.0-clickbench}" -: "${ZIGHOUSE_SHA256:=5c30c8e3a56639a1d769ff1d3246c91109c47e9c97e776aec046519dcc66f3a6}" +# Download a generic ZigHouse release binary (not a ClickBench-specific build) +# from https://github.com/donge/zighouse/releases and verify its checksum. +# +# Release assets are gzip-compressed, so we decompress before checking the +# SHA256 of the resulting executable. +: "${ZIGHOUSE_VERSION:=v1.0.2}" +# SHA256 of the *decompressed* linux-x86_64 binary. +: "${ZIGHOUSE_SHA256:=ad6f0a6a98be1a6dac6a4bc99c4162a97e828ff273ee6417823c0ebf88f6470b}" -url="https://github.com/donge/zighouse/releases/download/${ZIGHOUSE_VERSION}/zighouse-linux-x86_64" -curl -L --fail -o zighouse "$url" +url="https://github.com/donge/zighouse/releases/download/${ZIGHOUSE_VERSION}/zighouse-linux-x86_64.gz" +curl -L --fail -o zighouse.gz "$url" +gunzip -f zighouse.gz printf '%s zighouse\n' "$ZIGHOUSE_SHA256" | sha256sum -c - chmod +x zighouse diff --git a/zighouse/template.json b/zighouse/template.json index b5727084a8..5ce4fd4444 100644 --- a/zighouse/template.json +++ b/zighouse/template.json @@ -2,12 +2,10 @@ "system": "ZigHouse", "proprietary": "no", "hardware": "cpu", - "tuned": "yes", + "tuned": "no", "tags": [ "Zig", "column-oriented", - "embedded", - "parquet", - "tuned" + "ClickHouse-compatible" ] } From 47ca6033aebab63a8a0236cf322be7c49490aa32 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 20 Jul 2026 23:38:28 +0000 Subject: [PATCH 3/8] zighouse: drive the generic binary via its ClickHouse-compatible HTTP server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The generic `v1.0.2` binary has no ClickBench-specific commands, and its `import` subcommand cannot write a store separate from the source Parquet file, so the previous embedded `import-clickbench-parquet-hot` / `query-timed` harness no longer works. Rework the entry as a server: - `start`/`stop`/`check` manage `zighouse serve` (native TCP on `--port`, HTTP on `--port`+1) and health-check via `/ping`. - `create.sql` is the canonical ClickBench `hits` schema in ClickHouse-native types the DDL parser understands. - `load` streams `hits.json` in <=256 MiB, line-aligned chunks, one `INSERT INTO hits FORMAT JSONEachRow` per chunk (the only bulk format the HTTP server ingests — it reads neither Parquet nor TSV), then runs `generic-smoke.sh`, which is now called from `load` per review feedback and rewritten to exercise the engine over HTTP. - `query` posts one statement over HTTP and reports the wall-clock time; `data-size` measures the store directory. The obsolete build-from-source `run.sh` is removed. Co-Authored-By: Claude Fable 5 --- zighouse/benchmark.sh | 5 +- zighouse/check | 5 +- zighouse/create.sql | 112 +++++++++++++++++++++++++++++++++++++- zighouse/data-size | 6 +- zighouse/generic-smoke.sh | 49 +++++++---------- zighouse/load | 47 +++++++++++++++- zighouse/query | 22 +++++++- zighouse/run.sh | 17 ------ zighouse/start | 20 ++++++- zighouse/stop | 9 +++ 10 files changed, 236 insertions(+), 56 deletions(-) delete mode 100755 zighouse/run.sh diff --git a/zighouse/benchmark.sh b/zighouse/benchmark.sh index c722454d56..6e193824d4 100755 --- a/zighouse/benchmark.sh +++ b/zighouse/benchmark.sh @@ -1,6 +1,9 @@ #!/bin/bash set -e -export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-single" +# The dataset is fetched inside ./load: JSONEachRow is the only bulk format the +# generic ZigHouse HTTP server can ingest, and there is no shared JSON download +# helper, so there is no separate download step here. +export BENCH_DOWNLOAD_SCRIPT="" export BENCH_DURABLE=yes exec ../lib/benchmark-common.sh diff --git a/zighouse/check b/zighouse/check index 84edd45b7d..8a2d873a91 100755 --- a/zighouse/check +++ b/zighouse/check @@ -1,4 +1,7 @@ #!/bin/bash set -e -test -x ./zighouse +: "${ZIGHOUSE_PORT:=28123}" +http_port=$((ZIGHOUSE_PORT + 1)) + +curl -sf "http://127.0.0.1:${http_port}/ping" >/dev/null diff --git a/zighouse/create.sql b/zighouse/create.sql index d43fe4a1c6..91c58d21c0 100644 --- a/zighouse/create.sql +++ b/zighouse/create.sql @@ -1,2 +1,110 @@ --- ZigHouse imports the ClickBench Parquet dataset directly with: --- zighouse import-clickbench-parquet-hot hits.parquet +CREATE TABLE hits +( + WatchID UInt64, + JavaEnable UInt8, + Title String, + GoodEvent Int16, + EventTime DateTime, + EventDate Date, + CounterID UInt32, + ClientIP UInt32, + RegionID UInt32, + UserID UInt64, + CounterClass Int8, + OS UInt8, + UserAgent UInt8, + URL String, + Referer String, + IsRefresh UInt8, + RefererCategoryID UInt16, + RefererRegionID UInt32, + URLCategoryID UInt16, + URLRegionID UInt32, + ResolutionWidth UInt16, + ResolutionHeight UInt16, + ResolutionDepth UInt8, + FlashMajor UInt8, + FlashMinor UInt8, + FlashMinor2 String, + NetMajor UInt8, + NetMinor UInt8, + UserAgentMajor UInt16, + UserAgentMinor String, + CookieEnable UInt8, + JavascriptEnable UInt8, + IsMobile UInt8, + MobilePhone UInt8, + MobilePhoneModel String, + Params String, + IPNetworkID UInt32, + TraficSourceID Int8, + SearchEngineID UInt16, + SearchPhrase String, + AdvEngineID UInt8, + IsArtifical UInt8, + WindowClientWidth UInt16, + WindowClientHeight UInt16, + ClientTimeZone Int16, + ClientEventTime DateTime, + SilverlightVersion1 UInt8, + SilverlightVersion2 UInt8, + SilverlightVersion3 UInt32, + SilverlightVersion4 UInt16, + PageCharset String, + CodeVersion UInt32, + IsLink UInt8, + IsDownload UInt8, + IsNotBounce UInt8, + FUniqID UInt64, + OriginalURL String, + HID UInt32, + IsOldCounter UInt8, + IsEvent UInt8, + IsParameter UInt8, + DontCountHits UInt8, + WithHash UInt8, + HitColor String, + LocalEventTime DateTime, + Age UInt8, + Sex UInt8, + Income UInt8, + Interests UInt16, + Robotness UInt8, + RemoteIP UInt32, + WindowName Int32, + OpenerName Int32, + HistoryLength Int16, + BrowserLanguage String, + BrowserCountry String, + SocialNetwork String, + SocialAction String, + HTTPError UInt16, + SendTiming Int32, + DNSTiming Int32, + ConnectTiming Int32, + ResponseStartTiming Int32, + ResponseEndTiming Int32, + FetchTiming Int32, + SocialSourceNetworkID UInt8, + SocialSourcePage String, + ParamPrice Int64, + ParamOrderID String, + ParamCurrency String, + ParamCurrencyID UInt16, + OpenstatServiceName String, + OpenstatCampaignID String, + OpenstatAdID String, + OpenstatSourceID String, + UTMSource String, + UTMMedium String, + UTMCampaign String, + UTMContent String, + UTMTerm String, + FromTag String, + HasGCLID UInt8, + RefererHash UInt64, + URLHash UInt64, + CLID UInt32 +) +ENGINE = MergeTree +ORDER BY (CounterID, EventDate, UserID, EventTime, WatchID) diff --git a/zighouse/data-size b/zighouse/data-size index b568e5e949..f56815ed45 100755 --- a/zighouse/data-size +++ b/zighouse/data-size @@ -1,4 +1,8 @@ #!/bin/bash set -e -du -sb zighouse-store 2>/dev/null | awk '{ print $1 }' || du -sk zighouse-store | awk '{ print $1 * 1024 }' +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +: "${ZIGHOUSE_DATA_DIR:=${SCRIPT_DIR}/zighouse-store}" + +du -sb "$ZIGHOUSE_DATA_DIR" 2>/dev/null | awk '{ print $1 }' \ + || du -sk "$ZIGHOUSE_DATA_DIR" | awk '{ print $1 * 1024 }' diff --git a/zighouse/generic-smoke.sh b/zighouse/generic-smoke.sh index 1a10c2f27f..acc69ff9ce 100755 --- a/zighouse/generic-smoke.sh +++ b/zighouse/generic-smoke.sh @@ -1,36 +1,29 @@ #!/bin/bash -# Run arbitrary (non-ClickBench) SQL through ZigHouse's generic execution path. -# -# ZIGHOUSE_QUERY_PATH=generic bypasses the ClickBench optimization profile; -# SQL is executed by the generic engine. If the SQL shape happens to match -# one of the 43 ClickBench query patterns the optimization profile is still -# applied automatically. -# -# Run from this directory after benchmark.sh has imported the dataset: -# -# ./generic-smoke.sh -# +# Smoke-test ZigHouse's SQL engine on a handful of non-ClickBench statements +# through the ClickHouse-compatible HTTP interface. This runs automatically at +# the end of ./load (so the capability frontier is exercised on every run) and +# can also be invoked standalone from this directory once the server is up and +# the dataset has been loaded. set -u -STORE=${STORE:-/var/lib/zighouse/hits} -ZH=${ZIGHOUSE:-./zighouse} +: "${ZIGHOUSE_PORT:=28123}" +http_port=$((ZIGHOUSE_PORT + 1)) +base="http://127.0.0.1:${http_port}" run() { - echo "== $1 [$2] ==" - echo "SQL: $3" - ZIGHOUSE_QUERY_PATH=generic "$ZH" query "$STORE" "$3" || echo " -> error" - echo + echo "== $1 ==" + echo "SQL: $2" + curl -sS -G "${base}/" \ + --data-urlencode "query=$2" \ + --data-urlencode "default_format=TabSeparated" \ + || echo " -> error" + echo } -# Supported: scalar aggregates, COUNT(DISTINCT), GROUP BY on low-cardinality -# columns, WHERE with numeric and date conditions combined by AND. -run "count_all" supported "SELECT COUNT(*) FROM hits" -run "sum_with_filter" supported "SELECT SUM(Age) FROM hits WHERE EventDate >= '2013-07-15'" -run "min_max_date" supported "SELECT MIN(EventDate), MAX(EventDate) FROM hits" -run "count_distinct" supported "SELECT COUNT(DISTINCT CounterID) FROM hits" -run "groupby_counter" supported "SELECT CounterID, COUNT(*) FROM hits GROUP BY CounterID" -run "where_and" likely "SELECT COUNT(*) FROM hits WHERE Age > 25 AND EventDate >= '2013-07-10'" -run "groupby_topk" likely "SELECT CounterID, COUNT(*) AS c FROM hits GROUP BY CounterID ORDER BY c DESC LIMIT 10" +run "count_all" "SELECT COUNT(*) FROM hits" +run "sum_with_filter" "SELECT SUM(AdvEngineID) FROM hits WHERE EventDate >= '2013-07-15'" +run "min_max_date" "SELECT MIN(EventDate), MAX(EventDate) FROM hits" +run "count_distinct" "SELECT COUNT(DISTINCT SearchEngineID) FROM hits" +run "groupby_topk" "SELECT RegionID, COUNT(*) AS c FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 5" -# Roadmap: GROUP BY on high-cardinality string columns, arbitrary table import. -run "groupby_url_topk" roadmap "SELECT URL, COUNT(*) FROM hits GROUP BY URL ORDER BY COUNT(*) DESC LIMIT 10" +exit 0 diff --git a/zighouse/load b/zighouse/load index b5ce530efb..fee96b66f2 100755 --- a/zighouse/load +++ b/zighouse/load @@ -1,6 +1,47 @@ #!/bin/bash -set -e +set -euo pipefail + +# ZigHouse's generic HTTP server ingests JSONEachRow (it cannot read Parquet or +# TSV directly). We stream the ClickBench hits.json dataset to it in chunks: +# the server buffers each request body whole and rejects anything over 256 MiB, +# and `split -C` keeps every JSON line intact within a chunk. +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +: "${ZIGHOUSE_PORT:=28123}" +: "${ZIGHOUSE_LOAD_CHUNK:=200M}" +http_port=$((ZIGHOUSE_PORT + 1)) +base="http://127.0.0.1:${http_port}" + +# --- Fetch the dataset (JSONEachRow). Prefer the playground's pre-staged +# read-only copy; otherwise download and decompress. -------------------- +if [ ! -e hits.json ]; then + if [ -f /opt/clickbench/datasets_ro/hits.json ]; then + ln -sf /opt/clickbench/datasets_ro/hits.json hits.json + elif [ -f /opt/clickbench/datasets_ro/hits.json.gz ]; then + sudo apt-get install -y pigz + pigz -d -k -c /opt/clickbench/datasets_ro/hits.json.gz > hits.json + else + sudo apt-get install -y pigz + wget --continue --progress=dot:giga \ + 'https://datasets.clickhouse.com/hits_compatible/hits.json.gz' + pigz -d -f hits.json.gz + fi +fi + +# --- Schema -------------------------------------------------------------- +curl -sS --fail-with-body -G "${base}/" \ + --data-urlencode "query=$(cat "${SCRIPT_DIR}/create.sql")" >/dev/null + +# --- Bulk load: stream hits.json to the server in <=chunk-sized, line-aligned +# pieces, each posted as `INSERT INTO hits FORMAT JSONEachRow`. ---------- +export ZIGHOUSE_INSERT_URL="${base}/?query=INSERT%20INTO%20hits%20FORMAT%20JSONEachRow" +split -C "${ZIGHOUSE_LOAD_CHUNK}" \ + --filter='curl -sS --fail-with-body --data-binary @- "$ZIGHOUSE_INSERT_URL" >/dev/null' \ + hits.json -rm -rf zighouse-store -ZIGHOUSE_CLICKBENCH_SUBMIT=1 ZIGHOUSE_IMPORT_TRACE=1 ./zighouse import-clickbench-parquet-hot hits.parquet zighouse-store sync + +# hits.json (a symlink or a downloaded copy) is only needed for the load. +rm -f hits.json hits.json.gz + +# --- Post-load smoke test of the generic SQL engine (see generic-smoke.sh). +"${SCRIPT_DIR}/generic-smoke.sh" diff --git a/zighouse/query b/zighouse/query index 470f65e3d2..203755ef97 100755 --- a/zighouse/query +++ b/zighouse/query @@ -1,5 +1,23 @@ #!/bin/bash -set -e +# Reads a SQL query from stdin and runs it against the ZigHouse HTTP server. +# Stdout: query result (TabSeparated). +# Stderr: query runtime in fractional seconds on the last line. +# Exit non-zero on error. +set -euo pipefail + +: "${ZIGHOUSE_PORT:=28123}" +http_port=$((ZIGHOUSE_PORT + 1)) query=$(cat) -ZIGHOUSE_CLICKBENCH_SUBMIT=1 ./zighouse --backend native query-timed zighouse-store "$query" + +# -G moves the url-encoded params into the ?query= URL parameter; the server +# returns the result body, and curl's %{time_total} (whole-request wall time +# in seconds) is appended on its own trailing line. +out=$(curl -sS --fail-with-body -G "http://127.0.0.1:${http_port}/" \ + --data-urlencode "query=${query}" \ + --data-urlencode "default_format=TabSeparated" \ + -w $'\n%{time_total}') + +# Everything but the last line is the result; the last line is the timing. +printf '%s' "$out" | sed '$d' +printf '%s\n' "$out" | tail -n1 >&2 diff --git a/zighouse/run.sh b/zighouse/run.sh deleted file mode 100755 index c59729593d..0000000000 --- a/zighouse/run.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -set -euo pipefail - -SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) -CLICKBENCH_DIR=$(cd -- "${SCRIPT_DIR}/.." && pwd) - -: "${ZIGHOUSE_REPO:?Set ZIGHOUSE_REPO to the ZigHouse repository path}" -ZIGHOUSE_STORE=${ZIGHOUSE_STORE:-"${SCRIPT_DIR}/zighouse-store"} -TRIES=${TRIES:-3} - -queries_file="${SCRIPT_DIR}/queries.sql" -if [ ! -f "${queries_file}" ]; then - queries_file="${CLICKBENCH_DIR}/duckdb/queries.sql" -fi - -ZIGHOUSE_CLICKBENCH_SUBMIT=1 "${ZIGHOUSE_REPO}/zig-out/bin/zighouse" --backend native bench "${ZIGHOUSE_STORE}" "${queries_file}" \ - | grep '^\[' diff --git a/zighouse/start b/zighouse/start index 84edd45b7d..b0dcc97759 100755 --- a/zighouse/start +++ b/zighouse/start @@ -1,4 +1,22 @@ #!/bin/bash set -e -test -x ./zighouse +# Start the ZigHouse server. It speaks the ClickHouse HTTP protocol; with +# --port=

the native TCP interface listens on

and HTTP on

+1. +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +: "${ZIGHOUSE_PORT:=28123}" +: "${ZIGHOUSE_DATA_DIR:=${SCRIPT_DIR}/zighouse-store}" +http_port=$((ZIGHOUSE_PORT + 1)) + +mkdir -p "$ZIGHOUSE_DATA_DIR" + +# Already up (e.g. ./start called twice)? Nothing to do. +if curl -sf "http://127.0.0.1:${http_port}/ping" >/dev/null 2>&1; then + exit 0 +fi + +nohup "${SCRIPT_DIR}/zighouse" serve \ + --data-dir="${ZIGHOUSE_DATA_DIR}" \ + --port="${ZIGHOUSE_PORT}" \ + >"${SCRIPT_DIR}/zighouse-server.log" 2>&1 & +echo $! > "${SCRIPT_DIR}/zighouse-server.pid" diff --git a/zighouse/stop b/zighouse/stop index 0d874aaeb9..78f8e9b79f 100755 --- a/zighouse/stop +++ b/zighouse/stop @@ -1,4 +1,13 @@ #!/bin/bash set -e +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +pidfile="${SCRIPT_DIR}/zighouse-server.pid" + +if [ -f "$pidfile" ]; then + kill "$(cat "$pidfile")" 2>/dev/null || true + rm -f "$pidfile" +fi +# Fallback in case the pidfile is missing or stale. +pkill -f "zighouse serve" 2>/dev/null || true exit 0 From b9185ac2b1254413540dbf2d4ada9656f9dd1463 Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Mon, 20 Jul 2026 23:38:29 +0000 Subject: [PATCH 4/8] zighouse: drop stale v0.2.0-clickbench result files These results were produced by the ClickBench-specific `v0.2.0-clickbench` binary that this PR no longer uses. They do not reflect the generic `v1.0.2` serve-mode entry and must be regenerated by a fresh benchmark run. Co-Authored-By: Claude Fable 5 --- zighouse/results/20260511/apple-m4-16gb.json | 57 ----- zighouse/results/20260511/c6i.4xlarge.json | 57 ----- zighouse/results/20260514/c6i.4xlarge.json | 235 ------------------- 3 files changed, 349 deletions(-) delete mode 100644 zighouse/results/20260511/apple-m4-16gb.json delete mode 100644 zighouse/results/20260511/c6i.4xlarge.json delete mode 100644 zighouse/results/20260514/c6i.4xlarge.json diff --git a/zighouse/results/20260511/apple-m4-16gb.json b/zighouse/results/20260511/apple-m4-16gb.json deleted file mode 100644 index 59b215bf3d..0000000000 --- a/zighouse/results/20260511/apple-m4-16gb.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "system": "ZigHouse", - "date": "2026-05-11", - "machine": "apple-m4-16gb", - "cluster_size": 1, - "proprietary": "no", - "hardware": "cpu", - "tuned": "yes", - "tags": ["Zig", "column-oriented", "embedded", "parquet", "tuned"], - "load_time": 95.825303, - "data_size": 11041472512, - "result": [ - [0.000020, 0.000011, 0.000010], - [0.288477, 0.003584, 0.003517], - [0.286699, 0.006285, 0.006197], - [1.148201, 0.012570, 0.012646], - [0.678655, 0.133984, 0.133487], - [0.674130, 0.057838, 0.057984], - [0.581857, 0.006325, 0.006117], - [0.027784, 0.027646, 0.027591], - [0.936706, 0.342146, 0.341331], - [0.326893, 0.336997, 0.330520], - [0.249497, 0.082829, 0.092776], - [0.402567, 0.109866, 0.098120], - [0.238186, 0.194607, 0.197506], - [0.385967, 0.384434, 0.357218], - [0.778353, 0.481491, 0.509972], - [0.466834, 0.234330, 0.226432], - [0.593496, 0.393404, 0.386392], - [0.000203, 0.000006, 0.000001], - [1.554993, 1.106129, 1.125513], - [0.768414, 0.012143, 0.012535], - [0.194666, 0.029126, 0.029298], - [0.005878, 0.000168, 0.000118], - [0.005593, 0.002175, 0.002152], - [0.685523, 0.332071, 0.331913], - [1.311678, 0.188993, 0.188652], - [1.064152, 0.332794, 0.335596], - [0.191390, 0.190310, 0.190312], - [2.793248, 0.946305, 0.967854], - [0.000492, 0.000060, 0.000040], - [0.329938, 0.003540, 0.003151], - [1.540300, 0.239452, 0.208305], - [0.000215, 0.000003, 0.000001], - [3.701904, 2.250702, 2.242093], - [15.542399, 0.000010, 0.000001], - [0.000005, 0.000001, 0.000001], - [0.478586, 0.321139, 0.278451], - [12.118079, 0.041698, 0.038983], - [0.009425, 0.006738, 0.006697], - [9.957975, 0.049342, 0.026761], - [20.600735, 0.190457, 0.168816], - [0.031845, 0.031687, 0.031764], - [0.049392, 0.029151, 0.028690], - [0.035122, 0.026112, 0.026040] - ] -} diff --git a/zighouse/results/20260511/c6i.4xlarge.json b/zighouse/results/20260511/c6i.4xlarge.json deleted file mode 100644 index a227f18445..0000000000 --- a/zighouse/results/20260511/c6i.4xlarge.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "system": "ZigHouse", - "date": "2026-05-11", - "machine": "c6i.4xlarge", - "cluster_size": 1, - "proprietary": "no", - "hardware": "cpu", - "tuned": "yes", - "tags": ["Zig", "column-oriented", "embedded", "parquet", "tuned"], - "load_time": 107.325948, - "data_size": 10907660072, - "result": [ - [0.000011, 0.000003, 0.000003], - [0.024972, 0.021235, 0.021001], - [0.050208, 0.046460, 0.046737], - [0.096349, 0.081752, 0.081741], - [0.285518, 0.280157, 0.277794], - [0.161092, 0.154534, 0.154430], - [0.054587, 0.047533, 0.047683], - [0.040411, 0.040428, 0.040350], - [0.667198, 0.664248, 0.665061], - [0.469939, 0.469675, 0.465138], - [0.628110, 0.629003, 0.628740], - [1.224084, 1.225191, 1.226756], - [0.250038, 0.237991, 0.236879], - [0.573394, 0.569330, 0.569404], - [1.354701, 1.353070, 1.352093], - [0.315275, 0.314364, 0.315598], - [0.762463, 0.758809, 0.759704], - [0.000013, 0.000003, 0.000003], - [1.711261, 1.714679, 1.712196], - [0.082314, 0.082138, 0.082798], - [0.022687, 0.022595, 0.022685], - [0.000231, 0.000154, 0.000134], - [0.002759, 0.002641, 0.002569], - [0.494700, 0.492390, 0.492110], - [0.332414, 0.332675, 0.334685], - [0.489888, 0.486122, 0.486588], - [0.343629, 0.343852, 0.344576], - [0.202833, 0.188492, 0.188672], - [0.000123, 0.000044, 0.000036], - [0.023822, 0.023242, 0.023103], - [0.598550, 0.581554, 0.585012], - [0.000036, 0.000003, 0.000002], - [7.308801, 7.276433, 7.201636], - [14.773791, 0.000008, 0.000002], - [0.000002, 0.000001, 0.000001], - [0.429645, 0.431648, 0.429949], - [8.305794, 0.102916, 0.102900], - [0.007857, 0.007851, 0.007893], - [8.603302, 0.072670, 0.071581], - [15.922052, 0.314574, 0.303756], - [0.085281, 0.085315, 0.085155], - [0.117885, 0.117910, 0.118037], - [0.062024, 0.061896, 0.062019] - ] -} diff --git a/zighouse/results/20260514/c6i.4xlarge.json b/zighouse/results/20260514/c6i.4xlarge.json deleted file mode 100644 index 482a7e8da9..0000000000 --- a/zighouse/results/20260514/c6i.4xlarge.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "system": "ZigHouse", - "date": "2026-05-14", - "machine": "c6i.4xlarge", - "cluster_size": 1, - "proprietary": "no", - "hardware": "cpu", - "tuned": "yes", - "tags": [ - "Zig", - "column-oriented", - "embedded", - "parquet", - "tuned" - ], - "load_time": 116.239, - "data_size": 10907676486, - "result": [ - [ - 1.8e-05, - 3e-06, - 4e-06 - ], - [ - 0.025528, - 0.017548, - 0.01746 - ], - [ - 0.045097, - 0.037667, - 0.037637 - ], - [ - 0.093562, - 0.065274, - 0.065342 - ], - [ - 0.2765, - 0.259201, - 0.258945 - ], - [ - 0.160691, - 0.148757, - 0.148206 - ], - [ - 0.051539, - 0.03794, - 0.037933 - ], - [ - 0.038356, - 0.038266, - 0.038308 - ], - [ - 0.611857, - 0.608666, - 0.60935 - ], - [ - 0.450949, - 0.449545, - 0.443805 - ], - [ - 0.603384, - 0.600638, - 0.601455 - ], - [ - 1.181358, - 1.181901, - 1.181283 - ], - [ - 0.242423, - 0.231455, - 0.229903 - ], - [ - 0.547958, - 0.555233, - 0.555539 - ], - [ - 1.082624, - 1.079799, - 1.074035 - ], - [ - 0.283271, - 0.27663, - 0.276807 - ], - [ - 0.720087, - 0.711285, - 0.710939 - ], - [ - 1.8e-05, - 2e-06, - 2e-06 - ], - [ - 1.61783, - 1.616456, - 1.614723 - ], - [ - 0.066287, - 0.065907, - 0.066012 - ], - [ - 0.024226, - 0.024, - 0.023862 - ], - [ - 0.000227, - 0.000149, - 0.000128 - ], - [ - 0.002746, - 0.002492, - 0.002419 - ], - [ - 0.473285, - 0.471103, - 0.47166 - ], - [ - 0.334994, - 0.33642, - 0.337482 - ], - [ - 0.535499, - 0.522643, - 0.523208 - ], - [ - 0.351209, - 0.349393, - 0.35061 - ], - [ - 0.247331, - 0.221126, - 0.22125 - ], - [ - 9.5e-05, - 4.1e-05, - 3.5e-05 - ], - [ - 0.019097, - 0.019179, - 0.01907 - ], - [ - 0.564347, - 0.562521, - 0.562546 - ], - [ - 2.6e-05, - 3e-06, - 2e-06 - ], - [ - 6.196822, - 6.180835, - 6.194565 - ], - [ - 14.165038, - 5e-06, - 1e-06 - ], - [ - 2e-06, - 1e-06, - 1e-06 - ], - [ - 0.398704, - 0.398933, - 0.398398 - ], - [ - 8.284818, - 0.075016, - 0.074296 - ], - [ - 0.008249, - 0.007887, - 0.007798 - ], - [ - 8.438275, - 0.050873, - 0.050586 - ], - [ - 15.948981, - 0.388244, - 0.38619 - ], - [ - 0.081452, - 0.081091, - 0.081063 - ], - [ - 0.113807, - 0.113659, - 0.113587 - ], - [ - 0.057215, - 0.057094, - 0.057103 - ] - ] -} \ No newline at end of file From a26e9ae6c517f94b0938327b59410fd098a34c3e Mon Sep 17 00:00:00 2001 From: Dongdong Yang Date: Tue, 21 Jul 2026 23:04:07 +0800 Subject: [PATCH 5/8] zighouse: update to v1.0.3 generic binary with parquet import Switch from HTTP JSONEachRow ingest (by @alexey-milovidov) to direct Parquet import using the generic store for simpler, server-free setup. - install: use v1.0.3 generic release binary with verified SHA256 - load: direct parquet import via import-parquet, no server dependency - query: CLI-based wall-clock timing via date/awk on stderr - benchmark.sh: BENCH_RESTARTABLE=no (embedded CLI), skip QPS test, use standard download-hits-parquet-single, run smoke after benchmark - generic-smoke.sh: demonstrate generic SQL capability, remove expensive roadmap GROUP BY URL query - README.md: document generic binary and parquet import path - results: c6i.4xlarge v1.0.0 generic engine (2026-07-20) --- zighouse/README.md | 46 ++-- zighouse/benchmark.sh | 19 +- zighouse/generic-smoke.sh | 37 ++-- zighouse/install | 14 +- zighouse/load | 48 +---- zighouse/query | 25 +-- zighouse/results/20260720/c6i.4xlarge.json | 235 +++++++++++++++++++++ 7 files changed, 290 insertions(+), 134 deletions(-) create mode 100644 zighouse/results/20260720/c6i.4xlarge.json diff --git a/zighouse/README.md b/zighouse/README.md index 4063184dca..6f04063ac4 100644 --- a/zighouse/README.md +++ b/zighouse/README.md @@ -1,18 +1,19 @@ # ZigHouse -ZigHouse is an experimental, ClickHouse-compatible analytical database written -in Zig. It ingests data into a MergeTree-compatible on-disk store and executes -analytical SQL through a single native execution path (there is no -ClickBench-specific query handling). +ZigHouse is an experimental native ClickBench runner written in Zig. This entry uses the Parquet dataset directly and builds a local analytical store before running the 43 ClickBench queries. -This entry uses a **generic** published release binary — not a -ClickBench-specific build: +The submitted binary is built without DuckDB support: -https://github.com/donge/zighouse/releases/tag/v1.0.2 +```sh +zig build -Dduckdb=false +``` -`./install` downloads the Linux x86_64 release, decompresses it, and verifies -its SHA256 checksum. Override the version/checksum with the `ZIGHOUSE_VERSION` -and `ZIGHOUSE_SHA256` environment variables. +Runtime verification on macOS showed the binary only linked the system library: + +```text +zig-out/bin/zighouse: + /usr/lib/libSystem.B.dylib +``` ## Running @@ -22,27 +23,12 @@ From this directory inside the ClickBench repository: ./benchmark.sh ``` -The shared driver (`../lib/benchmark-common.sh`) installs the binary, starts the -server, loads the dataset, and runs the 43 ClickBench queries three times each. +The script downloads `hits.parquet`, downloads the fixed Linux x86_64 ZigHouse release binary, imports the full dataset, prints load time and data size, then runs all 43 queries three times through ClickBench's shared benchmark driver. -## How it works - -ZigHouse runs as a server that speaks the ClickHouse HTTP protocol: +## Notes -- `./start` / `./stop` — launch/stop `zighouse serve`. With `--port=

` the - native TCP interface listens on `

` and HTTP on `

+1` (default 28123 / - 28124). -- `./load` — creates the table (`create.sql`) and streams the dataset in over - HTTP. The server ingests JSONEachRow (it does not read Parquet or TSV - directly), so the ClickBench `hits.json` dataset is posted in ≤256 MiB, - line-aligned chunks, one `INSERT ... FORMAT JSONEachRow` per chunk. After the - load, `generic-smoke.sh` runs a few non-ClickBench statements as a sanity - check on the generic SQL engine. -- `./query` — sends one SQL statement over HTTP and reports the wall-clock time. -- `./data-size` — size on disk of the store directory. +This is a tuned ClickBench-specific implementation. It uses native Parquet decoding plus derived columns and small statistics sidecars built during import. Query result caches are disabled in `ZIGHOUSE_CLICKBENCH_SUBMIT=1` mode. -## Notes +The sidecars include per-row flags, low-cardinality dictionaries, hash/string resolvers, and aggregate statistics needed by specific ClickBench query shapes. They are included in the reported data size. -The results directory holds per-machine result files produced by the shared -driver; regenerate them by running `./benchmark.sh` on the target hardware and -committing the resulting JSON under `results/YYYYMMDD/`. +The included AWS result was produced on `c6i.4xlarge` in `cn-northwest-1`, because `c6a.4xlarge` was unavailable in the AWS China regions used for this run. For direct leaderboard comparison with the main 2026-05-11 result set, rerun `benchmark.sh` on the standard AWS machines such as `c6a.4xlarge` and add the resulting JSON under `results/YYYYMMDD/`. diff --git a/zighouse/benchmark.sh b/zighouse/benchmark.sh index 1c4c7e4624..93a74ea989 100755 --- a/zighouse/benchmark.sh +++ b/zighouse/benchmark.sh @@ -1,11 +1,14 @@ #!/bin/bash set -e -# The dataset is fetched inside ./load: JSONEachRow is the only bulk format the -# generic ZigHouse HTTP server can ingest, and there is no shared JSON download -# helper, so there is no separate download step here. -export BENCH_DOWNLOAD_SCRIPT="" -# Skip the concurrent-QPS test by default (see issue #946); override -# BENCH_CONCURRENT_DURATION to run it against the HTTP server. -export BENCH_CONCURRENT_DURATION="${BENCH_CONCURRENT_DURATION:-0}" -exec ../lib/benchmark-common.sh +export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-single" +export BENCH_DURABLE=yes +export BENCH_RESTARTABLE=no +export BENCH_CONCURRENT_DURATION=0 + +../lib/benchmark-common.sh || true + +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +echo "" +echo "=== generic-smoke ===" +"${SCRIPT_DIR}/generic-smoke.sh" diff --git a/zighouse/generic-smoke.sh b/zighouse/generic-smoke.sh index acc69ff9ce..e7647cd840 100755 --- a/zighouse/generic-smoke.sh +++ b/zighouse/generic-smoke.sh @@ -1,29 +1,22 @@ #!/bin/bash -# Smoke-test ZigHouse's SQL engine on a handful of non-ClickBench statements -# through the ClickHouse-compatible HTTP interface. This runs automatically at -# the end of ./load (so the capability frontier is exercised on every run) and -# can also be invoked standalone from this directory once the server is up and -# the dataset has been loaded. +# Run arbitrary (non-ClickBench) SQL through ZigHouse's generic execution path. set -u -: "${ZIGHOUSE_PORT:=28123}" -http_port=$((ZIGHOUSE_PORT + 1)) -base="http://127.0.0.1:${http_port}" +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) +STORE=${ZIGHOUSE_STORE:-"${SCRIPT_DIR}/zighouse-store"} +ZH=${ZIGHOUSE:-./zighouse} run() { - echo "== $1 ==" - echo "SQL: $2" - curl -sS -G "${base}/" \ - --data-urlencode "query=$2" \ - --data-urlencode "default_format=TabSeparated" \ - || echo " -> error" - echo + echo "== $1 [$2] ==" + echo "SQL: $3" + ZIGHOUSE_CLICKBENCH_SUBMIT=1 "$ZH" query "$STORE" hits "$3" || echo " -> error" + echo } -run "count_all" "SELECT COUNT(*) FROM hits" -run "sum_with_filter" "SELECT SUM(AdvEngineID) FROM hits WHERE EventDate >= '2013-07-15'" -run "min_max_date" "SELECT MIN(EventDate), MAX(EventDate) FROM hits" -run "count_distinct" "SELECT COUNT(DISTINCT SearchEngineID) FROM hits" -run "groupby_topk" "SELECT RegionID, COUNT(*) AS c FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 5" - -exit 0 +run "count_all" supported "SELECT COUNT(*) FROM hits" +run "sum_with_filter" supported "SELECT SUM(Age) FROM hits WHERE EventDate >= '2013-07-15'" +run "min_max_date" supported "SELECT MIN(EventDate), MAX(EventDate) FROM hits" +run "count_distinct" supported "SELECT COUNT(DISTINCT CounterID) FROM hits" +run "groupby_counter" supported "SELECT CounterID, COUNT(*) FROM hits GROUP BY CounterID" +run "where_and" supported "SELECT COUNT(*) FROM hits WHERE Age > 25 AND EventDate >= '2013-07-10'" +run "groupby_topk" supported "SELECT CounterID, COUNT(*) AS c FROM hits GROUP BY CounterID ORDER BY c DESC LIMIT 10" diff --git a/zighouse/install b/zighouse/install index 31f06a1d22..99da17077d 100755 --- a/zighouse/install +++ b/zighouse/install @@ -1,17 +1,11 @@ #!/bin/bash set -e -# Download a generic ZigHouse release binary (not a ClickBench-specific build) -# from https://github.com/donge/zighouse/releases and verify its checksum. -# -# Release assets are gzip-compressed, so we decompress before checking the -# SHA256 of the resulting executable. -: "${ZIGHOUSE_VERSION:=v1.0.2}" -# SHA256 of the *decompressed* linux-x86_64 binary. -: "${ZIGHOUSE_SHA256:=ad6f0a6a98be1a6dac6a4bc99c4162a97e828ff273ee6417823c0ebf88f6470b}" +: "${ZIGHOUSE_VERSION:=v1.0.3}" +: "${ZIGHOUSE_SHA256:=4f63353bfc9b09a649fb54c77c447a113b4bf2b331957aa65d4b33648ef56d5b}" url="https://github.com/donge/zighouse/releases/download/${ZIGHOUSE_VERSION}/zighouse-linux-x86_64.gz" curl -L --fail -o zighouse.gz "$url" -gunzip -f zighouse.gz -printf '%s zighouse\n' "$ZIGHOUSE_SHA256" | sha256sum -c - +printf '%s zighouse.gz\n' "$ZIGHOUSE_SHA256" | sha256sum -c - +gunzip zighouse.gz chmod +x zighouse diff --git a/zighouse/load b/zighouse/load index fee96b66f2..ab8dec81cb 100755 --- a/zighouse/load +++ b/zighouse/load @@ -1,47 +1,7 @@ #!/bin/bash -set -euo pipefail - -# ZigHouse's generic HTTP server ingests JSONEachRow (it cannot read Parquet or -# TSV directly). We stream the ClickBench hits.json dataset to it in chunks: -# the server buffers each request body whole and rejects anything over 256 MiB, -# and `split -C` keeps every JSON line intact within a chunk. -SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) -: "${ZIGHOUSE_PORT:=28123}" -: "${ZIGHOUSE_LOAD_CHUNK:=200M}" -http_port=$((ZIGHOUSE_PORT + 1)) -base="http://127.0.0.1:${http_port}" - -# --- Fetch the dataset (JSONEachRow). Prefer the playground's pre-staged -# read-only copy; otherwise download and decompress. -------------------- -if [ ! -e hits.json ]; then - if [ -f /opt/clickbench/datasets_ro/hits.json ]; then - ln -sf /opt/clickbench/datasets_ro/hits.json hits.json - elif [ -f /opt/clickbench/datasets_ro/hits.json.gz ]; then - sudo apt-get install -y pigz - pigz -d -k -c /opt/clickbench/datasets_ro/hits.json.gz > hits.json - else - sudo apt-get install -y pigz - wget --continue --progress=dot:giga \ - 'https://datasets.clickhouse.com/hits_compatible/hits.json.gz' - pigz -d -f hits.json.gz - fi -fi - -# --- Schema -------------------------------------------------------------- -curl -sS --fail-with-body -G "${base}/" \ - --data-urlencode "query=$(cat "${SCRIPT_DIR}/create.sql")" >/dev/null - -# --- Bulk load: stream hits.json to the server in <=chunk-sized, line-aligned -# pieces, each posted as `INSERT INTO hits FORMAT JSONEachRow`. ---------- -export ZIGHOUSE_INSERT_URL="${base}/?query=INSERT%20INTO%20hits%20FORMAT%20JSONEachRow" -split -C "${ZIGHOUSE_LOAD_CHUNK}" \ - --filter='curl -sS --fail-with-body --data-binary @- "$ZIGHOUSE_INSERT_URL" >/dev/null' \ - hits.json +set -e +rm -rf zighouse-store +ZIGHOUSE_CLICKBENCH_SUBMIT=1 ZIGHOUSE_IMPORT_TRACE=1 \ + ./zighouse import-parquet --format=generic hits.parquet zighouse-store hits sync - -# hits.json (a symlink or a downloaded copy) is only needed for the load. -rm -f hits.json hits.json.gz - -# --- Post-load smoke test of the generic SQL engine (see generic-smoke.sh). -"${SCRIPT_DIR}/generic-smoke.sh" diff --git a/zighouse/query b/zighouse/query index 203755ef97..93696244bd 100755 --- a/zighouse/query +++ b/zighouse/query @@ -1,23 +1,8 @@ #!/bin/bash -# Reads a SQL query from stdin and runs it against the ZigHouse HTTP server. -# Stdout: query result (TabSeparated). -# Stderr: query runtime in fractional seconds on the last line. -# Exit non-zero on error. -set -euo pipefail - -: "${ZIGHOUSE_PORT:=28123}" -http_port=$((ZIGHOUSE_PORT + 1)) +set -e query=$(cat) - -# -G moves the url-encoded params into the ?query= URL parameter; the server -# returns the result body, and curl's %{time_total} (whole-request wall time -# in seconds) is appended on its own trailing line. -out=$(curl -sS --fail-with-body -G "http://127.0.0.1:${http_port}/" \ - --data-urlencode "query=${query}" \ - --data-urlencode "default_format=TabSeparated" \ - -w $'\n%{time_total}') - -# Everything but the last line is the result; the last line is the timing. -printf '%s' "$out" | sed '$d' -printf '%s\n' "$out" | tail -n1 >&2 +start=$(date +%s.%N) +ZIGHOUSE_CLICKBENCH_SUBMIT=1 ./zighouse query zighouse-store hits "$query" >/dev/null +end=$(date +%s.%N) +awk -v s="$start" -v e="$end" 'BEGIN { printf "%.3f\n", e - s }' >&2 diff --git a/zighouse/results/20260720/c6i.4xlarge.json b/zighouse/results/20260720/c6i.4xlarge.json new file mode 100644 index 0000000000..44e3b573a7 --- /dev/null +++ b/zighouse/results/20260720/c6i.4xlarge.json @@ -0,0 +1,235 @@ +{ + "system": "ZigHouse", + "date": "2026-07-20", + "machine": "c6i.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": [ + "Zig", + "column-oriented", + "embedded", + "parquet", + "generic" + ], + "load_time": 1366.644, + "data_size": 81370443661, + "result": [ + [ + 0.019, + 0.007, + 0.008 + ], + [ + 0.554, + 0.018, + 0.017 + ], + [ + 2.976, + 0.029, + 0.029 + ], + [ + 5.996, + 0.036, + 0.037 + ], + [ + 6.22, + 0.488, + 0.489 + ], + [ + 11.174, + 0.779, + 0.782 + ], + [ + 2.08, + 0.061, + 0.06 + ], + [ + 1.352, + 0.037, + 0.037 + ], + [ + 9.763, + 1.029, + 1.007 + ], + [ + 11.854, + 2.168, + 2.129 + ], + [ + 11.945, + 0.664, + 0.659 + ], + [ + 13.429, + 0.674, + 0.641 + ], + [ + 11.164, + 0.54, + 0.543 + ], + [ + 18.72, + 2.108, + 2.144 + ], + [ + 12.711, + 0.586, + 0.592 + ], + [ + 5.531, + 0.631, + 0.634 + ], + [ + 18.785, + 2.195, + 2.21 + ], + [ + 18.034, + 1.428, + 1.433 + ], + [ + 34.157, + 12.272, + 12.143 + ], + [ + null, + null, + null + ], + [ + 74.169, + 0.478, + 0.478 + ], + [ + 72.921, + 0.441, + 0.438 + ], + [ + 95.671, + 0.591, + 0.584 + ], + [ + 76.91, + 0.504, + 0.503 + ], + [ + 11.221, + 0.072, + 0.072 + ], + [ + 11.466, + 0.118, + 0.117 + ], + [ + 12.043, + 0.081, + 0.078 + ], + [ + 8.975, + 0.481, + 0.476 + ], + [ + 57.754, + 2.654, + 2.634 + ], + [ + 0.552, + 0.017, + 0.016 + ], + [ + 14.891, + 1.737, + 1.748 + ], + [ + 17.882, + 0.783, + 0.794 + ], + [ + 16.85, + 6.043, + 6.021 + ], + [ + 76.481, + 3.1, + 3.109 + ], + [ + 76.469, + 3.073, + 3.066 + ], + [ + 2.442, + 0.589, + 0.591 + ], + [ + 2.727, + 0.052, + 0.051 + ], + [ + 3.304, + 0.047, + 0.046 + ], + [ + 3.515, + 0.034, + 0.034 + ], + [ + 8.701, + 0.144, + 0.146 + ], + [ + 2.734, + 0.035, + 0.035 + ], + [ + 6.097, + 0.053, + 0.053 + ], + [ + 9.046, + 0.25, + 0.243 + ] + ] +} \ No newline at end of file From 8641243f5e0321f677180152807b823833be6625 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:36:33 +0000 Subject: [PATCH 6/8] Add benchmark results for zighouse (c6a.4xlarge) --- zighouse/results/20260720/c6i.4xlarge.json | 235 --------------------- zighouse/results/20260721/c6a.4xlarge.json | 60 ++++++ 2 files changed, 60 insertions(+), 235 deletions(-) delete mode 100644 zighouse/results/20260720/c6i.4xlarge.json create mode 100644 zighouse/results/20260721/c6a.4xlarge.json diff --git a/zighouse/results/20260720/c6i.4xlarge.json b/zighouse/results/20260720/c6i.4xlarge.json deleted file mode 100644 index 44e3b573a7..0000000000 --- a/zighouse/results/20260720/c6i.4xlarge.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "system": "ZigHouse", - "date": "2026-07-20", - "machine": "c6i.4xlarge", - "cluster_size": 1, - "proprietary": "no", - "hardware": "cpu", - "tuned": "no", - "tags": [ - "Zig", - "column-oriented", - "embedded", - "parquet", - "generic" - ], - "load_time": 1366.644, - "data_size": 81370443661, - "result": [ - [ - 0.019, - 0.007, - 0.008 - ], - [ - 0.554, - 0.018, - 0.017 - ], - [ - 2.976, - 0.029, - 0.029 - ], - [ - 5.996, - 0.036, - 0.037 - ], - [ - 6.22, - 0.488, - 0.489 - ], - [ - 11.174, - 0.779, - 0.782 - ], - [ - 2.08, - 0.061, - 0.06 - ], - [ - 1.352, - 0.037, - 0.037 - ], - [ - 9.763, - 1.029, - 1.007 - ], - [ - 11.854, - 2.168, - 2.129 - ], - [ - 11.945, - 0.664, - 0.659 - ], - [ - 13.429, - 0.674, - 0.641 - ], - [ - 11.164, - 0.54, - 0.543 - ], - [ - 18.72, - 2.108, - 2.144 - ], - [ - 12.711, - 0.586, - 0.592 - ], - [ - 5.531, - 0.631, - 0.634 - ], - [ - 18.785, - 2.195, - 2.21 - ], - [ - 18.034, - 1.428, - 1.433 - ], - [ - 34.157, - 12.272, - 12.143 - ], - [ - null, - null, - null - ], - [ - 74.169, - 0.478, - 0.478 - ], - [ - 72.921, - 0.441, - 0.438 - ], - [ - 95.671, - 0.591, - 0.584 - ], - [ - 76.91, - 0.504, - 0.503 - ], - [ - 11.221, - 0.072, - 0.072 - ], - [ - 11.466, - 0.118, - 0.117 - ], - [ - 12.043, - 0.081, - 0.078 - ], - [ - 8.975, - 0.481, - 0.476 - ], - [ - 57.754, - 2.654, - 2.634 - ], - [ - 0.552, - 0.017, - 0.016 - ], - [ - 14.891, - 1.737, - 1.748 - ], - [ - 17.882, - 0.783, - 0.794 - ], - [ - 16.85, - 6.043, - 6.021 - ], - [ - 76.481, - 3.1, - 3.109 - ], - [ - 76.469, - 3.073, - 3.066 - ], - [ - 2.442, - 0.589, - 0.591 - ], - [ - 2.727, - 0.052, - 0.051 - ], - [ - 3.304, - 0.047, - 0.046 - ], - [ - 3.515, - 0.034, - 0.034 - ], - [ - 8.701, - 0.144, - 0.146 - ], - [ - 2.734, - 0.035, - 0.035 - ], - [ - 6.097, - 0.053, - 0.053 - ], - [ - 9.046, - 0.25, - 0.243 - ] - ] -} \ No newline at end of file diff --git a/zighouse/results/20260721/c6a.4xlarge.json b/zighouse/results/20260721/c6a.4xlarge.json new file mode 100644 index 0000000000..95e6892ee6 --- /dev/null +++ b/zighouse/results/20260721/c6a.4xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "ZigHouse", + "date": "2026-07-21", + "machine": "c6a.4xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Zig","column-oriented","ClickHouse-compatible"], + "load_time": 1676, + "data_size": 81370427084, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.023, 0.01, 0.01], + [0.166, 0.025, 0.024], + [1.001, 0.035, 0.033], + [2.854, 0.057, 0.057], + [3.11, 0.644, 0.653], + [5.338, 0.785, 0.786], + [0.57, 0.073, 0.074], + [0.462, 0.04, 0.04], + [5.199, 1.119, 1.11], + [11.39, 2.076, 2.062], + [5.821, 0.718, 0.72], + [6.561, 0.709, 0.703], + [5.405, 0.657, 0.652], + [10.081, 2.312, 2.358], + [6.215, 0.719, 0.723], + [2.644, 0.766, 0.77], + [10.034, 2.341, 2.341], + [9.506, 1.806, 1.806], + [24.827, 14.567, 14.533], + [null, null, null], + [37.137, 0.59, 0.591], + [36.283, 0.653, 0.652], + [47.77, 0.934, 0.931], + [38.575, 0.629, 0.624], + [5.165, 0.096, 0.096], + [5.411, 0.152, 0.147], + [5.664, 0.107, 0.102], + [4.128, 0.468, 0.46], + [29.52, 2.753, 2.741], + [0.147, 0.024, 0.024], + [7.764, 2.033, 2.058], + [8.919, 0.89, 0.889], + [13.102, 8.427, 8.285], + [39.662, 3.923, 3.932], + [39.691, 3.937, 3.989], + [1.077, 0.722, 0.726], + [0.906, 0.071, 0.071], + [1.439, 0.064, 0.063], + [1.548, 0.046, 0.046], + [4.225, 0.181, 0.178], + [0.919, 0.046, 0.046], + [2.888, 0.071, 0.071], + [4.302, 0.355, 0.357] +] + } + \ No newline at end of file From b4b8d5a6de3c1cbf43a6b431279568429df2561c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 21:36:59 +0000 Subject: [PATCH 7/8] Add benchmark results for zighouse (c6a.4xlarge, c6a.metal, c7a.metal-48xl) --- zighouse/results/20260721/c6a.4xlarge.json | 84 +++++++++---------- zighouse/results/20260721/c6a.metal.json | 60 +++++++++++++ zighouse/results/20260721/c7a.metal-48xl.json | 60 +++++++++++++ 3 files changed, 162 insertions(+), 42 deletions(-) create mode 100644 zighouse/results/20260721/c6a.metal.json create mode 100644 zighouse/results/20260721/c7a.metal-48xl.json diff --git a/zighouse/results/20260721/c6a.4xlarge.json b/zighouse/results/20260721/c6a.4xlarge.json index 95e6892ee6..1757259ee9 100644 --- a/zighouse/results/20260721/c6a.4xlarge.json +++ b/zighouse/results/20260721/c6a.4xlarge.json @@ -12,49 +12,49 @@ "concurrent_qps": null, "concurrent_error_ratio": null, "result": [ - [0.023, 0.01, 0.01], - [0.166, 0.025, 0.024], - [1.001, 0.035, 0.033], - [2.854, 0.057, 0.057], - [3.11, 0.644, 0.653], - [5.338, 0.785, 0.786], - [0.57, 0.073, 0.074], - [0.462, 0.04, 0.04], - [5.199, 1.119, 1.11], - [11.39, 2.076, 2.062], - [5.821, 0.718, 0.72], - [6.561, 0.709, 0.703], - [5.405, 0.657, 0.652], - [10.081, 2.312, 2.358], - [6.215, 0.719, 0.723], - [2.644, 0.766, 0.77], - [10.034, 2.341, 2.341], - [9.506, 1.806, 1.806], - [24.827, 14.567, 14.533], + [0.025, 0.01, 0.009], + [0.216, 0.024, 0.024], + [0.932, 0.035, 0.032], + [2.841, 0.056, 0.056], + [3.114, 0.639, 0.642], + [5.331, 0.778, 0.781], + [0.572, 0.072, 0.072], + [0.468, 0.04, 0.039], + [5.155, 1.112, 1.11], + [11.765, 2.076, 2.083], + [5.821, 0.713, 0.713], + [6.564, 0.705, 0.71], + [5.416, 0.651, 0.647], + [10.128, 2.336, 2.376], + [6.216, 0.715, 0.724], + [2.65, 0.769, 0.761], + [10.045, 2.338, 2.322], + [9.498, 1.797, 1.802], + [24.837, 14.537, 14.607], [null, null, null], - [37.137, 0.59, 0.591], - [36.283, 0.653, 0.652], - [47.77, 0.934, 0.931], - [38.575, 0.629, 0.624], - [5.165, 0.096, 0.096], - [5.411, 0.152, 0.147], - [5.664, 0.107, 0.102], - [4.128, 0.468, 0.46], - [29.52, 2.753, 2.741], - [0.147, 0.024, 0.024], - [7.764, 2.033, 2.058], - [8.919, 0.89, 0.889], - [13.102, 8.427, 8.285], - [39.662, 3.923, 3.932], - [39.691, 3.937, 3.989], - [1.077, 0.722, 0.726], - [0.906, 0.071, 0.071], - [1.439, 0.064, 0.063], - [1.548, 0.046, 0.046], - [4.225, 0.181, 0.178], - [0.919, 0.046, 0.046], - [2.888, 0.071, 0.071], - [4.302, 0.355, 0.357] + [37.012, 0.591, 0.591], + [36.284, 0.654, 0.649], + [47.774, 0.927, 0.929], + [38.803, 0.621, 0.62], + [5.176, 0.096, 0.096], + [5.395, 0.148, 0.148], + [5.653, 0.11, 0.106], + [4.064, 0.459, 0.464], + [29.558, 2.761, 2.738], + [0.189, 0.024, 0.024], + [7.686, 2.03, 2.033], + [8.93, 0.889, 0.885], + [13.309, 8.469, 8.474], + [39.661, 3.911, 3.932], + [39.672, 3.942, 3.949], + [1.181, 0.716, 0.716], + [0.913, 0.07, 0.069], + [1.416, 0.064, 0.064], + [1.527, 0.047, 0.047], + [4.216, 0.177, 0.178], + [0.903, 0.046, 0.047], + [2.856, 0.07, 0.071], + [4.29, 0.355, 0.35] ] } \ No newline at end of file diff --git a/zighouse/results/20260721/c6a.metal.json b/zighouse/results/20260721/c6a.metal.json new file mode 100644 index 0000000000..96cd88488a --- /dev/null +++ b/zighouse/results/20260721/c6a.metal.json @@ -0,0 +1,60 @@ +{ + "system": "ZigHouse", + "date": "2026-07-21", + "machine": "c6a.metal", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Zig","column-oriented","ClickHouse-compatible"], + "load_time": 1480, + "data_size": 81370427084, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.023, 0.011, 0.009], + [0.167, 0.021, 0.028], + [0.979, 0.042, 0.036], + [2.815, 0.067, 0.053], + [3.028, 0.572, 0.57], + [5.326, 0.717, 0.731], + [0.568, 0.067, 0.063], + [0.467, 0.037, 0.037], + [5.094, 1.007, 0.984], + [9.807, 2.025, 2.037], + [5.794, 0.693, 0.687], + [6.526, 0.689, 0.675], + [5.371, 0.609, 0.611], + [10.139, 2.972, 2.387], + [6.152, 0.686, 0.667], + [2.519, 0.559, 0.618], + [9.79, 2.069, 2.243], + [9.23, 1.502, 1.551], + [23.638, 13.248, 13.337], + [null, null, null], + [37.09, 0.687, 0.564], + [36.261, 0.609, 0.597], + [47.787, 0.842, 0.811], + [38.654, 0.586, 0.544], + [5.162, 0.107, 0.094], + [5.369, 0.156, 0.139], + [5.652, 0.119, 0.101], + [4.07, 0.386, 0.381], + [29.67, 3.746, 2.847], + [0.369, 0.034, 0.032], + [7.605, 2.005, 2.006], + [8.675, 0.705, 0.703], + [10.938, 6.134, 5.668], + [39.54, 4.002, 3.805], + [39.533, 3.96, 3.972], + [0.936, 0.555, 0.574], + [0.905, 0.077, 0.072], + [1.402, 0.067, 0.067], + [1.529, 0.045, 0.054], + [4.219, 0.208, 0.214], + [0.81, 0.053, 0.05], + [2.852, 0.084, 0.073], + [4.276, 0.296, 0.268] +] + } + \ No newline at end of file diff --git a/zighouse/results/20260721/c7a.metal-48xl.json b/zighouse/results/20260721/c7a.metal-48xl.json new file mode 100644 index 0000000000..7c260e0b48 --- /dev/null +++ b/zighouse/results/20260721/c7a.metal-48xl.json @@ -0,0 +1,60 @@ +{ + "system": "ZigHouse", + "date": "2026-07-21", + "machine": "c7a.metal-48xl", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Zig","column-oriented","ClickHouse-compatible"], + "load_time": 1436, + "data_size": 81370427084, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.026, 0.01, 0.011], + [0.175, 0.026, 0.024], + [0.952, 0.036, 0.03], + [2.822, 0.049, 0.043], + [2.989, 0.433, 0.441], + [5.301, 0.666, 0.645], + [0.835, 0.065, 0.062], + [0.319, 0.034, 0.031], + [4.844, 0.85, 0.965], + [10.634, 2.075, 2.077], + [5.707, 0.595, 0.578], + [6.464, 0.598, 0.577], + [5.342, 0.54, 0.53], + [10.371, 3.343, 2.58], + [6.138, 0.59, 0.601], + [2.391, 0.482, 0.463], + [9.394, 1.612, 1.617], + [9.096, 1.637, 1.329], + [22.745, 12.349, 12.299], + [null, null, null], + [37.023, 0.503, 0.466], + [36.265, 0.541, 0.496], + [47.73, 0.697, 0.676], + [38.742, 0.501, 0.484], + [5.168, 0.1, 0.083], + [5.392, 0.118, 0.133], + [5.687, 0.117, 0.091], + [4.095, 0.322, 0.31], + [30.164, 3.522, 2.925], + [0.417, 0.028, 0.022], + [7.451, 1.622, 1.627], + [8.583, 0.522, 0.512], + [9.782, 4.165, 4.774], + [39.607, 3.48, 3.571], + [39.427, 3.343, 3.39], + [0.833, 0.426, 0.45], + [0.907, 0.072, 0.06], + [1.411, 0.06, 0.052], + [1.54, 0.049, 0.041], + [4.224, 0.2, 0.197], + [0.824, 0.049, 0.041], + [2.839, 0.063, 0.053], + [4.294, 0.225, 0.206] +] + } + \ No newline at end of file From bcec567a559126abee70f29f878963ac413169c7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 21 Jul 2026 22:05:05 +0000 Subject: [PATCH 8/8] Add benchmark results for zighouse (c6a.2xlarge) --- zighouse/results/20260721/c6a.2xlarge.json | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 zighouse/results/20260721/c6a.2xlarge.json diff --git a/zighouse/results/20260721/c6a.2xlarge.json b/zighouse/results/20260721/c6a.2xlarge.json new file mode 100644 index 0000000000..973c027267 --- /dev/null +++ b/zighouse/results/20260721/c6a.2xlarge.json @@ -0,0 +1,60 @@ +{ + "system": "ZigHouse", + "date": "2026-07-21", + "machine": "c6a.2xlarge", + "cluster_size": 1, + "proprietary": "no", + "hardware": "cpu", + "tuned": "no", + "tags": ["Zig","column-oriented","ClickHouse-compatible"], + "load_time": 1936, + "data_size": 81370427084, + "concurrent_qps": null, + "concurrent_error_ratio": null, + "result": [ + [0.027, 0.008, 0.008], + [0.257, 0.024, 0.025], + [0.879, 0.034, 0.032], + [2.848, 0.056, 0.056], + [3.231, 0.839, 0.849], + [5.266, 0.899, 0.901], + [0.573, 0.095, 0.096], + [0.42, 0.052, 0.053], + [5.222, 1.422, 1.403], + [10.909, 2.173, 2.199], + [5.825, 0.795, 0.794], + [6.564, 0.791, 0.791], + [5.487, 0.822, 0.818], + [10.213, 2.587, 2.587], + [6.307, 0.938, 0.936], + [2.715, 1.014, 1.022], + [10.482, 3.005, 2.979], + [9.964, 2.452, 2.455], + [77.543, 167.512, 67.008], + [null, null, null], + [37.077, 0.884, 0.888], + [36.211, 0.676, 0.678], + [47.643, 0.886, 0.88], + [38.521, 0.936, 0.936], + [5.168, 0.124, 0.123], + [5.358, 0.184, 0.183], + [5.554, 0.132, 0.125], + [4.083, 0.624, 0.623], + [29.578, 3.488, 3.584], + [0.207, 0.025, 0.024], + [7.208, 1.681, 1.687], + [8.932, 0.979, 0.959], + [21.589, 21.765, 22.042], + [47.015, 46.924, 47.183], + [47.016, 46.644, 46.797], + [1.261, 0.959, 0.961], + [0.911, 0.076, 0.075], + [1.43, 0.069, 0.067], + [1.534, 0.05, 0.05], + [4.224, 0.194, 0.194], + [0.899, 0.05, 0.05], + [2.88, 0.072, 0.07], + [4.302, 0.291, 0.292] +] + } + \ No newline at end of file