Skip to content

Vector database cost calculator: Pinecone vs Qdrant vs Weaviate vs Milvus vs pgvector

Size the RAM and disk a vector corpus needs, then price it on five vector databases side by side.

Runs in your browser. Your inputs are not uploaded.Open formulaPrices updated November 2026
How to verify this

Open your browser's network tab and change an input: nothing is sent. The page computes with the formulas and the dated price table below. Some entries in that table could not be checked against an official page and are labelled. The same engine answers the API and the MCP tool, so you can reproduce any scenario from code.

Jump to results

Your inputs

Corpus
One vector per chunk. The page can fill this from documents × chunks per document; the API takes only total_chunks.
The full-precision copy.
Index
A compressed in-memory copy. The full-precision copy stays on disk for rescoring.
Corpus
Index
HNSW only.
Traffic
Average.
Recorded with the result; it does not change any price in this dataset.
Index
Compare
Engines to compare
Corpus
For the embedding cost.
Enter your embedding model's price.
Compare
Analytics only; it never changes the numbers.
Traffic
Replaces the usage-priced engine's read-unit assumption.

5,000,000 × 1536-dimension vectors need 38.01 GiB RAM per replica (76.02 GiB across 2 replicas). Cheapest fit: Weaviate Cloud at $78.85/month.

  • Note:Pinecone bills reads by namespace size; the default rule gives 33.22 read units per query. Real cost depends on your query shape. Set read_units_per_query_override to use your own figure.
  • Note:Prices for Qdrant are modelled or could not be fully checked against a vendor page. Treat these figures as estimates, get a quote and measure your own index.
RAM per replica
38.01 GiB
76.02 GiB across replicas
Disk per replica
47.35 GiB
94.7 GiB across replicas
Bytes per vector in RAM
6,144
None (full precision), graph 134 B
Cheapest fit
$78.85
Weaviate Cloud per month

Monthly cost by engine

Engine comparison
EngineFitsSizingMonthly costPrice basisMade of
Weaviate CloudYes38.01 GiB RAM/replica$78.85List priceVector dimensions $71.42; Storage $7.43
QdrantYes2 × 64gib$817.76Modelled2 × 64gib nodes $817.76
Milvus (Zilliz Cloud)Yes38.01 GiB RAM/replica$1,260List priceCompute units $1,260
pgvector (Supabase Postgres)Yes2 × 64gib$1,939List price2 × 64gib instances $1,927; Storage $11.84
PineconeYes38.01 GiB RAM/replica$27,962List priceStorage $10.96; Reads $27,937; Writes $14.00
Memory breakdown per replica
PartGiB
Vectors in RAM28.61
Full-precision copy (disk)28.61
Index graph (RAM)0.63
Metadata2.33
RAM needed38.01
Quantization levers
QuantizationRAM per replicaCheapest engineCheapest per month
None (full precision) (current)38.01 GiBWeaviate Cloud$78.85
Scalar int810.11 GiBWeaviate Cloud$78.85
Product quantization3.14 GiBWeaviate Cloud$78.85
Binary1.98 GiBWeaviate Cloud$78.85

Embedding: $200.00 one-off, $20.00 per month to re-embed changed chunks. Traffic assumed: 52,560,000 queries and 500,000 upserts per month, 33.22 read units per query (price-page rule).

Monthly cost as your corpus (or traffic) grows

Calculating the range…

How it is calculated

Per-vector sizes

s_full = d × b
s_mem  = d × q
g_hnsw = 2 × M × 4 × 1.05      (IVF and DiskANN use dataset values)

RAM and disk per replica

RAM  = N × (s_mem + g) × f_engine ÷ 2^30      (+ N × meta ÷ 2^30 if metadata is kept in RAM)
Disk = N × (s_full + s_mem [if quantized] + meta + g) × f_disk ÷ 2^30
Totals = per replica × replicas

Cluster-priced engines

pick the smallest tier with RAM and disk at or above the need;
if none fits, use several nodes of the largest tier
cost = tier price × nodes × replicas

Usage-priced engines

storage = N × (s_full + meta) in GB × storage rate
reads   = queries per month × read units per query × rate
writes  = upserts per month × write units per record × rate
cost    = max(monthly minimum, storage + reads + writes)

pgvector

RAM ≥ 1.2 × N × (s_mem + g) ÷ 2^30
cost = (instance hourly rate × 730 + storage) × replicas

Embedding

one-off = N × chunk tokens ÷ 10^6 × embedding price
monthly = one-off × upserts % ÷ 100

