Accueil / Articles / Pinecone, Weaviate, Milvus, Qdrant or Chroma: Picking a Vector Database

Cet article est publié en anglais.

Pinecone, Weaviate, Milvus, Qdrant or Chroma: Picking a Vector Database

Plain-language meaning of each vector database pitch, from serverless and hybrid search to Rust and GPU indexing, with trade-offs and when each one fits best.

1733 mots

Vector databases all promise speed, scale and smart search, and each vendor's pitch is full of phrases that sound similar. None of them wins in the abstract. The right pick depends on your team's data size, how much infrastructure you're willing to babysit and what your search needs to do. Below are Pinecone, Weaviate, Milvus, Qdrant and Chroma, with each marketing term turned into plain meaning and a note on when the database earns its place.

Pinecone: nothing to operate

Choose it when your team wants no infrastructure work at all. Pinecone is a fully managed, serverless service with built-in hybrid search that mixes dense and sparse retrieval.

Managed and serverless. There are no virtual machines to rent or configure and no shards, replicas, memory settings or node counts to worry about as data grows. You open an account, grab an API key and start sending data. That's valuable because vector search eats CPU and memory, and running one yourself is notoriously fiddly. Serverless means billing follows the storage and queries you really use, while Pinecone scales the backend up and down on its own.

Native hybrid search. Two quite different styles are joined here:

  • Dense search is semantic. Models turn text into embeddings that capture concepts, so a query for "feline" finds documents saying "cat."
  • Sparse search is keyword matching in the BM25 tradition. It looks for exact strings such as serial numbers, error codes or product IDs like SKU-8492X.

Each has a blind spot. Dense search understands intent but is hopeless at exactness. It may treat SKU-8492X as a close neighbor of SKU-8492Y, which wrecks a precise lookup. Sparse search nails exact tokens and knows nothing about context. Pinecone keeps both vector types in a single index and merges their scores automatically.

Why zero overhead matters. If you're a developer shipping an AI feature, you'd rather work on application logic and user experience than play database admin, tune parameters or get woken at 3 a.m. because the database ran out of RAM.

The catch. Lock-in and cost at the extreme end. Pinecone is closed source and managed only, so you can't self-host. With billions of high-throughput queries, a SaaS bill can outgrow the price of running an open-source system on your own.

Weaviate: embeddings and hybrid search in one box

Choose it when you need keyword and semantic search in a single system.

Built-in vectorization. Weaviate handles embedding for you. You don't write code that sends text to OpenAI, Cohere or Hugging Face, collects the vectors and stores them yourself. You pass in raw text, and modules such as text2vec-openai or text2vec-transformers create and refresh the vectors behind the scenes. Set up your schema once with the model provider you prefer, and the embedding pipeline runs at ingestion and again at query time, which simplifies your architecture a lot.

BM25 plus vectors, natively. The engine runs a precise keyword algorithm and a semantic search at the same moment inside one storage layer, then fuses everything into one ranked list.

  • With keyword search, looking up part number ABC-123 won't get mixed up with ABC-124, because BM25 matches exact tokens.
  • With vector search, "trouble sleeping" surfaces documents about insomnia, because meaning is understood.

Each object gets an inverted index for keywords and a vector index for meaning. A parameter named alpha, for example alpha: 0.5, shifts the balance between literal keywords and abstract meaning.

Why one system matters. Before native hybrid support matured, teams ran Elasticsearch for keywords alongside a separate vector store, synced data between them and wrote custom code to combine scores. Weaviate removes that operational burden by being both engines.

Where it differs from Pinecone. Deployment. Pinecone is closed SaaS only. Weaviate is open source and cloud-native: use it as a managed service (Weaviate Cloud Services), inside your own AWS or GCP VPC, or fully on-premises with Docker or Kubernetes. That control over where data lives counts for a lot in enterprise security and compliance.

Milvus: made for enormous scale

Choose it when you're building enterprise-grade platforms with billions of vectors. If Pinecone is about simplicity and Weaviate about developer comfort, Milvus is about brute infrastructure scale and raw performance.

Distributed and horizontally scaling. It's a set of stateless microservices, not one monolith, divided into layers:

  • Query nodes read and search
  • Data nodes write and ingest
  • Index nodes build the search graphs

That design brings two benefits. You scale out by adding cheaper machines instead of scaling up to a bigger, pricier one. And parts scale independently, so a read-heavy product such as a recommendation engine with millions of users can add query nodes alone and leave ingestion capacity untouched, keeping costs sensible.

