Skip to main content

Qdrant and Milvus at Scale: When Self-Hosted Vector Search Crosses Over From CapEx to Cheaper Than Pinecone's Per-Query Bill

Published 12 min readMike ThriftMike Thrift
Qdrant and Milvus at Scale: When Self-Hosted Vector Search Crosses Over From CapEx to Cheaper Than Pinecone's Per-Query Bill
On this page

Your Pinecone bill was $52 last quarter. This quarter it is $1,300, and you changed nothing except succeeding. More users, more documents, more queries — the exact growth you wanted — and every unit of it is metered at $16 to $18 per million read units on top of storage. That is the moment self-hosting stops being an engineering hobby and becomes a finance question: at what point is a fixed box running Qdrant or Milvus cheaper than the per-query meter, and how do you prove it before you migrate?

This post walks through how Pinecone serverless actually meters, what a self-hosted Qdrant or Milvus deployment really costs once you count engineering time, the breakeven math that locates your crossover point, and how each side lands on your books — because a server you own and a bill you pay are not the same kind of money.

How Pinecone Serverless Actually Meters​

Pinecone's serverless pricing has four dials, and only one of them behaves like a subscription. The Standard plan carries a $50 monthly minimum — you pay that even in a quiet month — and above it you pay as you go on three usage dimensions plus egress.

Storage is the smallest dial: $0.33 per GB per month. A 10-million-vector index of 1536-dimension embeddings runs roughly 60 GB, so about $20 a month. Nobody migrates over storage.

Read units are the dial that moves the bill. Standard charges $16 to $18 per million read units, with rates varying by cloud region, and each query consumes read units roughly in proportion to how much of the index it scans. Write units are cheaper at $4 to $4.50 per million, which matters during bulk ingestion and re-embedding but fades into the background for a read-heavy RAG workload. Since September 2026, egress beyond the included 100 GB per month is metered at $0.10 per GB — a line item that barely existed a year ago and now deserves its own row in your spreadsheet.

The free Starter tier (2 GB of storage, 1 million read units and 2 million write units a month) covers prototypes beautifully, which is precisely why the bill arrives as a surprise: the free tier ends exactly when usage starts compounding. Third-party cost comparisons put a 10-million-vector production workload on Pinecone serverless at $1,300 or more per month, and 50 million 768-dimension vectors at $300 to $800 depending on query volume. At 100 million vectors, pod-based Pinecone deployments have been estimated at $5,000 to $15,000 a month. Verify current list prices before you budget — every vendor reprices metering at least once a year — but the shape of the curve is stable: Pinecone's cost scales with your success, linearly and forever.

What Self-Hosted Qdrant and Milvus Really Cost​

Self-hosting replaces a meter with a flat line: fixed infrastructure plus engineering time. The two leading open-source engines, both Apache 2.0 licensed, draw that flat line at different heights.

Qdrant is the lighter lift. It is a single Rust binary with modest memory appetite, strong payload filtering, and aggressive quantization — its 4-bit TurboQuant can cut dense-vector RAM roughly eightfold, and plain int8 quantization roughly halves it. A 10-million-vector collection that needs 60 GB at full precision can fit in under 10 GB quantized, which is the difference between a $150 box and a $600 one. One well-known migration case study put self-hosted Qdrant on Kubernetes at about $850 a month in infrastructure for a workload that cost $8,400 a month on Pinecone. Smaller setups run far less: a single dedicated server with 64 GB of RAM rents for roughly $100 to $300 a month and comfortably holds tens of millions of quantized vectors.

Milvus is the heavier lift with the higher ceiling. It is a distributed, cloud-native system — separate components for coordination, data nodes, query nodes, and storage — which means it scales past a billion vectors but also means you are operating a cluster, not a binary. Third-party estimates put self-hosted Milvus at $600 to $1,200 a month in infrastructure for a 50-million-vector workload, and $2,000 to $5,000 at 100 million vectors. At that scale it still undercuts managed alternatives by half or more, but the gap between Qdrant-simple and Milvus-complex is real engineering headcount.

That headcount is the line everyone underestimates. The same case study that priced self-hosted Qdrant infrastructure at $850 a month added a quarter of an engineer — roughly $5,000 a month fully loaded — for operations. Version upgrades, index tuning, backup restores, 3 a.m. pages: the meter you stop paying Pinecone converts partly into salary. A fair comparison always adds this row. If you already run Kubernetes and already page someone, the marginal cost may be near zero; if you would be hiring your first platform engineer to babysit a cluster, self-hosting just got $150,000 a year more expensive.

