Skip to content
ComparisonAI Data & Training
Xither Staff10 min read

AI Data · Vendor comparison

Choosing an Enterprise Vector Database: Benchmarks, Deployment Models, and TCO

There is no credible neutral benchmark that ranks Pinecone, Weaviate, Qdrant, and Milvus against each other on your workload — and the vendors' own documentation explains why one could not exist. What that documentation does give you is enough to model the decision honestly: published memory formulas, quantization ratios, deployment models, and rate cards whose units reveal what each vendor is really charging for.

Comparing 2 options
Multiplier over raw float32 vectorsThe vendor's own worked example

Almost every published vector-database comparison opens with a latency table. Treat those tables as unusable unless they name the dataset, the dimensionality, the index parameters, the recall target, the hardware, and who paid for the run. Approximate nearest-neighbor search trades recall against latency and memory, so a latency figure quoted without its recall figure carries no information.

Any of those numbers moves by changing one index parameter, which is why "vendor A: 9.5 ms, vendor B: 12 ms" tables travel so well and mean so little. That is not a counsel of despair, because the decision is still tractable — it just gets made from different evidence. Every serious vendor publishes how its index consumes memory, what its compression options trade away, which deployment models it supports, and what its meter actually charges for. Those documents are first-party, specific, and comparable, and they determine cost and operability far more than any latency benchmark would. This comparison works from them.

Why the published benchmark numbers do not decide this

The reference academic benchmark for this space is ANN-Benchmarks, described by its authors as "a tool for evaluating the performance of in-memory approximate nearest neighbor algorithms" in which "algorithms are compared with respect to many different (approximate) quality measures."[1] Two things follow. First, it benchmarks *algorithms*, not managed services — it says nothing about a vendor's replication behavior, filtering semantics, multi-tenancy, or bill. Second, and more usefully, its headline finding is that "very different approaches to k-NN search yield comparable quality-performance trade-offs."[1] If well-implemented approaches converge on similar quality-performance curves, then the ranking you are shopping for is mostly noise, and the differentiators that remain are operational and commercial.

Who ran the benchmark is part of the result

Vendor-published cross-vendor benchmarks are a legitimate artifact — the vendor knows its own system best — but the party with the tuning expertise and the incentive is the same party. Read them for methodology and configuration detail, and treat the ranking as a hypothesis to test rather than a finding to cite. The only benchmark that settles a procurement decision is the one you run on your own embeddings, at your own scale, at your recall target, with your filter patterns.

The number that actually drives cost: memory per vector

HNSW is the default index almost everywhere, and its properties explain the shape of every bill in this category. The original paper describes a multi-layer proximity graph in which "starting search from the upper layer together with utilizing the scale separation boosts the performance compared to NSW and allows a logarithmic complexity scaling."[2] Logarithmic search is what makes it fast; the graph that delivers it is what makes it expensive, because the vectors and their links want to be resident in RAM.

Two vendors publish sizing formulas, and comparing them is instructive because they disagree on the multiplier while agreeing on the shape. Weaviate's docs give a rule of thumb of "Memory usage = 2 * (the memory footprint of all vectors)," worked through as one million 384-dimensional float32 vectors at 384 × 4 B = 1,536 B each, totaling 1.5 GB of raw vectors and therefore roughly 3 GB in practice; the same page offers a tighter estimate that prices the graph links explicitly — "if maxConnections is 64 and the other values are the same, a more accurate memory estimate is 1e6 * (1536B + (64 * 10)) = 2.2 GB."[3] Qdrant publishes `memory_size = number_of_vectors * vector_dimension * 4 bytes * 1.5`, explaining that the "extra 50% accounts for metadata (such as indexes and point versions) and temporary segments created during optimization," and works it through as one million 1,024-dimensional vectors ≈ 5.72 GB.[4]

