GenericVectorBuilder

Benchmark

Summary and all runs

Vector engine benchmark: eshoponweb

Run started 4 Oct 2026, 13:08 UTC. Data: eShopOnWeb, 524 vectors. Queries: 20 labelled questions.

Machine: CPU Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz; Logical CPUs 8; RAM (GiB) 62.7; OS Ubuntu 24.04.5 LTS, kernel 6.8.0-142-generic; Governor not recorded; Partition not recorded; Release build.

Warm-up, as this run's notes record it: Latency is client-side wall time around each search (network and driver included), one query at a time, after 20 warm-up queries; at least 200 samples (small query sets are repeated).

Enginep50 (ms)Searches per second, one searcherSearches per second, eight searchers at onceExact mode p50 (ms)Client CPU per search, one searcher (ms)Recall in hitsFlags
Chroma5.98194600--200 of 200Pm
ClickHouse6.221686656.77-199 of 200
DuckDB4.052551714.47-200 of 200
Elasticsearch11.761602,5444.41-200 of 200Pm
MariaDB1.694584,5581.66-200 of 200
Milvus7.121541,691--200 of 200
MongoDB Atlas Local5.512532,9281.92-200 of 200Pm
OpenSearch10.621451,9674.29-200 of 200Pm
Oracle 23ai Free4.852895095.63-200 of 200Pm
Qdrant (HNSW)2.264083,3550.87-200 of 200
Qdrant (exact)2.304253,213--200 of 200
Redis1.867832,1071.48-200 of 200Pm
SQL Server 20256.72192914--200 of 200Pm
SQL Server 2025 + DiskANN4.572271,0254.28-193 of 200
Typesense11.8910694412.50-200 of 200Pm
Vespa6.412011,5641.95-200 of 200Pm
Weaviate15.3382523--200 of 200Pm
pgvector3.033993,8232.59-200 of 200Pm
sqlite-vec2.075274581.80-200 of 200

Engines are listed in alphabetical order. The table does not rank them.

A dash means the table has no figure there.

The small markers after an engine name are flags. Hover a marker for its evidence, or read the list below the tables.

  • Pm p50-mean-inconsistent The p50 and the mean from the one-searcher pass disagree by more than the limit named in the evidence.
Evidence behind the flags
  • Chroma p50-mean-inconsistent p50 5.98 ms, mean 5.16 ms, p50/mean 1.16; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Elasticsearch p50-mean-inconsistent p50 11.76 ms, mean 6.25 ms, p50/mean 1.88; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • MongoDB Atlas Local p50-mean-inconsistent p50 5.51 ms, mean 3.95 ms, p50/mean 1.39; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • OpenSearch p50-mean-inconsistent p50 10.62 ms, mean 6.91 ms, p50/mean 1.54; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Oracle 23ai Free p50-mean-inconsistent p50 4.85 ms, mean 3.47 ms, p50/mean 1.40; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Redis p50-mean-inconsistent p50 1.86 ms, mean 1.28 ms, p50/mean 1.45; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • SQL Server 2025 p50-mean-inconsistent p50 6.72 ms, mean 5.22 ms, p50/mean 1.29; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Typesense p50-mean-inconsistent p50 11.89 ms, mean 9.42 ms, p50/mean 1.26; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Vespa p50-mean-inconsistent p50 6.41 ms, mean 4.96 ms, p50/mean 1.29; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • Weaviate p50-mean-inconsistent p50 15.33 ms, mean 12.26 ms, p50/mean 1.25; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times
  • pgvector p50-mean-inconsistent p50 3.03 ms, mean 2.51 ms, p50/mean 1.21; limits: p50 above the mean by more than 1.15 times, or the mean above p50 by more than 1.5 times

Full results

This report is printed as the run wrote it, except for any sentence a note above it says was left out. This page does not check the engine texts in it. The summary page's facts table gives the label of each fact it uses.

Run 2026-10-04T13:08:58Z (run-all). Command line:

