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.
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.
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.
Monthly cost by engine
| Engine | Fits | Sizing | Monthly cost | Price basis | Made of |
|---|---|---|---|---|---|
| Weaviate Cloud | Yes | 38.01 GiB RAM/replica | $78.85 | List price | Vector dimensions $71.42; Storage $7.43 |
| Qdrant | Yes | 2 × 64gib | $817.76 | Modelled | 2 × 64gib nodes $817.76 |
| Milvus (Zilliz Cloud) | Yes | 38.01 GiB RAM/replica | $1,260 | List price | Compute units $1,260 |
| pgvector (Supabase Postgres) | Yes | 2 × 64gib | $1,939 | List price | 2 × 64gib instances $1,927; Storage $11.84 |
| Pinecone | Yes | 38.01 GiB RAM/replica | $27,962 | List price | Storage $10.96; Reads $27,937; Writes $14.00 |
| Part | GiB |
|---|---|
| Vectors in RAM | 28.61 |
| Full-precision copy (disk) | 28.61 |
| Index graph (RAM) | 0.63 |
| Metadata | 2.33 |
| RAM needed | 38.01 |
| Quantization | RAM per replica | Cheapest engine | Cheapest per month |
|---|---|---|---|
| None (full precision) (current) | 38.01 GiB | Weaviate Cloud | $78.85 |
| Scalar int8 | 10.11 GiB | Weaviate Cloud | $78.85 |
| Product quantization | 3.14 GiB | Weaviate Cloud | $78.85 |
| Binary | 1.98 GiB | Weaviate 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
| Engine | Billing model | Prices used | Basis | Checked |
|---|---|---|---|---|
| Pinecone | usage | Storage $0.33/GB-month, reads $16/M units, writes $4/M units, minimum $50/month | List | 2026-11-05 |
| Qdrant | cluster | Cluster 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 month | Modelled | Not verified |
| Weaviate Cloud | dimension | $0.00465 per million dimensions-month, storage $0.12/GiB, minimum $45/month | List | 2026-11-05 |
| Milvus (Zilliz Cloud) | per million vectors | $63 per million vectors-month at 768 dimensions, scaled by dimensions | List | 2026-11-05 |
| pgvector (Supabase Postgres) | instance | Instances 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 storage | List | 2026-11-05 |
| Index | Overhead | Graph kept in RAM | Basis |
|---|---|---|---|
| HNSW | 2 × M × 4 B × 1.05 | Yes | Documented |
| IVF-Flat | 8 B | Yes | Planning assumption |
| IVF-PQ | 8 B | Yes | Planning assumption |
| Flat | 0 B | Yes | Documented |
| DiskANN | 256 B | No (disk) | Planning assumption |
| Constant | Value |
|---|---|
| Engine overhead factor (f_engine) | 1.3 |
| Disk factor (f_disk) | 1.5 |
| Hours per month | 730 |
| Bytes per float32 dimension | 4 |
| Bytes per float16 dimension | 2 |
| Topic | What catches people out |
|---|---|
| Dimensions and element size | They dominate memory: doubling either doubles the vector bytes. |
| HNSW graphs | The graph needs RAM, not only disk, and adds to the vector bytes. |
| Replicas | Each replica repeats the whole index, so cost multiplies for most engines. |
| Metadata filtering | Filtering on metadata can force payload indexes into RAM. |
| Usage-priced engines | They get expensive with large single namespaces and high query rates; cluster-priced ones stay flat until a tier is exceeded. |
| Embedding model changes | Changing the embedding model means re-embedding everything. |
Last updated 2026-11-05 (dataset 2026-11, refreshed monthly). Entries marked unverified or modelled could not be checked against an official page.
- https://www.pinecone.io/pricing/
- https://docs.pinecone.io/guides/manage-cost/understanding-cost
- https://docs.pinecone.io/reference/api/database-limits/operation-limits
- https://qdrant.tech/pricing/
- https://qdrant.tech/documentation/cloud-pricing-payments/
- https://qdrant.tech/documentation/faq/qdrant-fundamentals/
- https://aws.amazon.com/ec2/pricing/on-demand/
- https://weaviate.io/pricing
- https://weaviate.io/blog/weaviate-cloud-pricing-update
- https://docs.weaviate.io/cloud/platform/billing
- https://zilliz.com/pricing
- https://docs.zilliz.com/docs/cu-types-explained
- https://docs.zilliz.com/docs/dedicated-cluster-cost
- https://milvus.io/docs/limitations.md
- https://supabase.com/docs/guides/platform/compute-and-disk
- https://github.com/pgvector/pgvector
- https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
- https://milvus.io/docs/diskann.md
Three ways to reduce this number
- Use scalar or binary quantization with rescoring: about 4 and 32 times smaller vectors in memory.
- Truncate dimensions if your embedding model supports it.
- 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.