Vendor formulaMultiplier over raw float32 vectorsThe vendor's own worked example
Weaviate — rule of thumb×21M × 384 dims → 1.5 GB raw → ~3 GB[^weaviate-resources]
Weaviate — with maxConnections priced in≈ ×1.42 at maxConnections 641e6 × (1536 B + (64 × 10)) = 2.2 GB[^weaviate-resources]
Qdrant — capacity planning×1.51M × 1,024 dims → ≈ 5.72 GB[^qdrant-capacity]
Published RAM-sizing formulas, quoted from each vendor's own documentation. They are estimates for different systems, not a like-for-like measurement — but they bracket the planning multiplier you should budget for: raw vector bytes times roughly 1.4 to 2. Accessed 2026-08-20.
4 bytes × dims × rows

is the floor, before any index overhead. A 10-million-row corpus of 1,536-dimensional float32 embeddings is about 61 GB of raw vectors; apply either vendor's multiplier and you are provisioning roughly 87–123 GB of RAM before payload, replicas, or headroom. That number, not a millisecond figure, is what your quote will be built on.

Derived from the vendor sizing formulas cited above

Quantization is the lever that moves the bill

Because RAM dominates, compression is where real money is saved — and here the vendor documentation is unusually concrete. Qdrant documents four methods with explicit ratios: scalar quantization "compresses each vector component from a 32-bit float to an 8-bit integer, achieving 4x compression with minimal accuracy loss"; binary quantization "reduces each vector component to one to two bits for up to 32x compression" and is "best suited for high-dimensional, centered vector distributions"; product quantization "enables up to 64x compression when minimizing memory is the top priority"; and TurboQuant "supports up to 32x compression, with strong recall across most embedding models," defaulting to 4-bit encoding.[5]

Note what the vendor does *not* claim. Its own guidance says to "use Product Quantization if the memory footprint is the top priority and accuracy and speed are not critical," and that TurboQuant should be tested on your data before you commit.[5] That is the honest framing to carry into your own evaluation: compression ratios are published, the recall cost of each ratio on *your* embeddings is not, and it is the only part of the trade-off nobody can hand you.

The same lever exists elsewhere under different names. Weaviate's docs point to product quantization as a way to "increase the number of vectors you can hold in memory."[3] Milvus exposes compression as index families rather than a separate setting — IVF_SQ8, IVF_PQ, IVF_RABITQ, HNSW_SQ, HNSW_PQ, HNSW_PRQ alongside uncompressed FLAT, IVF_FLAT, and HNSW, plus disk-resident DiskANN and GPU variants.[6] pgvector offers a `halfvec` half-precision type and binary quantization, and its scaling advice for a smaller working set is exactly that: "use the halfvec type instead of vector for tables" and "use binary quantization for indexes (with re-ranking for search)."[7]

Disk is the other lever, and it has a different failure mode

Milvus's guidance is blunt about the trade: "Using hard drives for part of the index (as in DiskANN) helps manage large datasets, but it also introduces potential IOPS bottlenecks," with the practical rule that "if a quarter of your raw data fits into memory, consider DiskANN for its stable latency."[6] Compression trades recall for RAM; disk-resident indexing trades IOPS for RAM. They fail in different ways under load, and a capacity plan should say which one it is buying.

Deployment models — the axis that usually decides the shortlist

Before latency or price, most enterprise shortlists are decided by where the data is allowed to live. Every vendor in this comparison now sells more than one answer, and the names differ more than the substance. Qdrant's pricing page defines its three: "Managed Cloud is fully managed by Qdrant. Hybrid Cloud lets you bring your own infrastructure while using Qdrant's management plane. Private Cloud gives you complete control with on-premise deployment."[8] Pinecone's plan matrix lists Bring Your Own Cloud and private endpoints at the Enterprise tier.[9] Weaviate's plan matrix distinguishes Weaviate-managed cluster upgrades from a customer-directed option.[10]

Deployment modelWhat you give upWhat you take onTypical trigger
Consumption / serverless managedControl over placement and tuning; cost predictability at high query volumeNothing operationally — you pay a metered billVariable or unproven workload; small team
Dedicated managed clusterElasticity between resize eventsCapacity planning; a floor cost you pay whether or not you querySteady production load where a metered bill overshoots
Hybrid / bring-your-own-cloudSome managed-service simplicity, and usually the entry priceYour own infrastructure, network, and storage under the vendor's control plane[^qdrant-pricing]Data residency or a regulated workload that cannot leave your account
Self-hosted open sourceVendor support and the managed control planeThe whole operational surface: upgrades, backups, scaling, incident responseExisting platform team, strict isolation, or cost control at large scale
In-database (pgvector on your existing Postgres)Purpose-built vector features and horizontal scale-outAlmost nothing new — it is an extension on a database you already run[^gh-pgvector]Vector search is a feature of an existing app, not a platform in its own right
The five deployment shapes on offer across this category. The trade-offs are structural; the vendor names for them are not.

