Vector Databases 2026: Pinecone vs Qdrant vs pgvector
A hands-on comparison of vector databases 2026: Pinecone, Weaviate, pgvector, Qdrant, Chroma and Turbopuffer, with real cost and latency numbers.
Who this is for: engineers and technical founders picking a vector store for a RAG pipeline, semantic search feature, or agent memory layer, who are tired of marketing pages and want an honest read on what actually breaks at scale.
Choosing among vector databases 2026 options is no longer a niche decision - almost every AI product now has an embeddings layer somewhere, and the wrong pick costs you either money at 10M+ vectors or engineering time rebuilding your retrieval layer six months in. I have shipped RAG systems on four of the six databases below in production. This is what I would tell a client before they sign a contract.
Why the vector database landscape looks different in 2026
Two years ago the question was "do I need a dedicated vector database at all, or can pgvector handle it." That question is mostly settled now: pgvector handles it up to a real ceiling, and dedicated vector databases have specialized past pure ANN search into filtering, hybrid search, and multi-tenancy at a level Postgres extensions cannot match without heavy custom work.
The other shift: cost. Pinecone's serverless pricing model reset expectations for everyone else, and Turbopuffer's object-storage-backed architecture pushed cold-storage costs down another order of magnitude. If you are choosing a vector database in 2026 and pricing a system with 5M+ embeddings, storage cost is now a first-class design decision, not an afterthought.
If you are building the retrieval layer itself rather than picking infrastructure, it is worth reading RAG for SMB: turning a PDF into an assistant and RAG vs fine-tuning in 2026 first - the database choice only matters once the retrieval strategy is set.
The contenders, in one paragraph each
Pinecone
Fully managed, serverless-by-default since the 2024 relaunch. You get automatic scaling, no ops, and a namespace model that makes multi-tenant SaaS easy. Query latency on serverless indexes runs 40-90ms p50 for a 1M-vector namespace with metadata filtering, which is fine for most product use cases but noticeably slower than a self-hosted Qdrant on decent hardware. Pricing is usage-based: you pay per read unit, write unit, and stored GB, roughly $0.33/GB-month storage plus per-query charges that add up fast on high-QPS apps.
Weaviate
Open source with a hosted cloud option. Strongest built-in hybrid search (BM25 + vector, fused with reciprocal rank fusion out of the box) and a real module system for reranking and generative search. GraphQL-first API is powerful but has a steeper learning curve than the others' REST-first designs. Self-hosting Weaviate well requires understanding its sharding model - get it wrong and you end up with hot shards under uneven tenant load.
pgvector
Not a database, an extension - you run it inside Postgres you already operate. As of pgvector 0.8 with HNSW indexes, it comfortably handles 5-10M vectors on a well-sized instance with sub-100ms queries. The real win is not having a second database: joins between vector search results and your relational data (user permissions, order history, whatever) are trivial SQL instead of an application-layer merge. The real limit: past roughly 20-50M vectors, index build time and memory pressure become painful, and horizontal scaling means sharding Postgres yourself.
Qdrant
Written in Rust, open source, and the fastest self-hosted option I have benchmarked - filtered search stays fast even with complex payload filters because of its filterable HNSW implementation, not a post-filter bolt-on. Qdrant Cloud exists but most serious users I know self-host it on a few beefy nodes because the cost-per-vector at scale beats every managed competitor. Ops burden is real but manageable: a single binary, clear metrics, no JVM garbage collection surprises.
Chroma
The default for local prototyping and small production apps. Dead simple API, embeds directly in a Python process for dev, and now has a real hosted Chroma Cloud tier for production. It is the right choice when you are under 1M vectors and want zero infrastructure decisions, and the wrong choice the moment you need serious multi-tenancy or you outgrow single-node.
Turbopuffer
The newest serious entrant and the one I now default to for cost-sensitive workloads. It stores vectors in object storage (S3-compatible) with a stateless query layer on top, so storage costs roughly 10x less than Pinecone at rest - about $0.026/GB-month versus Pinecone's ~$0.33/GB. The tradeoff is cold-query latency: a namespace that has not been queried recently pays a cache-warming penalty on the first request, typically 200-500ms, before settling into normal speed. Great for workloads with long-tail namespaces (per-user or per-document indexes) that are not constantly hot.
Head-to-head comparison table
| Database | Hosting model | Typical p50 latency (1M vectors, filtered) | Storage cost | Best fit |
|---|---|---|---|---|
| Pinecone | Managed serverless | 40-90ms | ~$0.33/GB-mo + per-query | Teams that want zero ops, SaaS multi-tenant |
| Weaviate | Self-host or managed | 30-70ms | Compute-based (self-host) | Hybrid search, generative search modules |
| pgvector | Self-host (Postgres ext.) | 20-80ms | Your existing Postgres cost | Teams already on Postgres, under ~20M vectors |
| Qdrant | Self-host or managed | 15-40ms | Compute-based (self-host) | Cost-sensitive, high-QPS, complex filters |
| Chroma | Local or Chroma Cloud | 10-50ms (small scale) | Low at small scale | Prototypes, under 1M vectors |
| Turbopuffer | Managed, object-storage-backed | 200-500ms cold, ~20ms warm | ~$0.026/GB-mo | Many small per-tenant indexes, cost priority |
Cost modeling: a real example
Take a mid-size RAG product: 8M document chunks, 1536-dim embeddings (OpenAI text-embedding-3-small), average 200 queries/minute during business hours.
- Pinecone serverless: roughly $180-260/month in storage alone at that vector count, plus read-unit charges that typically add another $150-400/month depending on query complexity and metadata filter usage.
- Self-hosted Qdrant on a single $200/month VM (32GB RAM, NVMe SSD) handles this comfortably with room to grow to 15-20M vectors before you need a second node. Your cost ceiling is the box, not per-query billing.
- pgvector on an existing Postgres instance you are already paying for (say an RDS box you use for the rest of the app) can be effectively free marginal cost if you have headroom, or $100-150/month more if you need to upsize the instance for the HNSW index memory footprint.
- Turbopuffer at 8M vectors with moderate query volume lands around $50-90/month in storage plus modest query costs - the cheapest option on paper, with the cold-start latency caveat above.
Warning: these numbers move fast and Pinecone in particular has changed its pricing model twice since 2024. Always run the vendor's own calculator against your real vector count and query volume before committing - do not budget off blog post numbers, including this one.
A minimal Qdrant setup, for reference
Here is what a basic Qdrant collection with filtering looks like, since it is the one most readers end up self-hosting:
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct, Filter, FieldCondition, MatchValue
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="docs",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
)
client.upsert(
collection_name="docs",
points=[
PointStruct(
id=1,
vector=embedding_vector,
payload={"tenant_id": "acme_corp", "source": "handbook.pdf"},
)
],
)
results = client.search(
collection_name="docs",
query_vector=query_embedding,
query_filter=Filter(
must=[FieldCondition(key="tenant_id", match=MatchValue(value="acme_corp"))]
),
limit=10,
)
The important part is the filter runs inside the HNSW traversal, not as a post-search discard step - that is what keeps latency flat even with strict tenant isolation.
When pgvector is genuinely the right call
I default clients to pgvector more often than the AI infrastructure hype cycle would suggest, for one reason: most products under 10M vectors do not need a separate database, and every separate database is a separate thing that can go down, need upgrading, and need a second person on the team who understands it.
Pick pgvector when:
- You already run Postgres and have DBA competence in-house.
- Your vector count is under 10-15M and growing predictably, not explosively.
- You need to join vector results against relational data (permissions, billing tier, order status) in the same query.
- You want one fewer vendor bill and one fewer service in your uptime dependency graph.
Move off pgvector when:
- Index rebuild time after bulk inserts starts blocking your deploy window.
- You need real hybrid search (BM25 + vector fusion) beyond a basic
tsvectorcombination. - You are past 20-30M vectors and query latency is degrading under concurrent load.
Multi-tenancy: the part everyone gets wrong first
If you are building a SaaS product where each customer has their own document set, the naive approach - one collection per tenant - falls apart around a few hundred tenants because most databases have real per-collection overhead (memory-mapped index files, connection pool pressure).
- Pinecone namespaces solve this cleanly: one index, thousands of namespaces, near-zero overhead per namespace.
- Qdrant handles it via payload-based filtering in a single collection, which scales better than per-tenant collections but requires you to design your filter indexes correctly upfront.
- Weaviate uses multi-tenancy as a first-class collection feature (added specifically for this problem) with tenant activation/deactivation for cold-storage savings.
- Turbopuffer is arguably built for exactly this case - many small, sparsely-queried per-tenant namespaces backed by cheap object storage is its ideal workload.
Tip: whatever you pick, load-test with your actual tenant-count projection, not today's tenant count. Multi-tenant vector search problems are invisible at 20 tenants and brutal at 2,000.
Embeddings model choice matters as much as the database
A vector database is only as good as what you put in it. Before locking in infrastructure, get the embedding model decision right - dimension count directly affects storage cost (1536-dim vectors cost roughly double the storage of 768-dim ones) and retrieval quality varies more between embedding models than between vector databases. See embeddings explained for the model-selection side of this decision, and note that switching embedding models later means re-embedding and re-indexing your entire corpus - budget for that migration cost when you evaluate "cheap" storage options that assume a small footprint.
Hybrid search: do not skip it
Pure vector similarity search misses exact keyword matches surprisingly often - product SKUs, names, error codes, anything where lexical overlap matters more than semantic similarity. Weaviate and Qdrant both support hybrid search natively now (dense + sparse vector fusion); Pinecone requires you to run a separate sparse index and merge results yourself, which is more work but gives you control over the fusion weighting. If your corpus includes structured or code-like content, budget for hybrid search from day one rather than retrofitting it after users complain search "misses obvious things."
Operational checklist before you commit
- Confirm backup and restore procedure and actually test a restore, not just trust the docs.
- Measure p99 latency, not just p50 - vector databases have long tails under concurrent filtered queries.
- Check whether the database supports incremental index updates or requires a full rebuild on bulk changes.
- Price out egress if you are considering a managed service and expect to migrate data out later.
- Decide your consistency requirements: most vector databases are eventually consistent by default, which matters if a user uploads a document and immediately searches for it.
FAQ
Is pgvector good enough for production RAG in 2026?
Yes, for most workloads under roughly 10-15M vectors with predictable growth. It performs well with proper HNSW index tuning and saves you from operating a second database. Past that scale, or if you need advanced hybrid search and multi-tenancy features, a dedicated vector database like Qdrant or Weaviate becomes worth the added operational surface.
Which vector database is cheapest at scale?
Turbopuffer, because it stores vectors in object storage rather than on attached SSD, cutting storage cost roughly 10x versus Pinecone. The tradeoff is cold-query latency on infrequently accessed namespaces, which matters most for workloads with many small, sparsely-queried tenants.
Do I need a vector database if I am already using Postgres?
Not necessarily - pgvector runs inside Postgres you already operate, and for most products under 10-15M vectors it is the simplest and cheapest path. Move to a dedicated vector database only when you hit a specific limit: index rebuild time, hybrid search needs, or scale past what a single Postgres instance handles well.
How do vector databases compare on latency for real-time chat applications?
Self-hosted Qdrant and Weaviate typically deliver the lowest p50 latency (15-40ms) because there is no network hop to a separate managed service and no cold-start penalty. Pinecone serverless adds managed-service overhead (40-90ms) but removes all ops burden; Turbopuffer trades higher cold latency for much lower storage cost, which matters less for chat if your namespaces stay warm from steady traffic.
Can I switch vector databases later without much pain?
Migration is mostly mechanical - export vectors and metadata, re-import into the new database - but re-indexing 10M+ vectors takes real wall-clock time and you need a cutover strategy (dual-write, then switch reads) to avoid downtime. The bigger risk is if you also change embedding models during the same migration, since that forces a full re-embed, not just a re-index.
What is the difference between a vector database and a vector index library like FAISS?
FAISS and similar libraries (HNSWlib, ScaNN) are in-process index algorithms with no persistence, filtering, or multi-tenancy built in - you build the infrastructure around them yourself. Vector databases like Qdrant or Weaviate use similar underlying algorithms but add persistence, metadata filtering, replication, and an API layer, which is what most production systems actually need.
Ready to build it
If you are scoping a RAG system or agent memory layer and want a second opinion on which vector database actually fits your scale and budget before you commit, book a free 30-minute call through the contact form or message me directly on wa.me/972585802298.