Free tool

Vector database sizing calculator

Estimate the RAM (and disk, where the docs give it) that the vector search structures need in Elasticsearch, OpenSearch and Qdrant, side by side. Every number comes from a formula in the engine's official docs, shown with your inputs filled in.

Copies = replicas + 1

Default 16

Elasticsearch

int8 (HNSW)

RAM (GiB)
20.6
Disk (GiB)
96.9
How this is calculated
  • quantized vector bytes = d + 16 = 1040
  • HNSW graph bytes = 4 x m = 4 x 16 = 64
  • RAM = N x (1040 + 64) x 2 copies = 10,000,000 x 1104 x 2 = 20.564 GiB
  • raw float vectors (disk only) = d x 4 = 4096
  • disk = N x (4096 raw + 1040 quantized + 64 graph) x 2 copies = 96.858 GiB

Quantized options assume float source vectors. Raw vectors stay on disk for rescoring, so they count toward disk, not RAM.

Source: official docs

OpenSearch (Faiss)

float32 (no quantization)

RAM (GiB)
86.5
Disk (GiB)
Not given in docs
How this is calculated
  • vector bytes = 4 x d = 4096
  • per vector = 1.1 x (4096 + 8 x 16) = 4,646.4 bytes
  • RAM = 4,646.4 x 10,000,000 x 2 copies = 86.546 GiB

Native (off-heap) memory for the Faiss graph. The docs give no disk formula. Replica shards are full copies, so each one is counted.

Source: official docs

Qdrant

float32 (no quantization)

RAM (GiB)
80.1
Disk (GiB)
80.1
How this is calculated
  • base = N x replication_factor = 10,000,000 x 2 = 20,000,000
  • dense_size = base x d x 4 bytes = 76.294 GiB
  • hnsw_size = base x m x 2 x 4 x 1.2 = 20,000,000 x 16 x 9.6 = 2.861 GiB
  • id_tracker = base x 52 = 0.969 GiB
  • RAM = dense + hnsw + id_tracker = 80.124 GiB
  • disk = dense + hnsw + id_tracker = 80.124 GiB

Payloads are cold (on disk) by default; caching them in RAM costs about base x payload x 1.5 x 3. The docs suggest about 20% headroom on top of these totals.

Source: official docs

What if: quantization options

Elasticsearch optionRAM (GiB)Disk (GiB)
77.577.5
39.339.3
20.320.3
3.63.6
20.696.9
1187.3
3.880.1
5.481.7

Smaller encodings trade some accuracy for memory. How much depends on your embeddings and queries, so measure recall on your data before you commit.

These are estimates of the vector index memory only, for all copies (primary plus replicas), in binary GiB (1 GiB = 230 bytes; some docs write "GB" for the same unit). They are not total cluster sizing: JVM heap, the OS, other fields, text indexes, segment merges and query load all need memory on top. Benchmark before you buy hardware.

Related: Elasticsearch consulting, OpenSearch consulting, Qdrant consulting and Elasticsearch vs Qdrant.

FAQ

Vector sizing questions

How much RAM does a vector index need?

+

For HNSW, roughly the vector bytes plus the graph links, per vector, per copy. Elasticsearch documents N x (vector bytes + 4 x m), OpenSearch Faiss documents 1.1 x (vector bytes + 8 x m) per vector, and Qdrant documents vectors plus base x m x 2 x 4 x 1.2 for the graph. The calculator applies each formula to your numbers.

Does quantization reduce the RAM needed?

+

Yes. Quantized vectors are what has to stay in memory for search, while the full-precision originals can stay on disk for rescoring (Elasticsearch, and Qdrant when originals are on disk). Disk usage goes up slightly because both copies are stored. Accuracy impact depends on your data, so measure recall on your own queries.

Do replicas need their own memory?

+

Yes. Each replica is a full copy of the index, so the calculator multiplies by replicas + 1. Elasticsearch documents this for disk, and Qdrant counts replicas in its base point count.

Is this the total size of my cluster?

+

No. It covers the vector search structures only. JVM heap, the operating system, other fields, text indexes, merges, payload indexes and query load all need memory too. Use the result as a floor and confirm with a benchmark on your data.

Sizing a vector cluster?

Tell us about your data, dimensions and latency targets. We will help you benchmark and size Elasticsearch, OpenSearch or Qdrant for your workload.