Read the meter, not the headline price

Rate cards in this category are not comparable line by line, because the vendors meter different things: Pinecone bills read and write units plus storage, Weaviate bills vector dimensions plus storage, Qdrant bills the resources a cluster consumes, and Zilliz Cloud bills compute units sized by a performance tier. The useful exercise is not to line the numbers up — it is to work out which meter your workload spins fastest.

ServiceWhat the meter countsPublished rates (accessed 2026-08-20)
PineconeRead Units, Write Units, storage, egress; plan minimums on topStandard: $0.33/GB/mo storage, $16–$18 per million Read Units, $4–$4.50 per million Write Units, $0.10/GB egress with 100 GB/mo included, $50/mo minimum. Enterprise: same storage rate, $24–$27 per million RU, $6–$6.75 per million WU, $500/mo minimum. Builder is $20/mo flat.[^pinecone-pricing]
Weaviate CloudVector dimensions stored, storage, backup; minimum per planFlex: from $45/mo, from $0.00465 per 1M vector dimensions, from $0.12/GiB storage. Premium: from $400/mo, from $0.003875 per 1M vector dimensions, from $0.10/GiB storage. Engram tier is free (100,000 objects, 1 GB memory, 10 GB disk).[^weaviate-pricing]
Qdrant CloudResources consumed, billed hourly"You're charged for compute (vCPU), memory (GB), storage (GB) consumed by your clusters, storage (GB) consumed by backups, and used inference tokens of paid models. Usage is billed hourly." Free tier is 1 GB RAM and 4 GB disk without high availability.[^qdrant-pricing]
Zilliz Cloud (managed Milvus)Dedicated compute units, priced by performance tierPerformance-optimized: 2M vectors per CU, 500–1500 QPS, 10 ms, from $63 per million vectors/month. Capacity-optimized: 8M vectors per CU, 100–300 QPS, 50–100 ms, from $16. Tiered-storage: 40M vectors per CU, 10–50 QPS, 100–1000 ms, from $5. Vendor notes the figures are "based on evaluations of 768-dimensional vectors."[^zilliz-pricing]
Published list prices as of 2026-08-20. Rate cards in this category change often and several rates vary by cloud and region — re-read the source pages before you model, and get committed-use terms in writing.
12.6×

separates Zilliz Cloud's fastest and cheapest published cluster types — from $63 per million vectors per month at a 10 ms search latency down to from $5 at 100–1000 ms. One vendor, one product, same data: the latency target you choose moves the bill by more than any vendor choice on this page.[^zilliz-pricing]

Zilliz Cloud pricing, cluster types

Pinecone's documentation deserves a close read for a reason that generalizes: its meter behaves in a way that surprises people. "A query uses 1 RU for every 1 GB of namespace size, with a minimum of 0.25 RUs per query," and — the important part — "parameters that affect the size of the query response, such as top_k, include_metadata, and include_values, are not relevant for query cost; only the size of the namespace determines the number of RUs used."[12] Query cost therefore scales with how much data you put in a namespace, not with how much you ask for or how tightly you filter. Writes are metered by payload size, at 1 WU per 1 KB for upsert, update, and delete, with a 5 WU minimum per request — so many small writes cost far more than the same bytes batched.[12]

The pgvector question: when you do not need a vector database

For a large share of enterprise RAG workloads the honest answer is a Postgres extension. pgvector stores vectors "with the rest of your data" and brings "ACID compliance, point-in-time recovery, JOINs" along with it, and by default "pgvector performs exact nearest neighbor search, which provides perfect recall" — you opt into approximation only when you add an index.[7] For corpora in the low millions on hardware you already run, exact search with perfect recall removes an entire class of tuning problems.

