Most RAG tutorials reach for Chroma because it’s easy to get running. That’s a perfectly fine choice for a weekend project. When you’re designing a production system, though, your vector database decision has real consequences for latency, recall accuracy, cost, and operational complexity. In 2026, the landscape has matured enough that there are clear winners in specific scenarios — and the answer isn’t the same for everyone.

Here’s the honest breakdown of the main options, what the benchmarks actually show, and how to pick the right one for your workload.

Why Vector Databases Matter More Than They Used To

A year or two ago, you could swap vector databases relatively easily because most applications were simple: embed some documents, do a nearest-neighbour search, retrieve the top-k results. Today’s agentic pipelines are more demanding. You’re running filtered searches against metadata, combining dense vector search with sparse BM25 keyword search, managing multiple namespaces for different users or document types, and sometimes querying hundreds of millions of vectors under tight latency constraints. The choice of database shapes what’s even possible.

Chroma: Great for Prototyping, Limited for Production

Chroma is the go-to for getting started. It runs in-memory or with a local persistent backend, the Python SDK takes minutes to set up, and it integrates with LangChain and LlamaIndex out of the box. For building proofs of concept, evaluating RAG pipeline designs, or running tests against small document sets, it’s genuinely excellent.

The production ceiling is real, though. At 100 million vectors, Chroma doesn’t keep up with the dedicated alternatives. Horizontal scaling is limited, and recall degradation at large scale requires careful index tuning. If you’re building something that might grow significantly, starting on Chroma and migrating later is a painful experience that’s worth avoiding with upfront planning.

pgvector: The Default If You’re Already on Postgres

pgvector is the right answer for a lot of teams that don’t realise it. If your application already runs Postgres, adding CREATE EXTENSION vector gives you similarity search without a new service to operate, a new client library to learn, or a new billing relationship to manage.

The performance story has improved significantly. pgvector 0.9 added HNSW indexing (alongside the older IVFFlat approach), and Timescale’s pgvectorscale extension takes things further. The benchmark numbers are striking: at 50 million vectors, pgvectorscale achieves around 471 queries per second at 99% recall, compared to roughly 41 QPS for Qdrant in similar conditions. Qdrant wins on absolute latency for smaller datasets, but if you’re already on Postgres and your scale is in the millions rather than hundreds of millions, pgvector plus pgvectorscale is a compelling choice that removes significant operational overhead.

The caveat is that HNSW parameter tuning matters. Setting m and ef_construction incorrectly leaves performance and recall on the table. It’s not difficult, but it’s not automatic either.

Qdrant: Best Default for Pure Vector Performance

Qdrant is written in Rust, and that implementation choice shows up in the benchmarks. At 10 million vectors, p99 latency typically lands around 12 milliseconds, compared to around 16 milliseconds for Weaviate and 18 milliseconds for Milvus. For applications where your retrieval step needs to stay under a tight budget — and many agentic pipelines have strict latency requirements — that gap is meaningful.

Qdrant’s filtered search is particularly strong. You can apply metadata filters (date ranges, user IDs, document types, categories) at query time without the performance cliff that some databases show when filters are combined with high-dimensional vector search. This makes it a natural choice for multi-tenant RAG applications, personalised retrieval pipelines, and anything where you’re regularly narrowing your search to a subset of the index.

The managed cloud offering (Qdrant Cloud) is solid, but you can also self-host with Docker in a few minutes. The documentation is among the best in the category.

Weaviate: Hybrid Search Without the Plumbing

Weaviate’s defining advantage is built-in hybrid search. You get dense vector search and sparse BM25 keyword search combined in a single query, without having to run two separate retrieval systems and merge results in application code. For document retrieval where keyword matching still matters — legal documents, technical manuals, anything with precise terminology — this significantly improves recall compared to pure vector search.

Weaviate also includes built-in vectorizers. You can configure it to automatically embed documents using OpenAI, Cohere, or Hugging Face models without managing embedding calls in your application layer. This simplifies the pipeline at the cost of some flexibility. If you want to control exactly which model and version embeds your data, you’ll work around those defaults.

The p99 latency benchmark of around 16 milliseconds sits between Qdrant and Milvus. For most applications, the difference from Qdrant isn’t perceptible. Where Weaviate earns its place is in workloads that genuinely need hybrid retrieval as a first-class primitive.

Pinecone: Managed Cloud, No Infrastructure

Pinecone is the option for teams that want to skip the infrastructure entirely. You get a fully managed vector database with no servers to operate, predictable API pricing, and solid performance at scale. Recall quality is consistent at 100 million vectors without manual index tuning.

The trade-off is cost at high query volume and the vendor dependency that comes with any managed service. At low-to-moderate scale it’s often the cheapest option because you’re paying only for what you use, with no need for dedicated cloud instances. At high query volume, the per-query costs add up in ways that self-hosted options avoid.

If you’re on GCP, Vertex AI Vector Search is worth considering as an alternative managed option with tighter integration into the Google Cloud ecosystem.

How to Actually Choose

The decision mostly comes down to two questions: what infrastructure do you already run, and what does your retrieval workload look like?

Already on Postgres → start with pgvector and add pgvectorscale when you need it. You’re removing infrastructure complexity and gaining vector search without a new service.

Low-latency filtered search across millions of vectors → Qdrant is the default. The Rust implementation and filtered search quality are hard to beat here.

Hybrid search (dense + keyword) as a first-class requirement → Weaviate. Building hybrid retrieval from scratch on other databases is more work than switching to a database that does it natively.

Prototyping or local development → Chroma. It’s faster to set up than any alternative and handles everything you need at small scale.

Managed cloud, no infrastructure → Pinecone.

The benchmarks are all published and worth reading before committing. Vector database performance is workload-specific, and numbers from 2024 benchmarks don’t always generalise to your embedding dimensionality, query pattern, and filter complexity in 2026.

References