From 332c9c8edd5b38b6c7826dc3fb6a1090c10873e8 Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 29 Apr 2026 12:38:38 +0200 Subject: [PATCH 1/7] move summary comparison table to the top --- gravitons/index.html | 30 +++++++++++++++--------------- hardware/index.html | 32 ++++++++++++++++---------------- index.html | 32 ++++++++++++++++---------------- versions/index.html | 30 +++++++++++++++--------------- 4 files changed, 62 insertions(+), 62 deletions(-) diff --git a/gravitons/index.html b/gravitons/index.html index f2adb03378..14af0f7857 100644 --- a/gravitons/index.html +++ b/gravitons/index.html @@ -358,6 +358,21 @@

ClickHouse Hardware Benchmark

Source | Add a New Result | Report Mistake | Benchmark For Analytical DBMS | Versions Benchmark + + + + + + + + + +
+ Machine + + Relative time (lower is better) +
+ @@ -380,21 +395,6 @@

ClickHouse Hardware Benchmark

Machine:
- - - - - - - - - -
- Machine - - Relative time (lower is better) -
-
Nothing selected
diff --git a/hardware/index.html b/hardware/index.html index a51559e3df..b6d60382c6 100644 --- a/hardware/index.html +++ b/hardware/index.html @@ -554,6 +554,22 @@

ClickHouse Hardware Benchmark

Source | Add a New Result | Report Mistake | Benchmark For Analytical DBMS | Versions Benchmark
+ + + + + + + + + +
+ Machine + + Relative time (lower is better).
+ +
+ @@ -576,22 +592,6 @@

ClickHouse Hardware Benchmark

Machine:
- - - - - - - - - -
- Machine - - Relative time (lower is better).
- -
-
Nothing selected
diff --git a/index.html b/index.html index d92b28c91c..608ae896cb 100644 --- a/index.html +++ b/index.html @@ -423,6 +423,22 @@

ClickBench — a Benchmark For Analytical DBMS

Methodology | Reproduce and Validate the Results | Add a System | Hardware Benchmark | Versions Benchmark | See also: JSONBench
+ + + + + + + + + +
+ System & Machine + + Relative time (lower is better).
+ +
+
@@ -479,22 +495,6 @@

ClickBench — a Benchmark For Analytical DBMS

- - - - - - - - - -
- System & Machine - - Relative time (lower is better).
- -
-
Nothing selected
diff --git a/versions/index.html b/versions/index.html index 3923323b0a..2bde900e9e 100644 --- a/versions/index.html +++ b/versions/index.html @@ -490,6 +490,21 @@

ClickHouse Versions Benchmark

Source | Report Mistake | Benchmark For Analytical DBMS | Hardware Benchmark
+ + + + + + + + + +
+ version + + Relative time (lower is better) +
+ @@ -506,21 +521,6 @@

ClickHouse Versions Benchmark

Version:
- - - - - - - - - -
- version - - Relative time (lower is better) -
-
Nothing selected
From dc776eea68e13fd4d3f859b116172b1034cc55ba Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 29 Apr 2026 12:42:04 +0200 Subject: [PATCH 2/7] make table a scroll element --- gravitons/index.html | 15 +++++++++++++-- hardware/index.html | 15 +++++++++++++-- index.html | 15 +++++++++++++-- versions/index.html | 15 +++++++++++++-- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/gravitons/index.html b/gravitons/index.html index 14af0f7857..6f02b4acad 100644 --- a/gravitons/index.html +++ b/gravitons/index.html @@ -91,7 +91,7 @@ } .selectors-container { - padding: 2rem 0 2rem 0; + padding: 1rem 0 2rem 0; user-select: none; } @@ -111,6 +111,7 @@ color: var(--selector-text-color); border: 0.2rem solid var(--background-color); border-radius: 0.5rem; + cursor: pointer; } .selector-active { @@ -164,6 +165,16 @@ white-space: nowrap; } + #summary-table { + width: 100%; + height: 45vh; + overflow-y: scroll; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + } + th { padding-bottom: 0.5rem; } @@ -358,7 +369,7 @@

ClickHouse Hardware Benchmark