Assumptions

  • N is the number of vectors, d the dimensions, b the bytes per element of the stored type (4 or 2) and q the bytes per dimension of the in-memory copy (1, 0.25 or 0.125 when quantized; otherwise b). 1 GiB = 2^30 bytes.
  • f_engine (1.3) covers engine overhead and f_disk (1.5) covers snapshots and write-ahead log. Both come from the dataset.
  • IVF-PQ keeps only a product-quantized copy in memory. DiskANN keeps its graph on disk. IVF and DiskANN overheads are planning assumptions.
  • Usage-priced engines bill reads by namespace size; the read units per query shown are an assumption you can override. top-k is recorded but does not change any price here.
  • Qdrant is modelled as self-hosted on AWS instances, not a Qdrant Cloud quote (its price list is not published in readable form). Pinecone, Weaviate and Zilliz rates are the lowest listed 'from' or range rates, and pgvector is priced on Supabase compute add-ons, so other regions, plans and hosts can cost more. Check the notes on each engine.
  • A result that uses a modelled or unchecked engine price, or an IVF or DiskANN index (whose per-vector overhead is a planning assumption), carries a DATASET_UNVERIFIED notice naming what to treat as an estimate.
  • Totals shown for RAM and disk are the per-replica figure as displayed times replicas. Network, backups, support and taxes are not included.

The data behind it

Vector database price models
EngineBilling modelPrices usedBasisChecked
PineconeusageStorage $0.33/GB-month, reads $16/M units, writes $4/M units, minimum $50/monthList2026-11-05
QdrantclusterCluster tiers 16 GiB $102.22, 32 GiB $204.44, 64 GiB $408.88, 128 GiB $817.76, 256 GiB $1635.52, 512 GiB $3271.04 per monthModelledNot verified
Weaviate Clouddimension$0.00465 per million dimensions-month, storage $0.12/GiB, minimum $45/monthList2026-11-05
Milvus (Zilliz Cloud)per million vectors$63 per million vectors-month at 768 dimensions, scaled by dimensionsList2026-11-05
pgvector (Supabase Postgres)instanceInstances 8 GiB $0.1517/h, 16 GiB $0.2877/h, 32 GiB $0.562/h, 64 GiB $1.32/h, 128 GiB $2.562/h, 192 GiB $3.836/h, 256 GiB $5.12/h plus storageList2026-11-05
Index overhead per vector
IndexOverheadGraph kept in RAMBasis
HNSW2 × M × 4 B × 1.05YesDocumented
IVF-Flat8 BYesPlanning assumption
IVF-PQ8 BYesPlanning assumption
Flat0 BYesDocumented
DiskANN256 BNo (disk)Planning assumption
Sizing constants
ConstantValue
Engine overhead factor (f_engine)1.3
Disk factor (f_disk)1.5
Hours per month730
Bytes per float32 dimension4
Bytes per float16 dimension2
Hidden gotchas
TopicWhat catches people out
Dimensions and element sizeThey dominate memory: doubling either doubles the vector bytes.
HNSW graphsThe graph needs RAM, not only disk, and adds to the vector bytes.
ReplicasEach replica repeats the whole index, so cost multiplies for most engines.
Metadata filteringFiltering on metadata can force payload indexes into RAM.
Usage-priced enginesThey get expensive with large single namespaces and high query rates; cluster-priced ones stay flat until a tier is exceeded.
Embedding model changesChanging the embedding model means re-embedding everything.

Three ways to reduce this number

  1. Use scalar or binary quantization with rescoring: about 4 and 32 times smaller vectors in memory.
  2. Truncate dimensions if your embedding model supports it.
  3. Keep payloads on disk and index only the fields you filter on.

Use it from code

The same engine is available as a REST endpoint and as an MCP tool named calc_rag_vector_db_sizing_comparator. Your scenario as an API call:

curl -X POST 'https://api.x12i.com/v1/calc/rag-vector-db-sizing-comparator' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "input": {
    "total_chunks": 5000000,
    "vector_dimensions": 1536,
    "vector_dtype": "float32",
    "quantization": "none",
    "metadata_bytes_per_vector": 500,
    "index_type": "hnsw",
    "hnsw_m": 16,
    "replicas": 2,
    "queries_per_second": 20,
    "top_k": 10,
    "monthly_upserts_pct": 10,
    "payload_in_ram": false,
    "engines": [
      "pinecone",
      "qdrant",
      "weaviate",
      "milvus",
      "pgvector"
    ],
    "avg_chunk_tokens": 400,
    "embedding_usd_per_mtok": 0.1,
    "preferred_vector_db": "none"
  },
  "options": {
    "explain": false
  }
}'

Schema: GET /v1/calc/rag-vector-db-sizing-comparator/schema

Frequently asked questions

How much RAM does a million vectors need?

At 1536 dimensions in float32 with an HNSW index (M = 16), a million vectors take about 5.8 GiB for the vectors and graph and about 7.6 GiB with the engine overhead factor. Scalar int8 cuts the vector part to a quarter.

Pinecone vs Qdrant vs pgvector: which is cheaper?

It depends on size and traffic. Usage-priced engines such as Pinecone are cheap for small, quiet indexes and rise with query rate and namespace size. Cluster- and instance-priced engines are flat until a tier is outgrown. Run your numbers above to see where the lines cross.

How much recall does quantization cost?

Scalar int8 usually loses little when you rescore with the full-precision copy. Binary and product quantization lose more, especially below 768 dimensions. Measure recall on your own queries before you commit.