There is also a middle path worth pricing: managed open-source. Qdrant Cloud bills on actual cluster resources with no fixed minimum, paid clusters starting near $25 a month, and a genuinely free 1 GB cluster for small workloads. Zilliz Cloud, the managed Milvus from its original team, charges serverless usage at about $4 per million vCUs with a free tier of 5 GB and 2.5 million vCUs a month. Both typically land between Pinecone and self-hosted on price while keeping operational load near zero — the right answer when your query volume has outgrown Pinecone's free tier but not your tolerance for pager duty.

The Crossover Math: Finding Your Breakeven Point​

The breakeven formula fits on an index card. Self-hosting wins the month that:

Fixed infrastructure + engineering time beats storage + (read units × queries) + writes + egress

Run it with your own trailing three months of invoices, not with vendor calculators, because your read-units-per-query ratio is the one number no comparison article can give you. Pull the invoice lines, divide read units by queries served, and you have your unit cost. Then price the fixed side: one dedicated box or cloud VM sized to your quantized index, plus the honest fraction of an engineer.

A worked example makes the shape concrete. Take a RAG product with 10 million 1536-dimension vectors and 5 million queries a month, growing 20 percent a month. On Pinecone serverless, third-party estimates place this workload around $1,300 a month today — and at 20 percent monthly query growth, it roughly doubles every four months. Self-hosted Qdrant quantized to int8 fits the index in about 30 GB of RAM: one 64 GB dedicated server at, say, $200 a month, plus a quarter-engineer at $5,000 fully loaded, totals about $5,200. That looks like a loss — until you extend the lines. The Pinecone line doubles every four months ($1,300, then $2,600, then $5,200), while the self-hosted line stays flat. The crossover lands around month eight, and every month after that the gap widens in your favor. Faster growth pulls the crossover closer; flat usage may never reach it.

Three rough zones fall out of the published comparisons. Under about a million vectors with modest queries, serverless wins outright — Pinecone's free tier or $50 minimum beats any engineer's time. Between roughly 10 and 50 million vectors with steady query volume sits the crossover zone, where the answer depends on your growth rate and whether you already have platform engineering. Past 100 million vectors with serious query load, self-hosted Qdrant or Milvus almost always wins on infrastructure alone, often by 50 to 75 percent.

One caution: model your growth, not your present. Teams that size the decision on today's bill and ignore a 20-percent monthly growth curve re-run this entire analysis six months later under deadline pressure, which is the most expensive possible way to migrate.

CapEx or OpEx? How Each Side Hits Your Books​

Here is where the two options stop being interchangeable, because a server you own and a bill you pay are different kinds of money with different tax timing.

Pinecone, Qdrant Cloud, and Zilliz Cloud invoices are operating expenses, deductible in the year paid. The only judgment call is placement: if the vector database directly serves queries for a product customers pay for, its cost belongs in cost of goods sold alongside your other hosting infrastructure, where it reduces gross margin honestly. If it powers an internal tool — a support-docs search for your own team — it sits in general operating expense with the rest of your SaaS stack. Split the invoice by use when one index serves both; your future acquirer's diligence team will re-map your ledger to a standard SaaS COGS definition anyway, so classify it correctly now.

Rented self-hosted infrastructure — cloud VMs, dedicated servers from a hosting provider — is also operating expense: monthly hosting, no asset, no depreciation schedule. This surprises teams who think of "self-hosted" as automatically capital expenditure. Renting a box is renting, however bare the metal.

Owned hardware is the actual CapEx case. Buy the server outright and you capitalize it as a fixed asset, then depreciate it — computer equipment generally falls under 5-year MACRS property, and Section 179 expensing or bonus depreciation may let you deduct far more in year one, subject to current limits your CPA should confirm. The tax timing can make a $6,000 server cheaper in present-value terms than $150 a month in rent, even before the hosting savings. But owned hardware also means you carry the asset risk: a dead drive at 2 a.m. is your drive, and a workload that outgrows the box strands the capital.

Migration costs — re-embedding your corpus, dual-running both systems, the engineering weeks — are expensed as incurred in nearly every small-business case. Budget them as a one-time hit against the payback period, not as an asset. If the migration saves $4,000 a month and costs $15,000 in engineering time and re-embedding compute, the payback is under four months; finance the decision on that clock.