Source | Add a New Result | Report Mistake | Benchmark For Analytical DBMS | Versions Benchmark
- +
+ + + + + + + + + + + +
diff --git a/hardware/index.html b/hardware/index.html index b6d60382c6..3f005c9233 100644 --- a/hardware/index.html +++ b/hardware/index.html @@ -103,7 +103,7 @@ } .selectors-container { - padding: 2rem 0 2rem 0; + padding: 1rem 0 2rem 0; user-select: none; } @@ -123,6 +123,7 @@ color: var(--selector-text-color); border: 0.2rem solid var(--background-color); border-radius: 0.5rem; + cursor: pointer; } .selector-active { @@ -180,6 +181,16 @@ white-space: nowrap; } + #summary-table { + width: 100%; + height: 45vh; + overflow-y: scroll; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + } + th { padding-bottom: 0.5rem; } @@ -554,7 +565,7 @@

ClickHouse Hardware Benchmark

Source | Add a New Result | Report Mistake | Benchmark For Analytical DBMS | Versions Benchmark - +
- - - -
diff --git a/index.html b/index.html index 608ae896cb..1922ce4e8c 100644 --- a/index.html +++ b/index.html @@ -105,7 +105,7 @@ } .selectors-container { - padding: 2rem 0 2rem 0; + padding: 1rem 0 2rem 0; user-select: none; } @@ -136,6 +136,7 @@ color: var(--selector-text-color); border: 0.2rem solid var(--background-color); border-radius: 0.5rem; + cursor: pointer; } .selector-active { @@ -214,6 +215,16 @@ white-space: nowrap; } + #summary-table { + width: 100%; + height: 45vh; + overflow-y: scroll; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + } + th { padding-bottom: 0.5rem; } @@ -423,7 +434,7 @@

ClickBench — a Benchmark For Analytical DBMS

Methodology | Reproduce and Validate the Results | Add a System | Hardware Benchmark | Versions Benchmark | See also: JSONBench - +
diff --git a/versions/index.html b/versions/index.html index 2bde900e9e..4fd5224cad 100644 --- a/versions/index.html +++ b/versions/index.html @@ -91,7 +91,7 @@ } .selectors-container { - padding: 2rem 0 2rem 0; + padding: 1rem 0 2rem 0; user-select: none; } @@ -111,6 +111,7 @@ color: var(--selector-text-color); border: 0.2rem solid var(--background-color); border-radius: 0.5rem; + cursor: pointer; } .selector-active { @@ -164,6 +165,16 @@ white-space: nowrap; } + #summary-table { + width: 100%; + height: 45vh; + overflow-y: scroll; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + } + th { padding-bottom: 0.5rem; } @@ -490,7 +501,7 @@

ClickHouse Versions Benchmark

Source | Report Mistake | Benchmark For Analytical DBMS | Hardware Benchmark - +
From 68ba043640160777ada07dffd4d9780475882372 Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 29 Apr 2026 13:45:26 +0200 Subject: [PATCH 3/7] update default metric to match the one on the other html sites this also seems like a more interresting metric, as the other HTMLs did not seem to bother adding the combined few. This suggests that the hot-metric is mostly used and should be the default also here --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 1922ce4e8c..eced6ac039 100644 --- a/index.html +++ b/index.html @@ -535,7 +535,7 @@

Detailed Comparison

