mirror of
https://github.com/qdrant/landing_page.git
synced 2026-09-29 07:58:31 +02:00
* feat: Update benchmarks * fix: Improve blog * feat: Add result files with 1 and 100 parallel clients * fix: Add elasticsearch benchmark numbers from dbpedia 1M openai embeddings * feat: Make mean time (latency) the default metric for the 2nd plot * feat: Improve conclusions based on es results * fix: Make charts work on changing dataset * fix: Typo in table * feat: Update results with quantization * fix: Show a single graph to keep things simple * fix: Improve words * review fixes * add link to open-source * feat: Improve units to make results more readable * fix: Small grammatical mistake * fix: Make search threads value constant based on plot metric * feat: Make dataset num vectors more readable * fix: Spacing in table * feat: Add results from the latest Redis benchmarks * feat: Update benchmarks page * feat: Update date and some of the points * feat: Update benchmarks and content * chores: Improve observations * feat: Improve observations and put it after the graph --------- Co-authored-by: generall <andrey@vasnetsov.com>
153 lines
4.6 KiB
HTML
153 lines
4.6 KiB
HTML
<div class="benchmark-wrapper" id="benchmark-plot-wrapper-{{ .Params.id }}">
|
|
<label for="datasets-selector-{{ .Params.id }}">Dataset:</label>
|
|
<select name="datasets" id="datasets-selector-{{ .Params.id }}" onchange="renderSelected('{{ .Params.id }}')">
|
|
|
|
</select>
|
|
|
|
<label for="parallel-selector-{{ .Params.id }}">Search threads:</label>
|
|
<select disabled name="parallel" id="parallel-selector-{{ .Params.id }}" onchange="renderSelected('{{ .Params.id }}')">
|
|
</select>
|
|
|
|
Plot values:
|
|
|
|
<!-- Radio button group to select values to render -->
|
|
<label>
|
|
<input type="radio" name="plot-value-{{ .Params.id }}" value="rps" onclick="document.getElementById('parallel-selector-{{ .Params.id }}').value = 100; renderSelected('{{ .Params.id }}', this.value)"/>
|
|
RPS
|
|
</label> |
|
|
|
|
<label>
|
|
<input type="radio" name="plot-value-{{ .Params.id }}" value="mean_time" onclick="document.getElementById('parallel-selector-{{ .Params.id }}').value = 1; renderSelected('{{ .Params.id }}', this.value)"/>
|
|
Latency
|
|
</label> |
|
|
|
|
<label>
|
|
<input type="radio" name="plot-value-{{ .Params.id }}" value="p95_time" onclick="document.getElementById('parallel-selector-{{ .Params.id }}').value = 1; renderSelected('{{ .Params.id }}', this.value)"/>
|
|
p95 latency
|
|
</label> |
|
|
|
|
<label>
|
|
<input type="radio" name="plot-value-{{ .Params.id }}" value="total_upload_time" onclick="document.getElementById('parallel-selector-{{ .Params.id }}').value = 100; renderSelected('{{ .Params.id }}', this.value)"/>
|
|
Index time
|
|
</label>
|
|
|
|
|
|
<canvas id="chart-{{ .Params.id }}"></canvas>
|
|
|
|
<div class="form-group" style="margin-left: 5%; margin-right: 1%;">
|
|
<input type="range" class="custom-range" id="precision-selector-{{ .Params.id }}" onchange="updateLine('{{ .Params.id }}', this.value)">
|
|
</div>
|
|
|
|
<div id="table-{{ .Params.id }}"></div>
|
|
|
|
<i> Download raw data: <a href="{{ .Params.data }}">here</a> </i>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!--<script type="module" src="/benchmark.js"></script>-->
|
|
<script type="module">
|
|
let url = "{{ .Params.data }}";
|
|
|
|
let datasetSelector = document.getElementById("datasets-selector-{{ .Params.id }}");
|
|
|
|
let parallelSelector = document.getElementById("parallel-selector-{{ .Params.id }}");
|
|
|
|
let precisionSelector = document.getElementById("precision-selector-{{ .Params.id }}");
|
|
|
|
let metricRadioSelector = document.getElementsByName("plot-value-{{ .Params.id }}");
|
|
|
|
const config = {
|
|
type: 'line',
|
|
data: {
|
|
datasets: []
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
interaction: {
|
|
intersect: false,
|
|
},
|
|
scales: {
|
|
x: {
|
|
type: 'linear',
|
|
title: {
|
|
display: true,
|
|
text: 'Precision'
|
|
},
|
|
},
|
|
y: {
|
|
type: 'linear',
|
|
title: {
|
|
display: true,
|
|
text: ''
|
|
},
|
|
}
|
|
},
|
|
plugins: {
|
|
tooltip: {
|
|
callbacks: {
|
|
label: function (tooltipItem) {
|
|
return [
|
|
" - " + tooltipItem.parsed.setup_name,
|
|
JSON.stringify(tooltipItem.parsed.engine_params)
|
|
];
|
|
},
|
|
title: function (tooltipItem) {
|
|
return "Precision: " + tooltipItem[0].parsed.x + ", y: " + tooltipItem[0].parsed.y;
|
|
}
|
|
}
|
|
},
|
|
}
|
|
}
|
|
};
|
|
|
|
const chart = new Chart(
|
|
document.getElementById('chart-{{ .Params.id }}'),
|
|
config
|
|
);
|
|
|
|
fetch(url)
|
|
.then(res => res.json())
|
|
.then(data => {
|
|
const datasets = getDatasetsList(data);
|
|
updataDropdown(datasetSelector, datasets);
|
|
|
|
// reverse parallels list to have the highest number of parallel threads first
|
|
const parallels = getParallelOptions(data).reverse();
|
|
|
|
updataDropdown(parallelSelector, parallels);
|
|
|
|
let parallelsInt = parseInt(parallels[0]);
|
|
|
|
for (const row in data) {
|
|
for (const column in columnMultiplyFactor) {
|
|
if (column in data[row]) {
|
|
data[row][column] *= columnMultiplyFactor[column];
|
|
}
|
|
}
|
|
}
|
|
|
|
let selectedData = filterData(data, {
|
|
"dataset_name": datasets[0],
|
|
"parallel": parallelsInt
|
|
});
|
|
|
|
window.datasets = { "{{ .Params.id }}": data, ...window.datasets }
|
|
window.charts = { "{{ .Params.id }}": chart, ...window.charts }
|
|
|
|
let plotValueRadioBtns = document.getElementsByName("plot-value-{{ .Params.id }}");
|
|
plotValueRadioBtns.forEach(btn => {
|
|
if (btn.value === '{{ .Params.metric }}') {
|
|
btn.checked = true;
|
|
}
|
|
});
|
|
|
|
renderSelected("{{ .Params.id }}");
|
|
|
|
// Chart js set min x value
|
|
|
|
});
|
|
</script>
|