~/ForClaude/GenericVectorBuilder/src/GenericVectorBuilder.Bench/bin/Release/net10.0/GenericVectorBuilder.Bench.dll run-all --pipeline eshoponweb --targets sql,sql-diskann,qdrant,qdrant-hnsw,pgvector,mariadb,oracle,redis,mongodb,clickhouse,milvus,weaviate,chroma,elasticsearch,opensearch,typesense,vespa,duckdb,sqlitevec --queries golden
engineindexload rows/sp50 msp95 msp99 msQPS@1QPS@8recall@10nDCG@10RAMdisk
sqlexact VECTOR_DISTANCE cosine, no vector index (full scan)5656.729.4210.9191.6914.01.0000.5184.13 GiB5.15 MiB
sql-diskannDiskANN (preview) via VECTOR_SEARCH, cosine, build {"StartId":"306", "L":"48", "M":"8", "R":"48"}7134.575.506.41226.91025.40.9650.5264.13 GiB4.52 MiB
qdrantexact search (the builder's setting), HNSW m=16 ef_construct=100 built but not used2,7212.303.113.65425.13213.11.0000.5184.21 GiB328.14 MiB
qdrant-hnswHNSW m=16 ef_construct=100, hnsw_ef=server default, cosine4,9682.262.863.36407.93355.31.0000.5184.21 GiB328.14 MiB
pgvectorHNSW vector_cosine_ops m=16 ef_construction=128, hnsw.ef_search=100 per query, float32 vector(n), cosine; exact mode = same query with index scans off (sequential scan)5373.033.683.87399.13822.71.0000.518100.1 MiB7.72 MiB
mariadbVECTOR INDEX (HNSW variant) DISTANCE=cosine, M=16 (no ef_construction setting exists), mhnsw_ef_search=3200, mhnsw_max_cache_size 4G; exact mode = IGNORE INDEX full scan6811.692.432.65457.84558.41.0000.518170.3 MiB22.01 MiB
oracleHNSW in-memory neighbor graph NEIGHBORS=16 EFCONSTRUCTION=128, EFSEARCH=100 per query, cosine; exact mode = FETCH EXACT FIRST (full scan)1,4864.856.687.28288.5508.71.0000.5182.14 GiB0 B
redisHNSW TYPE FLOAT32 M=16 EF_CONSTRUCTION=128, EF_RUNTIME=100 per query, cosine; exact mode = FLAT index built on first exact query10,7661.862.193.01783.32106.81.0000.51820.88 MiB0 B
mongodbvectorSearch index, HNSW maxEdges=16 numEdgeCandidates=128, float32 binData, cosine, numCandidates=20x hits (min 100); exact mode = $vectorSearch exact:true2,3435.519.3210.1253.42927.71.0000.518666.6 MiB115.24 KiB
clickhousevector_similarity HNSW cosineDistance, quantization bf16, M=16 ef_construction=128, hnsw_candidate_list_size_for_search=256, rescoring off; exact mode = full scan with skip indexes off2,6636.228.529.41168.1665.00.9950.5281019 MiB1018 MiB
milvusHNSW M=16 efConstruction=128, ef=100, metric COSINE, Strong consistency searches; approximate only (no exact mode)7397.127.9310.4154.41690.91.0000.518194.1 MiB9.29 MiB
weaviateHNSW maxConnections(M)=16 efConstruction=128, ef=-1 (dynamic: limit x 8 clamped 100..500), cosine, no quantization; approximate only (no exact mode)83615.323.025.081.5523.41.0000.518107.8 MiB2.88 MiB
chromaHNSW M=16 ef_construction=128, ef_search=100 (Chroma default), cosine; approximate only (no exact mode)4615.986.737.50193.9600.31.0000.51849.23 MiB414.16 KiB
elasticsearchHNSW float32, no quantization, m=16, ef_construction=128, cosine; search k=top, num_candidates=100; 1 shard, 0 replicas50711.815.317.2159.92544.21.0000.5182.6 GiB9.45 MiB
opensearchfaiss HNSW float32, no compression, m=16, ef_construction=128, cosinesimil; search k=top, ef_search=100; 1 shard, 0 replicas55110.614.115.2144.81966.61.0000.5182.59 GiB16.07 MiB
typesenseHNSW float32 (hnswlib), m=16, ef_construction=128, cosine; search k=top, ef=100; exact mode = filter ordinal:>=0 with flat_search_cutoff; index held in memory76411.912.913.3106.1944.01.0000.518119.7 MiB402.53 MiB
vespaHNSW float32 tensor, prenormalized-angular (cosine), max-links-per-node=16, neighbors-to-explore-at-insert=128; search targetHits=top, ef=100 via exploreAdditionalHits; exact mode = approximate:false; vectors held in memory4946.419.5814.1201.41563.81.0000.5182.85 GiB5.51 MiB
duckdbHNSW (vss extension) FLOAT[n] metric=cosine m=16 ef_construction=128, ef_search=100 per connection, persistent (hnsw_enable_experimental_persistence=true, checkpoint_threshold=256MB); exact mode = array_cosine_similarity sequential scan; score = 1 - cosine distance1,4834.055.396.49255.1171.21.0000.518-2.9 MiB
sqlitevecvec0 brute-force scan, no ANN index (exact), float32, cosine distance, default chunk_size=1024; score = 1 - cosine distance2,7182.072.352.55526.6457.81.0000.518-9.72 MiB

Details per target

SQL Server 2025 sql
SQL Server 2025 + DiskANN sql-diskann
Qdrant (exact) qdrant
Qdrant (HNSW) qdrant-hnsw
pgvector
MariaDB mariadb
Oracle 23ai Free oracle
Redis redis
MongoDB Atlas Local mongodb
ClickHouse clickhouse
Milvus milvus
Weaviate weaviate
Chroma chroma
Elasticsearch elasticsearch
OpenSearch opensearch
Typesense typesense
Vespa vespa
DuckDB duckdb
sqlite-vec sqlitevec

Notes

Raw files

The raw files below hold the recorded statements that the corrections above refer to, as written.