"opensource": {"yes": true, "no": true}, "hardware": {"cpu": true, "gpu": false}, "tuned": {"no": true, "yes": false}, - "metric": "combined", + "metric": "hot", "queries": [], }; From f50d341b43e90dd6f58729e33de711001a4006fe Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 29 Apr 2026 12:44:17 +0200 Subject: [PATCH 4/7] make run selector the first selector and move most filters into a dropdown --- index.html | 143 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 107 insertions(+), 36 deletions(-) diff --git a/index.html b/index.html index eced6ac039..e3a1cf4ffb 100644 --- a/index.html +++ b/index.html @@ -231,12 +231,10 @@ .th-entry-hilite { background: var(--highlight-color); - font-weight: bold; } .summary-row:hover, .summary-row-hilite { background: var(--highlight-color) !important; - font-weight: bold; } .remove-system { @@ -280,6 +278,15 @@ #nothing-selected { display: none; + width: 100%; + height: 45vh; + overflow-y: scroll; + scrollbar-gutter: stable; + box-sizing: border-box; + align-items: center; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; font-size: 32pt; font-weight: bold; color: var(--nothing-selected-color); @@ -450,7 +457,25 @@

ClickBench — a Benchmark For Analytical DBMS

+
Nothing selected
+ + + + + + + + + +
Metric: + Combined + Cold Run + Hot Run + Load Time + Storage Size +
Database: + All +
@@ -470,6 +495,11 @@

ClickBench — a Benchmark For Analytical DBMS

+ +
+ Additional filters + - - - - -
System: @@ -494,19 +524,8 @@

ClickBench — a Benchmark For Analytical DBMS

All
Metric: - Combined - Cold Run - Hot Run - Load Time - Storage Size -
- -
Nothing selected
+
+

Detailed Comparison

@@ -528,6 +547,7 @@

Detailed Comparison

const missing_result_time = 300; let selectors = { + "database": {}, "system": {}, "type": {}, "machine": {}, @@ -559,12 +579,30 @@

Detailed Comparison

/// Generate selectors +let databases = document.getElementById('selectors_database'); let systems = document.getElementById('selectors_system'); let types = document.getElementById('selectors_type'); let machines = document.getElementById('selectors_machine'); let cluster_sizes = document.getElementById('selectors_cluster_size'); -let unique_systems = [... new Set(data.map(elem => elem.system))].sort((a, b) => a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'})); +function database(system_name) { + // Remove any parenthesized comments from the system name + // They only contain variations of the same DB and pollute the selectors + const base = system_name.replace(/\s*\([^)]*\)\s*$/, ''); + const aliases = { + 'ClickHouse ☁️': 'ClickHouse', + 'Timescale ☁️': 'TimescaleDB', + }; + return aliases[base] || base; +} + +data.forEach(elem => { elem.database = database(elem.system); }); +additional_data_size_points.forEach(elem => { elem.database = database(elem.system); }); + +const uniqueSorted = values => [... new Set(values)].sort((a, b) => a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'})); + +let unique_databases = uniqueSorted(data.map(elem => elem.database)); +let all_systems = uniqueSorted(data.map(elem => elem.system)); const system_to_tags = {}; data.forEach(d => { @@ -604,7 +642,28 @@

Detailed Comparison

updateHistory(); } -unique_systems.map(elem => { +unique_databases.map(elem => { + let selector = document.createElement('a'); + selector.className = 'selector selector-active'; + selector.appendChild(document.createTextNode(elem)); + databases.appendChild(selector); + selectors.database[elem] = data.some(entry => entry.database == elem && !entry.hide); + selector.addEventListener('click', e => toggle(e, elem, selectors.database)); + + /// Highlighting summary rows and table columns on hovering over the database selector. + selector.addEventListener('mouseover', e => { + [...document.querySelectorAll('.summary-row')].map(row => { + row.className = row.dataset.database == elem ? 'summary-row summary-row-hilite' : 'summary-row' }); + [...document.querySelectorAll('.th-entry')].map(th => { + th.className = th.dataset.database == elem ? 'th-entry th-entry-hilite' : 'th-entry' }); + }); + selector.addEventListener('mouseout', e => { + [...document.querySelectorAll('.summary-row')].map(row => { row.className = 'summary-row' }); + [...document.querySelectorAll('.th-entry')].map(row => { row.className = 'th-entry' }); + }); +}); + +all_systems.map(elem => { let selector = document.createElement('a'); selector.className = 'selector selector-active'; selector.appendChild(document.createTextNode(elem)); @@ -612,7 +671,7 @@

Detailed Comparison

selectors.system[elem] = data.some(entry => entry.system == elem && !entry.hide); selector.addEventListener('click', e => toggle(e, elem, selectors.system)); - /// Highlighting summary rows and table columns on hovering over the system selector. + /// Highlighting summary rows and table columns on hovering over the database selector. selector.addEventListener('mouseover', e => { [...document.querySelectorAll('.summary-row')].map(row => { row.className = row.dataset.system == elem ? 'summary-row summary-row-hilite' : 'summary-row' }); @@ -746,6 +805,7 @@

Detailed Comparison

updateHistory(); }); +document.getElementById('select-all-databases').addEventListener('click', e => toggleAll(e, selectors.database)); document.getElementById('select-all-systems').addEventListener('click', e => toggleAll(e, selectors.system)); document.getElementById('select-all-types').addEventListener('click', e => toggleAll(e, selectors.type)); document.getElementById('select-all-machines').addEventListener('click', e => toggleAll(e, selectors.machine)); @@ -764,7 +824,8 @@

Detailed Comparison

selectors.queries = [...data[0].result.keys()].map(k => true); function updateSelectors() { - [...systems.childNodes].map(elem => { elem.className = selectors.system[elem.innerText] ? 'selector selector-active' : 'selector' }); + [...databases.childNodes].map(elem => { elem.className = selectors.database[elem.innerText] ? 'selector selector-active' : 'selector' }); + [...systems.childNodes].map(elem => { elem.className = selectors.system[elem.textContent] ? 'selector selector-active' : 'selector' }); [...types.childNodes].map(elem => { elem.className = selectors.type[elem.innerText] ? 'selector selector-active' : 'selector' }); [...machines.childNodes].map(elem => { elem.className = selectors.machine[elem.innerText] ? 'selector selector-active' : 'selector' }); [...cluster_sizes.childNodes].map(elem => { elem.className = selectors.cluster_size[elem.innerText] ? 'selector selector-active' : 'selector' }); @@ -818,6 +879,7 @@

Detailed Comparison

} } } + process('database', databases); process('system', systems); process('tags', types); process('machine', machines); @@ -945,6 +1007,7 @@

Detailed Comparison

tr.className = 'summary-row'; tr.dataset.system = elem.system; + tr.dataset.database = elem.database; tr.addEventListener('mouseover', () => highlightSystemTags(elem.system)); tr.addEventListener('mouseout', clearSystemTagsHighlight); @@ -1088,6 +1151,7 @@

Detailed Comparison

applyTopRowFilters(); let filtered_data = data.filter(elem => + selectors.database[elem.database] && selectors.system[elem.system] && selectors.machine[elem.machine] && selectors.cluster_size[elem.cluster_size] && @@ -1150,6 +1214,7 @@

Detailed Comparison

th.appendChild(document.createTextNode(`${elem.system}\n(${Number.isInteger(elem.cluster_size) && elem.cluster_size > 1 ? elem.cluster_size + '×': ''}${elem.machine})`)); th.className = 'th-entry'; th.dataset.system = elem.system; + th.dataset.database = elem.database; th.addEventListener('mouseover', () => highlightSystemTags(elem.system)); th.addEventListener('mouseout', clearSystemTagsHighlight); details_head.appendChild(th); @@ -1341,14 +1406,17 @@

Detailed Comparison

return decoded; } -function updateHistory() { - history.pushState(selectors, '', - window.location.pathname + (window.location.search || '') + '#' + encodeState(selectors)); -} - -window.onpopstate = function(event) { - if (!event.state) { return; } - selectors = event.state; +function addMissingSelectors() { + if (!selectors.database) { + selectors.database = {}; + if (selectors.system) { + const selected_databases = new Set( + data.filter(elem => selectors.system[elem.system]).map(elem => elem.database)); + unique_databases.forEach(k => { selectors.database[k] = selected_databases.has(k) }); + } else { + unique_databases.forEach(k => { selectors.database[k] = true }); + } + } if (!selectors.opensource) { selectors.opensource = {"yes": true, "no": false}; } @@ -1358,6 +1426,17 @@

Detailed Comparison

if (!selectors.tuned) { selectors.tuned = {"no": true, "yes": false}; } +} + +function updateHistory() { + history.pushState(selectors, '', + window.location.pathname + (window.location.search || '') + '#' + encodeState(selectors)); +} + +window.onpopstate = function(event) { + if (!event.state) { return; } + selectors = event.state; + addMissingSelectors(); updateSelectors(); render(); }; @@ -1365,15 +1444,7 @@

Detailed Comparison

if (window.location.hash) { try { selectors = decodeState(decodeURIComponent(window.location.hash.substring(1))); - if (!selectors.opensource) { - selectors.opensource = {"yes": true, "no": false}; - } - if (!selectors.hardware) { - selectors.hardware = {"cpu": true, "gpu": false}; - } - if (!selectors.tuned) { - selectors.tuned = {"no": true, "yes": false}; - } + addMissingSelectors(); } catch {} } From 88500b925362ed542095b81d4249ab8310e60831 Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 20 May 2026 11:38:13 +0200 Subject: [PATCH 5/7] update summary table to shrink on small item count --- gravitons/index.html | 5 +++-- hardware/index.html | 5 +++-- index.html | 5 +++-- versions/index.html | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gravitons/index.html b/gravitons/index.html index 6f02b4acad..6673066be8 100644 --- a/gravitons/index.html +++ b/gravitons/index.html @@ -167,12 +167,13 @@ #summary-table { width: 100%; - height: 45vh; - overflow-y: scroll; + max-height: 45vh; + overflow-y: auto; scrollbar-gutter: stable; padding-right: 1rem; margin-top: 1.5rem; margin-bottom: 1rem; + display: block; } th { diff --git a/hardware/index.html b/hardware/index.html index 3f005c9233..f58be8a555 100644 --- a/hardware/index.html +++ b/hardware/index.html @@ -183,12 +183,13 @@ #summary-table { width: 100%; - height: 45vh; - overflow-y: scroll; + max-height: 45vh; + overflow-y: auto; scrollbar-gutter: stable; padding-right: 1rem; margin-top: 1.5rem; margin-bottom: 1rem; + display: block; } th { diff --git a/index.html b/index.html index e3a1cf4ffb..9d6073d777 100644 --- a/index.html +++ b/index.html @@ -217,12 +217,13 @@ #summary-table { width: 100%; - height: 45vh; - overflow-y: scroll; + max-height: 45vh; + overflow-y: auto; scrollbar-gutter: stable; padding-right: 1rem; margin-top: 1.5rem; margin-bottom: 1rem; + display: block; } th { diff --git a/versions/index.html b/versions/index.html index 4fd5224cad..8fbaf11a5f 100644 --- a/versions/index.html +++ b/versions/index.html @@ -167,12 +167,13 @@ #summary-table { width: 100%; - height: 45vh; - overflow-y: scroll; + max-height: 45vh; + overflow-y: auto; scrollbar-gutter: stable; padding-right: 1rem; margin-top: 1.5rem; margin-bottom: 1rem; + display: block; } th { From aec0ae5816a9336601ba91617c56cde330c0f6b6 Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 20 May 2026 11:39:07 +0200 Subject: [PATCH 6/7] remove "additional filters" --- index.html | 50 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/index.html b/index.html index 9d6073d777..83d86e38db 100644 --- a/index.html +++ b/index.html @@ -105,7 +105,7 @@ } .selectors-container { - padding: 1rem 0 2rem 0; + padding: 2rem 0 2rem 0; user-select: none; } @@ -477,30 +477,6 @@

ClickBench — a Benchmark For Analytical DBMS

All
- - Open source: - Yes - No - - - Hardware: - CPU - GPU - - - Tuned: - No - Yes - -
- -
- Additional filters - -
System: @@ -525,8 +501,28 @@

ClickBench — a Benchmark For Analytical DBMS

All
-
+
Open source: + Yes + No +
Hardware: + CPU + GPU +
Tuned: + No + Yes +

Detailed Comparison

From a7c03213f57ec2419a2b9b92f395480e1b9beda5 Mon Sep 17 00:00:00 2001 From: Janez Rotman Date: Wed, 20 May 2026 11:39:23 +0200 Subject: [PATCH 7/7] revert default metric back to combined --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 83d86e38db..a9cf1a9142 100644 --- a/index.html +++ b/index.html @@ -552,7 +552,7 @@

Detailed Comparison

"opensource": {"yes": true, "no": true}, "hardware": {"cpu": true, "gpu": false}, "tuned": {"no": true, "yes": false}, - "metric": "hot", + "metric": "combined", "queries": [], };