{
  "generatedBy": "bench.mjs",
  "startedAt": "2026-10-06T05:53:22.627Z",
  "finishedAt": "2026-10-06T05:53:22.735Z",
  "machine": {
    "cpu": "Apple M1",
    "os": "Darwin 26.3",
    "arch": "arm64",
    "node": "v22.18.0",
    "python": "Python 3.13.5"
  },
  "metricCount": 70,
  "metrics": [
    {
      "metric": "dataset",
      "value": "10000 x 384 float32, numpy default_rng(42), L2-normalized, cosine",
      "unit": ""
    },
    {
      "metric": "queries",
      "value": "100 x top-10, numpy default_rng(7), 10 warm-up queries first",
      "unit": ""
    },
    {
      "metric": "host_swap_used_at_start",
      "value": "12724.25M",
      "unit": "",
      "note": "sysctl vm.swapusage before the runs"
    },
    {
      "metric": "qdrant_image",
      "value": "qdrant sha256:b7b0444c4c35",
      "unit": "",
      "note": "image and digest prefix pulled on 2026-10-06"
    },
    {
      "metric": "qdrant_image_disk",
      "value": "298MB",
      "unit": "",
      "note": "docker image ls SIZE (containerd store)"
    },
    {
      "metric": "qdrant_ready_s",
      "value": 0.25,
      "unit": "s",
      "note": "docker run until the readiness check passed",
      "n": 1
    },
    {
      "metric": "qdrant_mem_empty_mib",
      "value": 231.9,
      "unit": "MiB",
      "note": "docker stats MEM USAGE 5 s after ready, no data"
    },
    {
      "metric": "qdrant_mem_peak_during_run_mib",
      "value": 520.4,
      "unit": "MiB",
      "note": "max docker stats MEM USAGE sampled during both configurations",
      "n": 35
    },
    {
      "metric": "qdrant_mem_at_rest_mib",
      "value": 329.4,
      "unit": "MiB",
      "note": "median of 3 samples after the runs, both 10k collections loaded",
      "n": 3
    },
    {
      "metric": "qdrant_default_insert_s",
      "value": 1.58,
      "unit": "s",
      "note": "upsert(wait=True) in 500-point batches",
      "n": 1
    },
    {
      "metric": "qdrant_default_indexed_vectors",
      "value": 0,
      "unit": "vectors",
      "note": "indexed_vectors_count after the optimizer went idle; segments 4, indexing_threshold 10000 KB"
    },
    {
      "metric": "qdrant_default_p50_ms",
      "value": 4.52,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "qdrant_default_p95_ms",
      "value": 5.52,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "qdrant_default_recall_at_10",
      "value": 1,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "qdrant_default_hnsw_settings",
      "value": {
        "m": 16,
        "ef_construct": 100,
        "full_scan_threshold_kb": 10000,
        "hnsw_ef": "default (ef_construct)"
      },
      "unit": "",
      "note": "as reported back by the engine where possible"
    },
    {
      "metric": "qdrant_matched_insert_s",
      "value": 1.73,
      "unit": "s",
      "note": "upsert(wait=True) in 500-point batches",
      "n": 1
    },
    {
      "metric": "qdrant_matched_indexed_vectors",
      "value": 10000,
      "unit": "vectors",
      "note": "indexed_vectors_count after the optimizer went idle; segments 4, indexing_threshold 1000 KB"
    },
    {
      "metric": "qdrant_matched_index_build_s",
      "value": 4.15,
      "unit": "s",
      "note": "time from last upsert until all 10,000 vectors were HNSW-indexed",
      "n": 1
    },
    {
      "metric": "qdrant_matched_p50_ms",
      "value": 4.24,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "qdrant_matched_p95_ms",
      "value": 4.76,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "qdrant_matched_recall_at_10",
      "value": 0.754,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "qdrant_matched_hnsw_settings",
      "value": {
        "m": 16,
        "ef_construct": 100,
        "full_scan_threshold_kb": 10,
        "hnsw_ef": 64
      },
      "unit": "",
      "note": "as reported back by the engine where possible"
    },
    {
      "metric": "qdrant_numpy_exact_100_queries_ms",
      "value": 57.11,
      "unit": "ms",
      "note": "ground truth: numpy matrix product + argsort for all 100 queries at once, in-process"
    },
    {
      "metric": "pgvector_image",
      "value": "pgvector sha256:ac08538c6f8b",
      "unit": "",
      "note": "image and digest prefix pulled on 2026-10-06"
    },
    {
      "metric": "pgvector_image_disk",
      "value": "656MB",
      "unit": "",
      "note": "docker image ls SIZE (containerd store)"
    },
    {
      "metric": "pgvector_ready_s",
      "value": 1.51,
      "unit": "s",
      "note": "docker run until the readiness check passed",
      "n": 1
    },
    {
      "metric": "pgvector_mem_empty_mib",
      "value": 22.8,
      "unit": "MiB",
      "note": "docker stats MEM USAGE 5 s after ready, no data"
    },
    {
      "metric": "pgvector_mem_peak_during_run_mib",
      "value": 158.4,
      "unit": "MiB",
      "note": "max docker stats MEM USAGE sampled during both configurations",
      "n": 5
    },
    {
      "metric": "pgvector_mem_at_rest_mib",
      "value": 100.5,
      "unit": "MiB",
      "note": "median of 3 samples after the runs, both 10k collections loaded",
      "n": 3
    },
    {
      "metric": "pgvector_default_insert_s",
      "value": 0.16,
      "unit": "s",
      "note": "COPY ... FORMAT BINARY, one transaction",
      "n": 1
    },
    {
      "metric": "pgvector_default_index_build_s",
      "value": 2.89,
      "unit": "s",
      "note": "CREATE INDEX ... USING hnsw (vector_cosine_ops) after the load",
      "n": 1
    },
    {
      "metric": "pgvector_default_p50_ms",
      "value": 1.07,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "pgvector_default_p95_ms",
      "value": 1.51,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "pgvector_default_recall_at_10",
      "value": 0.372,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "pgvector_default_hnsw_settings",
      "value": {
        "m": "default 16",
        "ef_construction": "default 64",
        "ef_search": "40"
      },
      "unit": "",
      "note": "as reported back by the engine where possible"
    },
    {
      "metric": "pgvector_default_query_plan_uses_index",
      "value": true,
      "unit": "",
      "note": "EXPLAIN shows an Index Scan on the HNSW index"
    },
    {
      "metric": "pgvector_default_index_size",
      "value": "20 MB",
      "unit": "",
      "note": "pg_relation_size of the HNSW index"
    },
    {
      "metric": "pgvector_default_exact_scan_p50_ms",
      "value": 4.04,
      "unit": "ms",
      "note": "same queries before the index existed (sequential scan)",
      "n": 100
    },
    {
      "metric": "pgvector_default_exact_scan_p95_ms",
      "value": 5.12,
      "unit": "ms",
      "note": "sequential scan",
      "n": 100
    },
    {
      "metric": "pgvector_default_exact_scan_recall_at_10",
      "value": 1,
      "unit": "",
      "note": "sequential scan"
    },
    {
      "metric": "pgvector_matched_insert_s",
      "value": 0.27,
      "unit": "s",
      "note": "COPY ... FORMAT BINARY, one transaction",
      "n": 1
    },
    {
      "metric": "pgvector_matched_index_build_s",
      "value": 3.48,
      "unit": "s",
      "note": "CREATE INDEX ... USING hnsw (vector_cosine_ops) after the load",
      "n": 1
    },
    {
      "metric": "pgvector_matched_p50_ms",
      "value": 1.34,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "pgvector_matched_p95_ms",
      "value": 1.79,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "pgvector_matched_recall_at_10",
      "value": 0.479,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "pgvector_matched_hnsw_settings",
      "value": {
        "m": 16,
        "ef_construction": 100,
        "ef_search": "64"
      },
      "unit": "",
      "note": "as reported back by the engine where possible"
    },
    {
      "metric": "pgvector_matched_query_plan_uses_index",
      "value": true,
      "unit": "",
      "note": "EXPLAIN shows an Index Scan on the HNSW index"
    },
    {
      "metric": "pgvector_matched_index_size",
      "value": "20 MB",
      "unit": "",
      "note": "pg_relation_size of the HNSW index"
    },
    {
      "metric": "pgvector_numpy_exact_100_queries_ms",
      "value": 60.24,
      "unit": "ms",
      "note": "ground truth: numpy matrix product + argsort for all 100 queries at once, in-process"
    },
    {
      "metric": "chroma_image",
      "value": "chroma sha256:1e0b73a187a2",
      "unit": "",
      "note": "image and digest prefix pulled on 2026-10-06"
    },
    {
      "metric": "chroma_image_disk",
      "value": "822MB",
      "unit": "",
      "note": "docker image ls SIZE (containerd store)"
    },
    {
      "metric": "chroma_ready_s",
      "value": 0.1,
      "unit": "s",
      "note": "docker run until the readiness check passed",
      "n": 1
    },
    {
      "metric": "chroma_mem_empty_mib",
      "value": 11,
      "unit": "MiB",
      "note": "docker stats MEM USAGE 5 s after ready, no data"
    },
    {
      "metric": "chroma_mem_peak_during_run_mib",
      "value": 85,
      "unit": "MiB",
      "note": "max docker stats MEM USAGE sampled during both configurations",
      "n": 8
    },
    {
      "metric": "chroma_mem_at_rest_mib",
      "value": 84.8,
      "unit": "MiB",
      "note": "median of 3 samples after the runs, both 10k collections loaded",
      "n": 3
    },
    {
      "metric": "chroma_default_insert_s",
      "value": 6.86,
      "unit": "s",
      "note": "col.add in 500-vector batches; HNSW built during insert",
      "n": 1
    },
    {
      "metric": "chroma_default_p50_ms",
      "value": 4.56,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "chroma_default_p95_ms",
      "value": 10.45,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "chroma_default_recall_at_10",
      "value": 0.533,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "chroma_default_collection_metadata",
      "value": {
        "hnsw:space": "cosine"
      },
      "unit": "",
      "note": "Chroma collection metadata as created"
    },
    {
      "metric": "chroma_matched_insert_s",
      "value": 6.27,
      "unit": "s",
      "note": "col.add in 500-vector batches; HNSW built during insert",
      "n": 1
    },
    {
      "metric": "chroma_matched_p50_ms",
      "value": 2.95,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "chroma_matched_p95_ms",
      "value": 4.82,
      "unit": "ms",
      "note": "top-10 query round trip",
      "n": 100
    },
    {
      "metric": "chroma_matched_recall_at_10",
      "value": 0.421,
      "unit": "",
      "note": "share of exact top-10 ids returned, 100 queries"
    },
    {
      "metric": "chroma_matched_collection_metadata",
      "value": {
        "hnsw:space": "cosine",
        "hnsw:M": 16,
        "hnsw:construction_ef": 100,
        "hnsw:search_ef": 64
      },
      "unit": "",
      "note": "Chroma collection metadata as created"
    },
    {
      "metric": "chroma_numpy_exact_100_queries_ms",
      "value": 86.9,
      "unit": "ms",
      "note": "ground truth: numpy matrix product + argsort for all 100 queries at once, in-process"
    },
    {
      "metric": "qdrant_version",
      "value": "1.19.2",
      "unit": "",
      "note": "from the server (Qdrant startup log, SELECT extversion / SHOW server_version, Chroma get_version)"
    },
    {
      "metric": "pgvector_version",
      "value": "pgvector 0.8.7 on PostgreSQL 17.11",
      "unit": "",
      "note": "from the server (Qdrant startup log, SELECT extversion / SHOW server_version, Chroma get_version)"
    },
    {
      "metric": "chroma_version",
      "value": "1.0.0",
      "unit": "",
      "note": "from the server (Qdrant startup log, SELECT extversion / SHOW server_version, Chroma get_version)"
    },
    {
      "metric": "clients",
      "value": "chromadb-client 1.5.9, numpy 2.5.3, pgvector 0.5.0, psycopg 3.3.6, qdrant-client 1.19.1",
      "unit": "",
      "note": "uv pip list of the Python 3.12 venv"
    }
  ],
  "log": [
    ""
  ]
}