Know the three limits before you commit. Index type: HNSW "has better query performance than IVFFlat (in terms of speed-recall tradeoff), but has slower build times and uses more memory," and unlike IVFFlat it can be built on an empty table because there is no training step.[7] Dimensions: indexable vectors go up to 2,000 dimensions for the `vector` type, 4,000 for `halfvec`, and 64,000 for `bit` — so a 3,072-dimensional embedding needs half-precision indexing, binary quantization, or dimensionality reduction.[7] And filtering: "with approximate indexes, filtering is applied *after* the index is scanned. If a condition matches 10% of rows, with HNSW and the default hnsw.ef_search of 40, only 4 rows will match on average" — the fix is iterative index scans, but a team that does not know this ships a heavily filtered RAG query that quietly returns almost nothing.[7]

By default, pgvector performs exact nearest neighbor search, which provides perfect recall.
pgvector README

How to run the only benchmark that counts

Because the published numbers do not transfer, the evaluation has to be yours. It does not need to be elaborate — it needs to be honest about the four variables that any vendor number silently fixes: your embeddings, your scale, your recall target, and your filter patterns. Fix a recall floor first (measure it against exact search on a sample, which is what pgvector gives you for free), then compare candidates on latency and cost *at that floor*. A vendor that is fastest at recall 0.80 and a vendor that is fastest at recall 0.95 are frequently not the same vendor.

Vector database selection checklist

  • Write down the four workload variables before contacting any vendor: vector count and growth rate, dimensionality and precision, target recall, and the filter selectivity of your real queries.
  • Compute raw vector bytes (4 × dimensions × rows for float32) and apply a 1.4–2× planning multiplier from the vendors' published formulas — that RAM figure, not a latency figure, is what determines your quote.
  • Decide the deployment model first — consumption, dedicated, hybrid/BYOC, self-hosted, or in-database — because it eliminates more of the shortlist than any performance criterion will.
  • Test whether pgvector on your existing Postgres clears the bar; exact search with perfect recall may remove the tuning problem entirely at your scale.
  • If you use pgvector with an approximate index, confirm your filtered queries return enough rows — filtering is applied after the index scan, and iterative index scans exist for exactly this.
  • Model the bill against the meter that actually applies: read/write units and namespace size, stored vector dimensions, hourly cluster resources, or compute units by performance tier. Model a peak month, not an average one.
  • Price the latency target explicitly — one vendor's published tiers span a 12.6× range on the same data — and confirm the target is a real product requirement rather than an inherited default.
  • Benchmark two or three finalists on your own embeddings at your recall floor, with your filter patterns, on the deployment model you intend to buy; treat every vendor-published ranking as a hypothesis for that test.
  • Measure quantization on your own vectors before you budget for its savings: the compression ratios are published, the recall cost on your data is not.
  • Ask what a migration costs before you sign — index rebuild time, export format, and dual-write window — because the cheapest exit is the one you planned at the start.
  • Get committed-use discounts, egress terms, and backup/restore charges in writing; list-price modeling routinely misses backup, restore, and import line items.

Sources

Every quantitative or attributed claim above is linked to a primary source. Last verified at publication.

  1. [1]
    ANN-Benchmarks: A Benchmarking Tool for Approximate Nearest Neighbor Algorithms
    arXiv (Aumüller, Bernhardsson, Faithfull) · · accessed
  2. [2]
  3. [3]
    Resource planning — memory requirements
    Weaviate · accessed
  4. [4]
    Capacity planning
    Qdrant · accessed
  5. [5]
    Quantization
    Qdrant · accessed
  6. [6]
    Index Explained
    Milvus · accessed
  7. [7]
  8. [8]
    Qdrant Cloud pricing
    Qdrant · accessed
  9. [9]
    Pinecone pricing
    Pinecone · accessed
  10. [10]
    Weaviate Cloud pricing
    Weaviate · accessed
  11. [11]
    Zilliz Cloud pricing — cluster types
    Zilliz · accessed
  12. [12]
    Understanding cost — Read Units and Write Units
    Pinecone · accessed
  13. [13]
    Indexing overview — namespaces and multitenancy
    Pinecone · accessed