← all runs
Laion-5M — 2026-08-13
i4i.xlarge · peak recall 0.9745 @ 62 QPS
QPS at recall
| Recall | Meerkat | vchordrq | pgvector HNSW | Δ vs best competitor |
|---|
| 0.90 | 2,299 | 1,556 | 1,144 | +48% |
| 0.95 | 1,642 | 984 | 796 | +67% |
| 0.99 | — (max r=0.988) | 188 | 273 | — |
Latency at recall
| Meerkat | vchordrq | pgvector HNSW | Δ vs best competitor |
|---|
| @ recall 0.90 | | | | |
| p50 | 0.43 ms | 0.63 ms | 0.85 ms | -32% |
| p95 | 0.52 ms | 0.73 ms | 1.27 ms | -28% |
| p99 | 0.58 ms | 0.82 ms | 1.59 ms | -30% |
| @ recall 0.95 | | | | |
| p50 | 0.61 ms | 1.00 ms | 1.24 ms | -39% |
| p95 | 0.73 ms | 1.19 ms | 1.77 ms | -38% |
| p99 | 0.84 ms | 1.34 ms | 2.20 ms | -37% |
| @ recall 0.99 | | | | |
| p50 | — | 5.25 ms | 3.68 ms | — |
| p95 | — | 6.11 ms | 5.22 ms | — |
| p99 | — | 6.64 ms | 5.86 ms | — |
All values are taken at exactly the stated recall: each configuration's own sweep is log-interpolated between its two surrounding measured points (measured values are used verbatim on an exact hit) and the best configuration at that recall is shown — values are never interpolated across different configurations. “—” means no single sweep spans that recall; nothing is extrapolated. Recall is distance-based (ann-benchmarks, tie-aware). Insert/update/delete workloads are not measured.
Interpolated on config — Meerkat @0.90: meerkat-fs8 · vchordrq @0.90: vchordrq-laion5m-n8192 · pgvector HNSW @0.90: hnsw-m16 · Meerkat @0.95: meerkat-fs8 · vchordrq @0.95: vchordrq-laion5m-n8192 · pgvector HNSW @0.95: hnsw-m16 · vchordrq @0.99: vchordrq-laion5m-hier190-35k · pgvector HNSW @0.99: hnsw-m16
Build comparison
| Meerkat | vchordrq | pgvector HNSW | Δ vs best competitor |
|---|
| Build time | — | — | 12492 s | — |
| Index size | — | — | 18.7 GB | — |
Build stats are for the configuration backing each column's best operating point: pgvector HNSW = hnsw-m16, prewarmed.
Plots
Pareto svg ·
Distance-recall svg ·
Per-config svg ·
Build times svg ·
Index sizes svgHost
| Instance type | i4i.xlarge |
| Hostname | ip-172-31-87-191 |
| CPU | Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz (4 vCPU) |
| Memory | 31 GB |
| OS | Ubuntu 26.04 LTS |
| Kernel | 7.0.0-1010-aws |
Versions
| rekall | 0.1.0 (dd61107 / main) |
| PostgreSQL | PostgreSQL 18.6 (Ubuntu 18.6-1.pgdg26.04+2) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0, 64-bit |
| meerkat | 0.1.0 (30760bc) |
| pg_buffercache | 1.6 |
| pg_prewarm | 1.2 |
| vchord | 1.1.1 |
| vector | 0.8.6 |
Search
Index builds
| Index | Type | Build time | Size | Workers |
|---|
| hnsw-m16 | pgvector-hnsw | 12491.8s | 18.7 GB | 2 |
| hnsw-m16-efc64 | pgvector-hnsw | 6788.0s | 18.7 GB | 2 |
| mkt-defaults | meerkat | 582.3s | 1.3 GB | 2 |
| vchordrq-laion5m-n8192 | vchordrq | 1233.2s | 20.0 GB | 2 |
Index parameters
hnsw-m16: {"ef_construction":200,"encoding":"vector","m":16}
hnsw-m16-efc64: {"ef_construction":64,"encoding":"vector","m":16}
mkt-defaults: {"boundary_epsilon":null,"centroid_compression":null,"centroid_fastscan":null,"fan_out":null,"fastscan":null,"fastscan_bits":null,"nlist":null,"rerank_vectors":null,"soar_lambda":null}
vchordrq-laion5m-n8192: {"build_threads":4,"lists":[8192],"rerank_n":200,"residual_quantization":true,"spherical_centroids":false}
PostgreSQL settings
effective_cache_size = 4 GB
effective_io_concurrency = 200
huge_pages = try
maintenance_work_mem = 64 MB
max_connections = 100
max_parallel_maintenance_workers = 2
max_parallel_workers = 8
random_page_cost = 4
shared_buffers = 24 GB
wal_level = replica
work_mem = 4 MB