In a plain-text ledger, the two regimes look like this — the metered bill as a monthly expense against cost of revenue, the rented box as hosting, and the owned server depreciating a little each month (see the Beancount documentation for the booking mechanics):

2026-01-01 open Assets:Checking USD
2026-01-01 open Expenses:COGS:VectorDB USD
2026-01-01 open Expenses:Infra:Hosting USD
2026-01-01 open Assets:Servers:VectorDB USD
2026-01-01 open Assets:Servers:Accumulated-Depreciation USD
2026-01-01 open Expenses:Depreciation:Servers USD
 
2026-11-01 * "Pinecone" "October bill, 4.1M read units and 62 GB storage"
  Expenses:COGS:VectorDB  312.44 USD
  Assets:Checking
 
2026-11-01 * "Hosting provider" "November rent, 64 GB dedicated server for Qdrant"
  Expenses:Infra:Hosting  199.00 USD
  Assets:Checking
 
2026-11-30 * "Month-end" "Depreciation, owned vector-search server, month 3 of 60"
  Expenses:Depreciation:Servers  100.00 USD
  Assets:Servers:Accumulated-Depreciation  -100.00 USD

Keep the metered and fixed lines in separate accounts even during a dual-run migration. When both systems serve production for a month or two, commingled accounts hide exactly the comparison the migration was supposed to prove.

The Costs Everyone Forgets​

Four costs routinely escape the spreadsheet and ambush the migration afterward.

First, egress and re-ingestion. Moving 100 million vectors is not free on either side: Pinecone-side egress over the included allowance, plus the compute to re-embed if you change embedding models or chunking at the same time. Published estimates put a full re-embedding between $50 and $5,000 in compute depending on corpus size, plus 4 to 12 weeks of engineering for the migration itself. Price the migration, not just the destination.

Second, retrieval quality regression. A different ANN index with different quantization returns different neighbors, and "different" sometimes means worse for your specific queries. Teams that migrate on cost alone and skip a side-by-side relevance evaluation discover the regression from user complaints. Hold back a query sample, score both systems, and require parity before cutover — the evaluation week is part of the migration budget.

Third, latency you pay for but cannot use. One comparison measured Pinecone at roughly 22 ms P95 against 150 ms for a Postgres-based alternative — a gap no human notices in 95 percent of B2B RAG scenarios, where the language model itself takes seconds. If your chatbot's bottleneck is token generation, buying single-digit-millisecond retrieval is buying speed your users will never feel. Match the latency SLO to the product before you match the vendor to the SLO.

Fourth, the exit cost asymmetry. Migrating from Pinecone to Qdrant means exporting vectors and rebuilding an index — annoying but bounded. Migrating between self-hosted engines, or back to managed later, carries the same re-embedding and re-tuning bill again. Favor engines with standard export paths and open data formats so the next migration, in whichever direction, starts from an export button rather than a forensic project.

Decide With Six Questions​

Borrow the decision framework the best comparisons converge on, and answer it with your own numbers:

  1. How large is the corpus today, and where is it in twelve months? Under a million vectors, stop here and stay serverless.
  2. What is your fully loaded cost per million queries on the current bill? Divide three months of invoices by queries served.
  3. Do you already operate stateful infrastructure? An existing Kubernetes cluster with on-call rotation makes self-hosting nearly free at the margin; its absence makes it a hiring plan.
  4. What latency does the product actually need? If the answer is "faster than the LLM," almost every option qualifies.
  5. Do you need hybrid search — keyword plus vector in one query? Qdrant, Milvus, and Weaviate ship it natively; Pinecone and Postgres-based setups need manual assembly, which is engineering time on the metered side of the ledger too.
  6. What does the growth curve do to the crossover date? A flat workload that never crosses over is a decision to stay, made deliberately instead of by inertia.

Pull your last three Pinecone invoices this week, compute the per-million-query cost, and price one dedicated box sized to your quantized index. If the lines cross within a year, start the relevance evaluation now — the migration takes weeks, the math takes an afternoon, and the most expensive outcome is re-running both under deadline pressure six months from today.

Source: https://beancount.io/blog/2026/11/11/qdrant-milvus-self-hosted-vs-pinecone-crossover-breakeven-guide

Published: November 11, 2026