"The documents are 300 GB of PDFs, so the vector store is a few GB, right?" No. The PDF size tells you nothing. A scanned 40 MB contract can become 30 chunks, and a 2 MB text export can become 3,000. What sizes your index is chunk count, dimensions and bytes per dimension. That is multiplication, not a vendor conversation. The formula: chunks x dims x bytes per dim. Then the graph on top, then the replicas, then the re-embed you will eventually do. Worked example, ILLUSTRATIVE ExampleCo (made-up org, arithmetic plus flagged estimates, as of 2026-11-02): - Corpus: 2,000,000 docs x 25 chunks = 50,000,000 chunks, 1024 dims - Raw vectors fp32: 204.8 GB (about 190.7 GiB) - Raw vectors fp16: 102.4 GB - Raw vectors int8: 51.2 GB - Raw vectors binary: 6.4 GB - HNSW graph, M=16: about 6.8 GB (ESTIMATE, engine-specific) - RAM per replica, fp32 + graph: about 211.6 GB (ESTIMATE) - Two replicas for HA: about 423 GB (ESTIMATE) - Model migration, old + new index live: about 846 GB peak (ESTIMATE) - int8 + graph in RAM: about 58 GB, with 204.8 GB fp32 on NVMe for rescoring (ESTIMATE) - Chunk text store: about 100 GB on disk at 2 KB per chunk (ASSUMPTION) - Re-embed: 15 billion tokens, about 208 hours on one GPU at an assumed 20,000 tokens/s (about 2.2 days on four). Use your measured number. Four things people get wrong: First, chunk count is set by your chunking policy. Halve the chunk size and you double the index. A chunking change is a capacity change and should go through the same review as adding a node. Second, the embedding model sets the dimensions. Switching from a 768-dim model to a 1024-dim one is a 33 percent increase in vector RAM plus a full re-embed, and during the cutover you carry both indexes. Model choice is a capacity decision and a migration decision. Third, quantization is not free RAM. int8 or binary with fp32 rescoring can work well, or it can quietly drop the one chunk your auditor asks about. Measure recall on your own queries before you trust it.