diff --git a/gravitons/index.html b/gravitons/index.html index f2adb03378..6673066be8 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,17 @@ white-space: nowrap; } + #summary-table { + width: 100%; + max-height: 45vh; + overflow-y: auto; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + display: block; + } + th { padding-bottom: 0.5rem; } @@ -358,6 +370,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 +407,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..f58be8a555 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,17 @@ white-space: nowrap; } + #summary-table { + width: 100%; + max-height: 45vh; + overflow-y: auto; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + display: block; + } + th { padding-bottom: 0.5rem; } @@ -554,6 +566,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 +604,6 @@

ClickHouse Hardware Benchmark

Machine:
- - - - - - - - - -
- Machine - - Relative time (lower is better).
- -
-
Nothing selected
diff --git a/index.html b/index.html index d92b28c91c..a9cf1a9142 100644 --- a/index.html +++ b/index.html @@ -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,18 +215,27 @@ white-space: nowrap; } + #summary-table { + width: 100%; + max-height: 45vh; + overflow-y: auto; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + display: block; + } + th { padding-bottom: 0.5rem; } .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 { @@ -269,6 +279,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); @@ -423,24 +442,39 @@

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).
+ +
+ +
Nothing selected
+ - + + + + + @@ -468,35 +502,28 @@

ClickBench — a Benchmark For Analytical DBMS

- - + + + + + + + + +
- - Open source: - Yes - No - - - Hardware: - CPU - GPU - - - Tuned: - No - Yes - + Metric: + Combined + Cold Run + Hot Run + Load Time + Storage Size +
Database: + All
Metric: - Combined - Cold Run - Hot Run - Load Time - Storage Size + Open source: + Yes + No +
Hardware: + CPU + GPU +
Tuned: + No + Yes
- - - - - - - - - -
- System & Machine - - Relative time (lower is better).
- -
- -
Nothing selected
-

Detailed Comparison

@@ -517,6 +544,7 @@

Detailed Comparison

const missing_result_time = 300; let selectors = { + "database": {}, "system": {}, "type": {}, "machine": {}, @@ -548,12 +576,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 => { @@ -593,7 +639,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)); @@ -601,7 +668,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' }); @@ -735,6 +802,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)); @@ -753,7 +821,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' }); @@ -807,6 +876,7 @@

Detailed Comparison

} } } + process('database', databases); process('system', systems); process('tags', types); process('machine', machines); @@ -934,6 +1004,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); @@ -1077,6 +1148,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] && @@ -1139,6 +1211,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); @@ -1330,14 +1403,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}; } @@ -1347,6 +1423,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(); }; @@ -1354,15 +1441,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 {} } diff --git a/versions/index.html b/versions/index.html index 3923323b0a..8fbaf11a5f 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,17 @@ white-space: nowrap; } + #summary-table { + width: 100%; + max-height: 45vh; + overflow-y: auto; + scrollbar-gutter: stable; + padding-right: 1rem; + margin-top: 1.5rem; + margin-bottom: 1rem; + display: block; + } + th { padding-bottom: 0.5rem; } @@ -490,6 +502,21 @@

ClickHouse Versions Benchmark

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

ClickHouse Versions Benchmark

Version:
- - - - - - - - - -
- version - - Relative time (lower is better) -
-
Nothing selected