Reproducible benchmarks · open data
How do log engines compare?
HTTP logs · 247,249,096 documents · 8 engine configurations · Updated 2026-09-02.
HTTP logs: query latency
Each cell shows p50 and p95, in milliseconds or seconds. Cell colors show p50 relative to the fastest comparable result in that row. A strong green border marks the fastest p50, including ties. Known mismatches, errors and unavailable ratios stay neutral.
Logarithmic color scale, fixed across all rows. Each tenfold increase covers half the gradient; 100× and above stay red. Reported latency values are unchanged.
Most historical samples have 10 repetitions: p95 is a small-sample estimate, not a production tail guarantee. First touch is not verified cold; independent cache resets remain pending. Any known result-cache-on diagnostic takes no part in the comparisons. Historical unstamped cache settings remain unverified.
Correctness checks and known count differences
On the current board every count cell agrees across all 8 series (11 count-carrying shapes compared) with one known exception:count_distinct_host, where Siglake reports 1,149,520 against 1,149,519 on clickhouse, clickhouse-s3, duckdb, duckdb-s3 and victorialogs. The extra host matches the freshness-probe marker rows the Siglake arm ingests alongside the corpus (the same rows that put its ingested row count a few dozen above the manifest); it is a harness artifact, recorded here rather than papered over.| shape | Siglake S3 2026-09-02 | clickhouse local EBS 2026-07-29 | clickhouse-s3 S3 2026-07-29 | duckdb local parquet 2026-07-29 | duckdb-s3 S3 parquet 2026-07-29 | elasticsearch local EBS 2026-07-29 | quickwit S3 2026-09-01 | victorialogs local EBS 2026-07-29 |
|---|---|---|---|---|---|---|---|---|
| avg_size_by_status | 599msp95 628msn=10 First touch 7.9s169.13× fastest | 212msp95 237msn=10 First touch 238ms59.81× fastest | 1.0sp95 1.1sn=10 First touch 1.7s296.11× fastest | 249msp95 251msn=10 First touch 252ms70.34× fastest | 274msp95 289msn=10 First touch 3.8s77.32× fastest | 3.7sp95 3.7sn=10 First touch 3.9s1,042.91× fastest | 3.5msp95 4.1msn=10 First touch 1.3s1.00× fastestFastest p50 | 2.0sp95 2.0sn=10 First touch 2.0s568.83× fastest |
| count_by_method | 2.7msp95 2.9msn=10 First touch 2.8ms1.00× fastestFastest p50 | 141msp95 142msn=10 First touch 144ms52.79× fastest | 188msp95 203msn=10 First touch 348ms70.32× fastest | 121msp95 124msn=10 First touch 125ms45.12× fastest | 143msp95 158msn=10 First touch 3.5s53.24× fastest | 8.2msp95 10.3msn=10 First touch 38.8ms3.06× fastest | 3.6msp95 4.2msn=10 First touch 378ms1.35× fastest | 645msp95 652msn=10 First touch 662ms240.68× fastest |
| count_by_status | 2.7msp95 3.3msn=10 First touch 3.7ms1.00× fastestFastest p50 | 95.3msp95 99.2msn=10 First touch 94.6ms35.17× fastest | 256msp95 289msn=10 First touch 213ms94.53× fastest | 145msp95 149msn=10 First touch 145ms53.47× fastest | 176msp95 180msn=10 First touch 179ms65.10× fastest | 927msp95 941msn=10 First touch 1.0s341.89× fastest | 3.4msp95 3.8msn=10 First touch 277ms1.26× fastest | 933msp95 952msn=10 First touch 934ms344.20× fastest |
| count_distinct_host | 116msp95 117msn=10 First touch 115ms1.00× fastestFastest p50 | 993msp95 1.0sn=10 First touch 998ms8.57× fastest | 1.5sp95 1.7sn=10 First touch 1.6s13.24× fastest | 206msp95 212msn=10 First touch 210ms1.77× fastest | 227msp95 260msn=10 First touch 217ms1.96× fastest | 785msp95 803msn=10 First touch 1.1s6.78× fastest | unsupported | 2.9sp95 3.0sn=10 First touch 2.9s25.26× fastest |
| count_last25 | 2.4msp95 3.0msn=10 First touch 3.5ms1.29× fastest | 1.9msp95 2.0msn=10 First touch 2.8ms1.00× fastestFastest p50 | 51.1msp95 68.7msn=10 First touch 51.9ms27.04× fastest | 119msp95 120msn=10 First touch 120ms62.98× fastest | 153msp95 162msn=10 First touch 138ms80.91× fastest | 2.3msp95 3.0msn=10 First touch 8.5ms1.20× fastest | 3.2msp95 3.6msn=10 First touch 155ms1.70× fastest | 2.7msp95 10.5msn=10 First touch 12.7ms1.43× fastest |
| deep_pagination | 24.8msp95 25.6msn=10 First touch 124ms2.88× fastest | 8.6msp95 9.5msn=10 First touch 10.7ms1.00× fastestFastest p50 | 216msp95 329msn=10 First touch 308ms25.12× fastest | 277msp95 325msn=10 First touch 298ms32.22× fastest | 296msp95 320msn=10 First touch 328ms34.49× fastest | unsupported | unsupported | 16.8sp95 17.4sn=10 First touch 17.0s1,951.27× fastest |
| histogram_hourly | 3.8msp95 4.7msn=10 First touch 34.1ms1.00× fastestFastest p50 | 88.6msp95 89.7msn=10 First touch 89.2ms23.24× fastest | 122msp95 141msn=10 First touch 126ms32.13× fastest | 1.0sp95 1.0sn=10 First touch 1.0s273.30× fastest | 1.1sp95 1.1sn=10 First touch 3.7s277.67× fastest | 916msp95 965msn=10 First touch 1.1s240.37× fastest | 5.9msp95 6.4msn=10 First touch 438ms1.55× fastest | 501msp95 516msn=10 First touch 498ms131.39× fastest |
| histogram_hourly_last25 | 3.0msp95 3.4msn=10 First touch 3.8ms1.00× fastestFastest p50 | 77.5msp95 78.1msn=10 First touch 77.7ms26.20× fastest | 106msp95 231msn=10 First touch 117ms35.86× fastest | 896msp95 903msn=10 First touch 894ms302.82× fastest | 911msp95 918msn=10 First touch 913ms307.79× fastest | 803msp95 838msn=10 First touch 816ms271.35× fastest | 4.0msp95 4.2msn=10 First touch 268ms1.34× fastest | 382msp95 393msn=10 First touch 386ms129.08× fastest |
| keyword | 8.1msp95 10.0msn=10 First touch 119ms3.24× fastest | 205msp95 206msn=10 First touch 205ms82.02× fastest | 955msp95 1.8sn=10 First touch 1.1s381.86× fastest | 2.6msp95 3.0msn=10 First touch 3.1ms1.05× fastest | 28.1msp95 64.2msn=10 First touch 35.7ms11.24× fastest | 28.4msp95 76.0msn=10 First touch 155ms11.37× fastest | 43.3msp95 250msn=10 First touch 494ms17.30× fastest | 2.5msp95 13.8msn=10 First touch 9.1ms1.00× fastestFastest p50 |
| keyword_and_status | 23.3msp95 32.6msn=10 First touch 29.4ms4.26× fastest | 207msp95 208msn=10 First touch 206ms37.78× fastest | 1.1sp95 1.9sn=10 First touch 941ms192.44× fastest | 5.5msp95 6.4msn=10 First touch 6.3ms1.00× fastestFastest p50 | 37.6msp95 43.9msn=10 First touch 38.9ms6.87× fastest | 33.8msp95 36.7msn=10 First touch 292ms6.17× fastest | 118msp95 328msn=10 First touch 475ms21.59× fastest | 6.5msp95 13.2msn=10 First touch 13.2ms1.19× fastest |
| match_all | 23.6msp95 49.2msn=10 First touch 27.8ms6.03× fastest | 3.9msp95 4.6msn=10 First touch 8.8ms1.00× fastestFastest p50 | 63.5msp95 90.0msn=10 First touch 353ms16.24× fastest | 40.6msp95 43.0msn=10 First touch 92.5ms10.37× fastest | 70.2msp95 81.5msn=10 First touch 1.5s17.95× fastest | 349msp95 383msn=10 First touch 626ms89.19× fastest | 50.2msp95 98.5msn=10 First touch 78.7ms12.83× fastest | 9.1sp95 9.8sn=10 First touch 9.1s2,325.00× fastest |
| negation_count | 2.5msp95 3.2msn=10 First touch 33.0ms1.16× fastest | 46.6msp95 46.8msn=10 First touch 48.8ms22.10× fastest | 130msp95 270msn=10 First touch 123ms61.39× fastest | 117msp95 117msn=10 First touch 116ms55.25× fastest | 152msp95 160msn=10 First touch 162ms71.98× fastest | 2.1msp95 2.9msn=10 First touch 7.6ms1.00× fastestFastest p50 | 3.4msp95 4.2msn=10 First touch 494ms1.61× fastest | 341msp95 350msn=10 First touch 339ms161.62× fastest |
| status_404_browse | 7.1msp95 9.1msn=10 First touch 46.0ms1.70× fastest | 4.7msp95 5.0msn=10 First touch 5.8ms1.11× fastest | 292msp95 333msn=10 First touch 384ms69.63× fastest | 4.4msp95 5.0msn=10 First touch 4.8ms1.05× fastest | 37.6msp95 69.7msn=10 First touch 104ms8.99× fastest | 13.2msp95 15.9msn=10 First touch 121ms3.16× fastest | 109msp95 125msn=10 First touch 380ms25.98× fastest | 4.2msp95 8.8msn=10 First touch 4.3ms1.00× fastestFastest p50 |
| status_404_count | 2.4msp95 2.8msn=10 First touch 3.4ms1.00× fastestFastest p50 | 46.5msp95 49.0msn=10 First touch 46.9ms19.44× fastest | 252msp95 306msn=10 First touch 152ms105.39× fastest | 93.0msp95 95.1msn=10 First touch 93.3ms38.90× fastest | 126msp95 137msn=10 First touch 14.3s52.89× fastest | 3.5msp95 5.3msn=10 First touch 14.3ms1.44× fastest | 3.3msp95 3.8msn=10 First touch 112ms1.39× fastest | 337msp95 340msn=10 First touch 354ms140.91× fastest |
| status_5xx_count | 2.4msp95 2.6msn=10 First touch 2.7ms1.00× fastestFastest p50 | 50.6msp95 53.3msn=10 First touch 49.3ms21.00× fastest | 254msp95 304msn=10 First touch 126ms105.41× fastest | 60.4msp95 63.3msn=10 First touch 63.4ms25.05× fastest | 96.8msp95 120msn=10 First touch 94.3ms40.18× fastest | 3.0msp95 4.0msn=10 First touch 9.4ms1.27× fastest | 3.2msp95 3.7msn=10 First touch 575ms1.32× fastest | 59.3msp95 62.7msn=10 First touch 65.0ms24.59× fastest |
| substring_scan | 7.8msp95 9.7msn=10 First touch 8.3ms2.70× fastest | 206msp95 207msn=10 First touch 207ms71.64× fastest | 953msp95 1.1sn=10 First touch 1.8s330.96× fastest | 3.3msp95 3.5msn=10 First touch 4.0ms1.13× fastest | 36.2msp95 45.1msn=10 First touch 53.0ms12.56× fastest | 25.0msp95 34.5msn=10 First touch 384ms8.69× fastest | 87.7msp95 278msn=10 First touch 691ms30.44× fastest | 2.9msp95 22.2msn=10 First touch 3.7ms1.00× fastestFastest p50 |
| top_hosts | 142msp95 169msn=10 First touch 1.5s16.66× fastest | 708msp95 713msn=10 First touch 740ms82.93× fastest | 1.4sp95 1.6sn=10 First touch 1.7s164.58× fastest | 259msp95 262msn=10 First touch 273ms30.36× fastest | 275msp95 297msn=10 First touch 3.6s32.15× fastest | 2.0sp95 2.1sn=10 First touch 3.3s235.76× fastest | 8.5msp95 9.3msn=10 First touch 714ms1.00× fastestFastest p50 | 3.6sp95 3.6sn=10 First touch 3.6s418.56× fastest |
| windowed_browse_last25 | 29.7msp95 32.8msn=10 First touch 259ms6.48× fastest | 4.6msp95 5.2msn=10 First touch 5.1ms1.00× fastestFastest p50 | 121msp95 175msn=10 First touch 200ms26.37× fastest | 449msp95 451msn=10 First touch 449ms97.92× fastest | 447msp95 516msn=10 First touch 461ms97.38× fastest | 1.1sp95 1.3sn=10 First touch 1.2s244.78× fastest | 49.2ms†p95 82.6msn=10 First touch 529ms | 3.0sp95 3.4sn=10 First touch 3.2s648.56× fastest |
- † Quickwit
windowed_browse_last25before 2026-09-05 measured the oldest page, not the newest. The suite spelled the shape's sort as"sort_by": "-timestamp", the conventional descending spelling, but Quickwit's RESTsort_bymini-DSL reads it the other way round: an unprefixed field and+fieldare descending,-fieldis ascending (quickwit-serverest_handler.rs,sort_by_mini_dsl). The two Quickwit rows for that shape, dated 2026-07-29 and 2026-09-01, therefore timed "oldest 100 in the window" while every other arm timed "newest 100" (the Elasticsearch translation always sentdesc). The rows stay inrecords.jsonlunchanged, per the append-only rule; read them as a windowed ordered browse of the far tail, not as the same page the other columns show. Since 2026-09-05 the suites use the unprefixedtimestamp(descending under both readings),run_queries.pyasserts the returned rows are monotonic in the direction Quickwit's parser gives the spelling, and a violation is recorded as anerroron the shape. The 50G core suite (bench/queries.json) carried the same spelling, so Quickwitwindowed_browse_last25results underresults/<date>-aws/before that date have the same caveat.
Read the methodology, query differences and fairness notes →