GPU acceleration. Distance calculations across billions of high-dimensional vectors are punishing for CPUs. Milvus plugs into acceleration libraries (NVIDIA RAPIDS, FAISS-GPU, and graph indexes like CAGRA) to hand that work to GPUs, which run thousands of matrix operations in parallel. The payoff is sub-millisecond latency across datasets holding tens of billions of embeddings, with the bottleneck moving from processing speed to memory bandwidth.

Why scale is the point. A hobby project with a few thousand documents has no use for this. Milvus targets platforms managing billions of vectors and terabytes of data. At that size, smaller databases choke trying to hold everything in RAM. Milvus uses tiered storage, with hot data in RAM or on SSD and cold data in object storage such as S3 or MinIO. It also uses vector quantization, for instance 1-bit RaBitQ compression, to cut memory needs by as much as 70%. You also get deep control over indexing strategies (HNSW, IVF-Flat, DiskANN), so infrastructure teams can tune the speed versus recall trade-off.

The catch. Complexity. It's a heavily distributed system on Kubernetes that depends on things like Etcd, S3 and Pulsar or Kafka, so deploying, monitoring and maintaining it takes real DevOps effort.

Qdrant: control over precision and speed

Choose it when ranking and latency control matter. It has gained serious traction in production by chasing efficiency and tight control, while Pinecone chases ease, Weaviate convenience and Milvus huge clusters.

Written in Rust. Qdrant was built from scratch in a systems language known for memory safety, speed and having no garbage collector. That matters because databases in Java or Go periodically pause to reclaim memory, and under heavy throughput those pauses show up as sudden latency spikes, the infamous p99 problem. Without a collector, Qdrant gives steady, predictable response times in the sub-millisecond range even under heavy concurrent load, and it often uses less RAM and CPU than rivals.

Dense, sparse and metadata together. Multi-vector support is native. Each stored point can carry:

  • A dense vector for semantic context
  • A sparse vector for exact keywords
  • A structured JSON payload with metadata such as userId, creationDate or status

Plenty of vector databases filter on metadata (say, only documents where status == active) either after the vector search, which distorts your results, or before it, which slows the query. Qdrant builds structural indexes on the payload itself, so keyword matching, semantic scoring and filtering all happen together while the vector graph is traversed.

Levers other systems hide. Three stand out:

  • Custom scoring, with native Reciprocal Rank Fusion (RRF) so you decide exactly how keyword and vector scores combine.
  • Quantization settings: tune Scalar Quantization (SQ) or Product Quantization (PQ) to give up a little accuracy for roughly four times less RAM and faster queries.
  • Where it runs: as one small binary, as a distributed cluster, or as a hosted cloud service.

Chroma: fastest route to a prototype

Choose it for local RAG prototypes and experiments. Where Milvus and Pinecone aim at billions of items in the cloud, Chroma aims entirely at a frictionless developer experience.

Embedded. It runs in-process, so it isn't a heavyweight background service like MySQL or a Docker container. It lives inside your Python script or Jupyter notebook. That means no connection strings, database users, firewalls or cloud instances. Getting started really is this short:

import chromadb
# Start a local, persistent database on your hard drive
client = chromadb.PersistentClient(path="./my_local_db")
collection = client.get_or_create_collection("my_docs")
# Add raw text - Chroma handles the embedding automatically
collection.add(
    documents=[
        "Retrieval-Augmented Generation relies on good context.",
        "Chroma runs in-process."
    ],
    ids=["id1", "id2"]
)

Run it in ephemeral mode, all in RAM where data vanishes when the script ends, or point it at a folder to persist to disk.

Why it suits prototypes. Two reasons. First, it comes with built-in embedding functions, defaulting to a lightweight local model, all-MiniLM-L6-v2. Usually you'd call an embedding API, wait for vectors and map them yourself, but here you hand over raw text and Chroma does the rest. Second, tooling support is excellent. Walk through almost any LangChain or LlamaIndex tutorial and Chroma is the store they pick, so an example RAG pipeline you copy has likely got it baked in.

It has grown up. Chroma is no longer just a prototype tool. It now offers multi-modal search, hybrid dense plus BM25 search and a client-server mode (chroma run) for bigger multi-user setups.

Its limit. Scale and high availability. For a business-critical system with billions of vectors, strict 99th-percentile latency targets and automatic cross-region failover, a local, file-backed design won't do. If the goal is to test a RAG idea against a few thousand or million documents on your own machine, you won't get going quicker than this.

The verdict

No single database is best, only the best one for your current stage. A common path is to prototype on Chroma and graduate to Qdrant, Weaviate, Milvus or Pinecone once production-grade reliability becomes necessary.