Milvus, Qdrant, Weaviate : Comparatif Complet 2025
Temps de lecture : 22 minutes | Niveau : Intermédiaire à Avancé | Dernière mise à jour : Mars 2025
1. Présentation des trois solutions
Le marché des bases vectorielles a explosé depuis 2022 avec l'avènement des LLMs et des systèmes RAG. Trois acteurs majeurs se distinguent : Milvus, Qdrant et Weaviate. Chacun répond à des besoins différents en termes de scalabilité, performance, facilité d'utilisation et écosystème.
1.1. Milvus : le géant open source scalable
Milvus en bref
- Créé en : 2019 par Zilliz (spin-off de recherche académique chinoise)
- Langage : Go + C++ (moteur vectoriel FAISS, Annoy, HNSWlib)
- Licence : Apache 2.0 (100% open source)
- Architecture : Distribuée cloud-native (séparation compute/storage)
- Communauté : 26 000+ stars GitHub, 350+ contributeurs
- Cloud managed : Zilliz Cloud (pricing par dimension/requête)
Milvus est conçu pour des déploiements à très grande échelle (10M+ à 1B+ vecteurs). Son architecture distribuée inspirée de Snowflake sépare :
- Coordinateurs : Root, Query, Data, Index coordinators (orchestration)
- Worker nodes : Query nodes (lecture), Data nodes (écriture), Index nodes (indexation)
- Stockage : MinIO/S3 pour les vecteurs, etcd pour métadonnées, Pulsar pour logs
Points forts : Scalabilité extrême (testée jusqu'à 10+ milliards de vecteurs), support multi-index (HNSW, IVF, DiskANN, GPU), gestion avancée des partitions, forte adoption enterprise (Nvidia, Shopify, PayPal).
Points faibles : Complexité opérationnelle élevée (minimum 10+ pods Kubernetes), courbe d'apprentissage raide, overhead réseau en mode distribué, consommation ressources importante.
1.2. Qdrant : le challenger Rust ultra-performant
Qdrant en bref
- Créé en : 2021 par équipe européenne (Berlin/Amsterdam)
- Langage : Rust (100% natif, zero-copy, memory safety)
- Licence : Apache 2.0 + version Enterprise (features additionnelles)
- Architecture : Single-node optimisé + clustering (mode distribué depuis v1.7)
- Communauté : 18 000+ stars GitHub, forte croissance 2024
- Cloud managed : Qdrant Cloud (free tier 1GB, puis $25/GB/mois)
Qdrant mise sur la simplicité opérationnelle et les performances brutes. Contrairement à Milvus, Qdrant peut tourner en single-node sur un simple Docker container tout en gérant 10-50M vecteurs avec d'excellentes performances.
Architecture épurée :
- HNSW natif : Implémentation Rust optimisée (30% plus rapide que hnswlib C++)
- Quantization : Scalar, Product, Binary quantization (réduction mémoire 4-32x)
- WAL : Write-Ahead Log pour durabilité (crash recovery)
- Filtrage avancé : Payload indexing avec B-Tree pour filtres complexes
Points forts : Performances exceptionnelles (latence P95 <10ms sur 10M vecteurs), facilité de déploiement (Docker/Kubernetes simple), API intuitive, filtrage métadonnées très puissant, faible empreinte mémoire.
Points faibles : Mode distribué récent (moins mature que Milvus), documentation parfois lacunaire sur cas avancés, écosystème SDK plus limité, communauté plus petite.
1.3. Weaviate : l'approche GraphQL et modules IA
Weaviate en bref
- Créé en : 2019 par SeMI Technologies (Pays-Bas)
- Langage : Go
- Licence : BSD-3 (open source)
- Architecture : Multi-node avec sharding horizontal
- Communauté : 9 000+ stars GitHub, forte présence Europe
- Cloud managed : Weaviate Cloud Services (free tier 14 jours, puis $25/mois base)
Weaviate se positionne comme une base vectorielle tout-en-un avec un focus sur l'expérience développeur et l'intégration IA native. Son point de différenciation : un système de modules qui intègre directement des modèles d'embeddings.
Caractéristiques distinctives :
- API GraphQL : Query language expressif pour requêtes complexes (vs REST classique)
- Modules pré-intégrés : text2vec-openai, text2vec-cohere, img2vec-neural, multi2vec-clip (vectorisation automatique)
- Schéma typé : Définition de classes avec propriétés typées (proche d'une base orientée graphe)
- Hybrid search native : BM25 + recherche vectorielle fusionnées automatiquement
Points forts : Time-to-market rapide (modules IA préconfigurés), GraphQL puissant pour requêtes riches, hybrid search clé en main, bonne documentation, écosystème LangChain/LlamaIndex mature.
Points faibles : Performances inférieures à Qdrant/Milvus sur très gros volumes (>50M vecteurs), consommation mémoire élevée avec modules, scaling limité comparé à Milvus, lock-in potentiel avec modules propriétaires.
1.4. Tableau récapitulatif
Critère | Milvus | Qdrant | Weaviate |
---|---|---|---|
Année création | 2019 | 2021 | 2019 |
Langage | Go + C++ | Rust | Go |
Licence | Apache 2.0 | Apache 2.0 | BSD-3 |
Architecture | Distribuée cloud-native | Single-node + clustering | Multi-node sharding |
Scalabilité max | 10B+ vecteurs | 100M+ vecteurs | 100M+ vecteurs |
Stars GitHub | 26 000+ | 18 000+ | 9 000+ |
Complexité déploiement | Élevée (K8s 10+ pods) | Faible (1 Docker) | Moyenne (3-5 nodes) |
API principale | gRPC + REST | REST + gRPC | GraphQL + REST |
Cas d'usage idéal | Enterprise >100M vecteurs | Production 1M-100M vecteurs | Prototypes rapides, RAG simple |
2. Architecture et design
L'architecture interne détermine les capacités de scalabilité, performances et résilience. Les trois solutions adoptent des approches radicalement différentes.
2.1. Architecture de Milvus : cloud-native distribué
Milvus suit une architecture découplée inspirée de Snowflake et Databricks :
Composants principaux
- Access Layer
- Proxy : Load balancer et authentification (stateless)
- Expose API gRPC/REST vers clients
- Coordinator Service
Root Coordinator
: Gestion métadonnées globales (schémas, collections)Query Coordinator
: Orchestration requêtes, gestion segmentsData Coordinator
: Allocation data channels, flush policiesIndex Coordinator
: Scheduling jobs d'indexation
- Worker Nodes
Query Nodes
: Exécution recherches vectorielles (scale horizontal)Data Nodes
: Ingestion, validation, persistence (streaming)Index Nodes
: Construction index HNSW/IVF/GPU
- Storage
- Meta Store : etcd (métadonnées, schémas, états)
- Log Broker : Pulsar ou Kafka (WAL, réplication)
- Object Storage : MinIO, S3, Azure Blob (segments, index)
Avantages : Scalabilité infinie (ajout de nodes), résilience (chaque composant réplicable), séparation compute/storage (coûts optimisés), support GPU natif.
Inconvénients : 15-20 composants à orchestrer, latence réseau entre composants (overhead 10-30ms), complexité opérationnelle (monitoring, debugging difficile), coût infrastructure minimum élevé.
2.2. Architecture de Qdrant : single-node optimisé
Qdrant privilégie une architecture monolithique performante puis scaling horizontal :
Mode single-node (par défaut)
- Rust Process unique
- HTTP/gRPC server (actix-web, tonic)
- Segment Manager : Gestion collections, index, mémoire
- HNSW Engine : Implémentation native optimisée
- WAL : Write-Ahead Log pour durabilité
- Stockage
- Segments : Fichiers mmapped (zero-copy disk access)
- Payloads : RocksDB ou simple key-value store
- HNSW graph : Fichiers binaires optimisés
Mode distribué (depuis v1.7, 2024)
- Sharding horizontal : Collections distribuées sur N nodes
- Réplication : Factor configurable (N copies par shard)
- Consensus : Raft pour coordination (pas de Zookeeper/etcd externe)
- Consistent hashing : Distribution vecteurs par ID
Avantages : Simplicité extrême (1 binaire), performances maximales (pas de réseau en single-node), faible latence (5-15ms P95), empreinte mémoire optimisée (quantization agressive).
Inconvénients : Scalabilité verticale limitée en single-node (128GB RAM ~50M vecteurs), mode distribué moins mature (production depuis Q1 2024), pas de séparation compute/storage.
2.3. Architecture de Weaviate : multi-tenant sharding
Weaviate adopte une approche intermédiaire :
Architecture cluster
- Nodes homogènes : Chaque node peut gérer requêtes + stockage
- Sharding par classe : Chaque classe (schema) peut avoir N shards
- Replication : Factor configurable avec consistency tunable
- Schema registry : Métadonnées centralisées (Raft consensus)
Composants internes
- GraphQL API : Parsing et optimisation requêtes
- Vector Index : HNSW (via hnswlib C++)
- Inverted Index : Pour recherche BM25 (filtres texte)
- Object Store : LSM-tree pour payloads
- Modules : Conteneurs Docker séparés (text2vec, img2vec, etc.)
Avantages : Équilibre simplicité/scalabilité, multi-tenancy natif (isolation par tenant), modules IA plug-and-play, GraphQL expressif.
Inconvénients : Overhead mémoire des modules (500MB-2GB/module), performances inférieures à Qdrant, scaling limité à ~100M vecteurs, GraphQL complexe pour débutants.
2.4. Comparaison des choix architecturaux
Dimension | Milvus | Qdrant | Weaviate |
---|---|---|---|
Paradigme | Micro-services cloud-native | Monolithe puis distribué | Cluster homogène |
Séparation compute/storage | Oui (S3/MinIO) | Non (storage local) | Non (storage local) |
Nombre composants | 15+ (coordinateurs, workers, storage) | 1 (single-node) ou N (cluster) | 3-10 nodes + modules |
Consensus/Coordination | etcd + Pulsar | Raft intégré | Raft intégré |
Scalabilité théorique | Illimitée (cloud-native) | Limitée par nb nodes (~100) | Limitée (~50 nodes) |
Latence minimale | 20-50ms (overhead réseau) | 5-10ms (local access) | 15-30ms |
Complexité opérationnelle | Très élevée (K8s expert requis) | Faible (Docker suffit) | Moyenne |
Règle de décision architecture
- Milvus : Si >100M vecteurs, équipe SRE dédiée, budget cloud confortable
- Qdrant : Si 1M-100M vecteurs, équipe DevOps standard, besoin low-latency
- Weaviate : Si prototypage rapide, multi-modal, équipe IA sans DevOps
3. Comparaison des fonctionnalités
3.1. Algorithmes d'indexation supportés
Le choix de l'algorithme d'indexation détermine le compromis performance/précision/mémoire :
Index | Milvus | Qdrant | Weaviate |
---|---|---|---|
HNSW | ✅ Via hnswlib | ✅ Implémentation Rust native | ✅ Via hnswlib |
IVF (Inverted File) | ✅ IVF_FLAT, IVF_SQ8, IVF_PQ | ❌ (focus HNSW uniquement) | ❌ |
DiskANN | ✅ Expérimental (Microsoft) | ❌ | ❌ |
Flat (brute-force) | ✅ FLAT | ✅ Brute-force mode | ✅ |
GPU Index | ✅ GPU_IVF_FLAT, GPU_IVF_PQ | ❌ (roadmap 2025) | ❌ |
Quantization | ✅ Scalar, Product | ✅ Scalar, Product, Binary | ✅ Product Quantization |
Verdict : Milvus offre la palette la plus large (IVF, GPU, DiskANN), idéal pour optimiser coûts/performances. Qdrant se concentre sur HNSW mais avec l'implémentation la plus performante. Weaviate reste sur HNSW standard.
3.2. Métriques de distance
Toutes les solutions supportent les métriques vectorielles standards :
- Cosine Similarity : Angle entre vecteurs (normalisés) — Standard pour LLM embeddings
- Euclidean (L2) : Distance euclidienne classique — Bon pour CV, audio
- Dot Product : Produit scalaire — Si vecteurs déjà normalisés
- Manhattan (L1) : Somme des différences absolues — Rare en NLP
Spécificités :
- Milvus : Support additionnel de Hamming, Jaccard, Tanimoto (embeddings binaires)
- Qdrant : Support Hamming + distance custom via UDF (User Defined Functions)
- Weaviate : Cosine/Dot/L2/Hamming uniquement
3.3. Filtrage et métadonnées
Le filtrage sur métadonnées est crucial pour les systèmes RAG (filtrer par date, user_id, category, etc.).
Fonctionnalité | Milvus | Qdrant | Weaviate |
---|---|---|---|
Types de filtres | Boolean, Numeric, String, JSON | Boolean, Integer, Float, String, Geo, DateTime, UUID | Boolean, Int, Float, String, Date, UUID |
Opérateurs | =, !=, >, <, IN, AND, OR, NOT | =, !=, >, <, >=, <=, MATCH, RANGE, GEO_RADIUS | =, !=, >, <, LIKE, AND, OR, NOT |
Filtres imbriqués (nested) | ✅ JSON Path syntax | ✅ Nested payloads avec dot notation | ✅ Cross-references GraphQL |
Indexation filtres | ⚠️ Partiel (scalar index limité) | ✅ Payload index automatique (B-Tree) | ✅ Inverted index sur propriétés |
Géo-localisation | ❌ | ✅ Geo radius, bounding box | ✅ Geo coordinates |
Filtres plein texte | ❌ | ✅ Text matching avec tokenization | ✅ BM25 via hybrid search |
Point critique : Qdrant excelle sur le filtrage avec son Payload Index qui maintient des B-Tree automatiques sur toutes les propriétés. Milvus nécessite une configuration manuelle des scalar indexes. Weaviate offre un bon compromis via GraphQL.
3.4. Recherche hybride
La recherche hybride combine recherche vectorielle (sémantique) + recherche keyword (BM25) pour améliorer la précision.
- Milvus : ❌ Pas de support natif (nécessite Elasticsearch externe + fusion applicative)
- Qdrant : ⚠️ Support expérimental (text matching basique, pas BM25 complet)
- Weaviate : ✅ Hybrid search native avec fusion BM25 + Vector (paramètre
alpha
: 0=BM25, 1=vector, 0.5=50/50)
Best practice hybrid search
Pour Milvus/Qdrant sans hybrid natif : utilisez Reciprocal Rank Fusion (RRF) côté application. Lancez 2 requêtes parallèles (vector + Elasticsearch BM25), puis fusionnez les scores avec RRF. Gain typique : +5-15% recall@10 sur benchmarks MS MARCO.
3.5. Fonctionnalités avancées
Multi-tenancy
- Milvus : Partitions (isolate data per tenant) + RBAC granulaire
- Qdrant : Collections multiples + filtrage sur
tenant_id
payload - Weaviate : Multi-tenancy natif avec isolation complète par tenant
Snapshots et backup
- Milvus : ✅ Snapshots via
create_snapshot()
API + S3 export - Qdrant : ✅ Snapshots collections + full cluster snapshots
- Weaviate : ✅ Backup via modules (S3, GCS, Azure)
Réplication et haute disponibilité
- Milvus : ✅ Réplication multi-nodes avec tunable consistency
- Qdrant : ✅ Replication factor (depuis v1.7) + Raft consensus
- Weaviate : ✅ Replication factor avec quorum reads/writes
Mises à jour temps réel
- Milvus : Eventual consistency (flush manuel ou auto-flush configurable)
- Qdrant : Quasi temps réel (WAL + flush automatique en millisecondes)
- Weaviate : Temps réel avec tunable consistency
3.6. Matrice de comparaison détaillée
Feature | Milvus | Qdrant | Weaviate |
---|---|---|---|
Index HNSW | ✅ | ✅ (meilleur perf) | ✅ |
Index IVF | ✅ | ❌ | ❌ |
Index GPU | ✅ | ❌ | ❌ |
Quantization | ✅ SQ, PQ | ✅ SQ, PQ, Binary | ✅ PQ |
Filtrage avancé | ⚠️ Bon | ✅ Excellent | ✅ Très bon |
Hybrid search | ❌ | ⚠️ Expérimental | ✅ Natif |
Multi-tenancy | ✅ Partitions | ✅ Via filtres | ✅ Natif |
Snapshots/Backup | ✅ | ✅ | ✅ |
Réplication | ✅ | ✅ | ✅ |
ACID transactions | ⚠️ Limité | ❌ | ❌ |
GraphQL API | ❌ | ❌ | ✅ |
Modules IA intégrés | ❌ | ❌ | ✅ text2vec, img2vec |
Monitoring/Observability | ✅ Prometheus, Grafana | ✅ Prometheus, traces | ✅ Prometheus |
4. Benchmarks de performance
Avertissement sur les benchmarks
Les performances dépendent énormément de : dimensionnalité vecteurs, configuration index (ef_construction, M pour HNSW), hardware, tuning OS. Les chiffres ci-dessous sont des ordres de grandeur issus de benchmarks indépendants (ann-benchmarks.com, benchmarks communautaires) et tests internes.
4.1. Méthodologie de benchmark
Configuration de référence :
- Dataset : GIST-1M (1 million vecteurs, 960 dimensions) + DEEP-10M (10M, 96 dim) + LAION-100M (100M, 768 dim)
- Hardware : AWS r6i.4xlarge (16 vCPU, 128GB RAM, NVMe SSD)
- Index : HNSW avec
M=16
,ef_construction=200
- Métrique : Cosine similarity
- Recall target : 95% (top-10 résultats)
- Charge : 10 clients concurrents (simule production réelle)
4.2. Latence de recherche (P95)
La latence P95 (95e percentile) est critique en production — elle représente l'expérience utilisateur dans le pire des cas acceptables.
Dataset | Milvus (gRPC) | Qdrant (REST) | Weaviate (GraphQL) |
---|---|---|---|
1M vecteurs (960d) | 18-25ms | 8-12ms | 15-20ms |
10M vecteurs (96d) | 35-50ms | 15-22ms | 30-45ms |
100M vecteurs (768d) | 80-120ms | 40-60ms | 90-140ms |
100M + PQ quantization | 50-75ms | 25-35ms | 60-90ms |
Analyse : Qdrant domine sur la latence brute grâce à son implémentation Rust zero-copy. Milvus souffre d'overhead réseau en mode distribué (+10-30ms vs single-node). Weaviate est pénalisé par GraphQL parsing.
4.3. Débit (throughput)
Le throughput mesure le nombre de requêtes/seconde (QPS) que le système peut traiter.
Configuration | Milvus | Qdrant | Weaviate |
---|---|---|---|
Single-node (10M vec) | 800-1200 QPS | 1500-2500 QPS | 600-1000 QPS |
Cluster 3 nodes | 3000-5000 QPS | 4000-7000 QPS | 1800-3000 QPS |
Cluster 10 nodes | 10000-18000 QPS | 12000-20000 QPS | 5000-8000 QPS |
Ingestion (inserts/s) | 50000-100000/s | 30000-60000/s | 20000-40000/s |
Analyse : Qdrant offre le meilleur throughput single-node. Milvus rattrape en mode distribué grâce à son scaling horizontal supérieur. Weaviate plafonne plus tôt (limite architecture).
4.4. Précision des résultats (recall)
Le recall@k mesure la précision : combien de vrais top-k résultats sont retournés vs brute-force.
Config Index | Milvus | Qdrant | Weaviate |
---|---|---|---|
HNSW default | 97.5% recall@10 | 98.2% recall@10 | 97.8% recall@10 |
HNSW optimisé (ef=512) | 99.5% | 99.7% | 99.4% |
IVF (Milvus uniquement) | 92-96% (tunable) | N/A | N/A |
PQ quantization | 94-97% | 95-98% | 94-96% |
Analyse : Très peu de différence en pratique (toutes >97% avec config standard). Qdrant légèrement meilleur grâce à implémentation HNSW optimisée. Le recall dépend surtout du tuning ef
(exploration factor).
4.5. Consommation mémoire et ressources
Empreinte mémoire pour 10M vecteurs de 768 dimensions (embeddings OpenAI) :
Config | Milvus | Qdrant | Weaviate |
---|---|---|---|
Vecteurs bruts (FLAT) | 30 GB (4 bytes/dim) | 30 GB | 30 GB |
HNSW index overhead | +40% (~42GB total) | +35% (~40GB total) | +45% (~43GB total) |
Product Quantization (PQ) | 3-5 GB (10x compression) | 2-4 GB (12x compression) | 4-6 GB (8x compression) |
Scalar Quantization | 8-10 GB (4x compression) | 7-9 GB (4.5x compression) | 9-11 GB (3.5x compression) |
CPU (idle) | 2-4 cores | 0.5-1 core | 1-2 cores |
Verdict coûts : Qdrant est le plus frugal (Rust efficient). Milvus nécessite des ressources importantes (coordinateurs + workers). Weaviate alourdi par les modules Docker.
4.6. Résultats comparatifs synthétiques
Classement Performance Global
- Qdrant : Meilleur rapport latence/throughput/mémoire (single-node jusqu'à 50M vecteurs)
- Milvus : Champion scalabilité horizontale (50M+ vecteurs, throughput maximal en distribué)
- Weaviate : Correct pour MVP/prototypes, limite sur très gros volumes
Règle empirique : Qdrant jusqu'à 50M vecteurs, Milvus au-delà. Weaviate si besoin hybrid search natif et prototypage rapide.
5. Facilité d'utilisation et développement
5.1. Installation et configuration
Milvus :
# Docker Compose (standalone - 6+ containers)
docker-compose -f docker-compose.yml up -d
# Kubernetes (production - Helm chart)
helm install milvus milvus/milvus --set cluster.enabled=true
# Nécessite : etcd, MinIO, Pulsar = 10-15 pods minimum
Qdrant :
# Docker (single container - production ready!)
docker run -p 6333:6333 qdrant/qdrant
# Kubernetes (simple deployment)
kubectl apply -f qdrant-deployment.yaml
# 1 pod suffit pour 10-50M vecteurs
Weaviate :
# Docker Compose (avec modules)
docker-compose up -d
# 2-3 containers : weaviate + text2vec-openai + img2vec
# Kubernetes (Helm)
helm install weaviate weaviate/weaviate
Verdict : Qdrant remporte la simplicité (1 commande Docker). Milvus demande expertise Kubernetes. Weaviate intermédiaire mais modules ajoutent complexité.
5.2. API et SDKs
Langage/Feature | Milvus | Qdrant | Weaviate |
---|---|---|---|
Python SDK | ✅ pymilvus (officiel) | ✅ qdrant-client | ✅ weaviate-client |
TypeScript/JavaScript | ✅ @zilliz/milvus2-sdk-node | ✅ @qdrant/js-client | ✅ weaviate-ts-client |
Go | ✅ milvus-sdk-go | ✅ go-client | ✅ weaviate-go-client |
Java | ✅ milvus-sdk-java | ✅ java-client | ✅ java-client |
Rust | ❌ | ✅ (natif) | ❌ |
API REST | ✅ (secondaire) | ✅ (principale) | ✅ REST + GraphQL |
gRPC | ✅ (principal) | ✅ | ✅ |
LangChain integration | ✅ Milvus vectorstore | ✅ Qdrant vectorstore | ✅ Weaviate vectorstore |
LlamaIndex integration | ✅ | ✅ | ✅ |
Exemples code Python :
Milvus
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
# Connexion
connections.connect("default", host="localhost", port="19530")
# Création collection
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=768)
]
schema = CollectionSchema(fields)
collection = Collection("docs", schema)
# Insertion
embeddings = [[0.1] * 768, [0.2] * 768]
collection.insert([embeddings])
# Recherche
collection.load()
results = collection.search(
data=[[0.15] * 768],
anns_field="embedding",
param={"metric_type": "COSINE", "params": {"ef": 64}},
limit=10
)
Qdrant
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
# Connexion
client = QdrantClient("localhost", port=6333)
# Création collection
client.create_collection(
collection_name="docs",
vectors_config=VectorParams(size=768, distance=Distance.COSINE)
)
# Insertion
client.upsert(
collection_name="docs",
points=[
PointStruct(id=1, vector=[0.1] * 768, payload={"text": "doc1"}),
PointStruct(id=2, vector=[0.2] * 768, payload={"text": "doc2"})
]
)
# Recherche avec filtre
results = client.search(
collection_name="docs",
query_vector=[0.15] * 768,
query_filter={"must": [{"key": "text", "match": {"value": "doc1"}}]},
limit=10
)
Weaviate
import weaviate
# Connexion
client = weaviate.Client("http://localhost:8080")
# Création classe (schema)
class_obj = {
"class": "Document",
"vectorizer": "text2vec-openai", # Vectorisation auto!
"properties": [
{"name": "text", "dataType": ["text"]}
]
}
client.schema.create_class(class_obj)
# Insertion (vectorisation automatique)
client.data_object.create(
{"text": "Mon document à indexer"},
"Document"
)
# Recherche (GraphQL)
result = client.query.get(
"Document", ["text"]
).with_near_text({
"concepts": ["recherche sémantique"]
}).with_limit(10).do()
Verdict API : Qdrant offre l'API la plus intuitive et pythonic. Weaviate se distingue avec vectorisation automatique (gain temps). Milvus plus verbeux mais puissant.
5.3. Documentation et communauté
- Milvus
- Documentation : ⭐️⭐️⭐️⭐️ (excellente, multi-langues)
- Communauté : 26k+ GitHub stars, Slack actif (5000+ membres)
- Tutorials : Nombreux (AWS, GCP, Kubernetes, RAG)
- Support : Enterprise via Zilliz
- Qdrant
- Documentation : ⭐️⭐️⭐️⭐️☆ (bonne mais lacunes sur edge cases)
- Communauté : 18k+ stars, Discord actif
- Tutorials : En expansion (focus RAG, LangChain)
- Support : Community + Enterprise tiers
- Weaviate
- Documentation : ⭐️⭐️⭐️⭐️⭐️ (exceptionnelle, videos, workshops)
- Communauté : 9k+ stars, Slack très actif
- Tutorials : Très complets (modules, hybrid search, GraphQL)
- Support : Réactivité excellente (core team très présente)
5.4. Courbe d'apprentissage
- Qdrant : ⭐️⭐️ (2-3 jours pour maîtriser) - API intuitive, déploiement trivial
- Weaviate : ⭐️⭐️⭐️ (1 semaine) - GraphQL à apprendre, modules à configurer
- Milvus : ⭐️⭐️⭐️⭐️ (2-4 semaines) - Architecture complexe, tuning index difficile, debugging distribué
5.5. Outils d'administration
- Milvus : Attu (UI web officielle), Prometheus metrics, Grafana dashboards
- Qdrant : Dashboard web intégré (visualisation clusters, collections), Prometheus
- Weaviate : Console web (schema, data browser), Grafana dashboards
6. Scalabilité et déploiement
6.1. Scalabilité horizontale
- Milvus
- Scale indépendant : Query nodes (lecture), Data nodes (écriture), Index nodes
- Sharding automatique sur collections
- Limite théorique : 10+ milliards de vecteurs testés
- Scaling linéaire (2x nodes = 2x throughput)
- Qdrant
- Mode cluster (v1.7+) : Sharding + réplication
- Consistent hashing pour distribution
- Limite pratique : 100M-500M vecteurs selon hardware
- Scaling quasi-linéaire (overhead Raft consensus)
- Weaviate
- Sharding par classe (schema)
- Replication factor configurable
- Limite pratique : 50M-200M vecteurs
- Scaling sous-linéaire (coordination overhead)
6.2. Haute disponibilité
Feature | Milvus | Qdrant | Weaviate |
---|---|---|---|
Réplication | ✅ Multi-replica (2-5x) | ✅ Replication factor N | ✅ Replication factor N |
Failover automatique | ✅ Via coordinateurs | ✅ Raft leader election | ✅ Raft consensus |
Split-brain protection | ✅ etcd quorum | ✅ Raft majority | ✅ Raft majority |
Zero-downtime updates | ✅ Rolling updates | ✅ Rolling updates | ✅ Rolling updates |
SLA garantie (cloud) | 99.9% (Zilliz Cloud Enterprise) | 99.9% (Qdrant Cloud Enterprise) | 99.9% (WCS Enterprise) |
6.3. Options de déploiement
- Self-hosted
- Milvus : Docker Compose (dev), Kubernetes (prod) - Helm chart officiel
- Qdrant : Docker, Kubernetes, binaire standalone
- Weaviate : Docker Compose, Kubernetes Helm chart
- Cloud managed
- Milvus : Zilliz Cloud (AWS, GCP, Azure) - Auto-scaling, backups, monitoring
- Qdrant : Qdrant Cloud (AWS, GCP) - Free tier 1GB, managed clusters
- Weaviate : Weaviate Cloud Services (AWS, GCP) - Sandbox gratuit 14j
- Hybrid
- Milvus : Possible (data on-premise, control plane cloud) via VPC peering
- Qdrant : Support hybrid via private endpoints
- Weaviate : Support hybrid deployment
6.4. Support cloud et managed services
Cloud | Milvus (Zilliz) | Qdrant Cloud | Weaviate Cloud |
---|---|---|---|
Free tier | $100 crédits (trial 30j) | 1GB gratuit perpétuel | 14 jours sandbox |
Pricing base | $0.10/CU/heure (~$70/mois) | $25/GB/mois (1M vec ~4GB) | $25/mois base + usage |
Auto-scaling | ✅ Oui | ✅ Vertical + horizontal | ✅ Oui |
Backups automatiques | ✅ Quotidiens | ✅ Snapshots on-demand | ✅ Backups continus |
Multi-region | ✅ (Enterprise) | ✅ (select regions) | ✅ (AWS/GCP regions) |
6.5. Kubernetes et orchestration
Maturité Kubernetes :
- Milvus : ⭐️⭐️⭐️⭐️⭐️ - Helm chart prod-ready, operators, StatefulSets optimisés, HPA (Horizontal Pod Autoscaler)
- Qdrant : ⭐️⭐️⭐️⭐️ - Simple deployment/StatefulSet, moins de configuration requise
- Weaviate : ⭐️⭐️⭐️⭐️ - Helm chart officiel, bonne intégration
7. Analyse des coûts
7.1. Modèles économiques
- Milvus : Open source (Apache 2.0) + cloud managed Zilliz (freemium)
- Qdrant : Open source (Apache 2.0) + cloud managed (freemium) + Enterprise (support SLA)
- Weaviate : Open source (BSD-3) + cloud managed (freemium) + Enterprise modules
7.2. Coûts d'infrastructure (self-hosted)
Scénario : 10 millions de vecteurs (768 dim), 1000 QPS, 99.9% SLA
Composant | Milvus (AWS) | Qdrant (AWS) | Weaviate (AWS) |
---|---|---|---|
Compute | 5x r6i.2xlarge = $1800/mois | 2x r6i.xlarge = $720/mois | 3x r6i.xlarge = $1080/mois |
Storage | S3 200GB = $5/mois | EBS 300GB = $30/mois | EBS 350GB = $35/mois |
Dependencies | etcd + Pulsar = $400/mois | $0 (tout intégré) | $0 (tout intégré) |
Load Balancer | ALB = $30/mois | ALB = $30/mois | ALB = $30/mois |
TOTAL/mois | $2235 | $780 | $1145 |
7.3. Coûts cloud managed
Volume | Zilliz Cloud | Qdrant Cloud | Weaviate Cloud |
---|---|---|---|
1M vecteurs (768d) | ~$80-120/mois | ~$100/mois (4GB) | ~$75-100/mois |
10M vecteurs | ~$300-500/mois | ~$800/mois (32GB) | ~$400-600/mois |
100M vecteurs | ~$2000-3500/mois | Contact (Enterprise) | Contact (Enterprise) |
Piège du pricing cloud
Les clouds facturent souvent sur mémoire allouée et non vecteurs stockés. Avec quantization (PQ), vous pouvez diviser les coûts par 8-12x ! Exemple : 10M vecteurs = 30GB brut, mais 3GB avec PQ = $75/mois au lieu de $750/mois sur Qdrant Cloud.
7.4. Coûts opérationnels
- Milvus : DevOps/SRE temps complet requis (tuning, monitoring, incidents) = $80-120k/an
- Qdrant : 20-30% d'un DevOps (simple à opérer) = $20-30k/an
- Weaviate : 40-50% d'un DevOps (modules à gérer) = $35-50k/an
7.5. TCO (Total Cost of Ownership) sur 3 ans
Hypothèse : 10M vecteurs, croissance 50%/an, équipe startup
Poste | Milvus (self-hosted) | Qdrant (cloud) | Weaviate (cloud) |
---|---|---|---|
Infra/Cloud (3 ans) | $80k | $35k | $25k |
DevOps (3 ans) | $300k | $75k | $120k |
Formation équipe | $20k | $5k | $8k |
Incidents/Downtime | $30k (estimé) | $5k | $10k |
TCO TOTAL | $430k | $120k | $163k |
Verdict TCO
Pour startups/PME (<50M vecteurs) : Qdrant Cloud ou Weaviate Cloud sont les plus rentables (facteur 2-3x vs Milvus self-hosted). Milvus devient compétitif uniquement à très grande échelle (>100M vecteurs) avec équipe SRE existante.
8. Recommandations par cas d'usage
8.1. Petits projets et prototypes (<1M vecteurs)
Recommandation : Qdrant ou Weaviate
- Qdrant si vous voulez performances maximales et contrôle total (Docker local)
- Weaviate si vous voulez vectorisation automatique et prototypage ultra-rapide
- Éviter Milvus : overhead inutile pour ce volume
8.2. Applications de production à échelle moyenne (1M-50M vecteurs)
Recommandation : Qdrant (premier choix)
- Meilleur compromis performance/simplicité/coûts
- Gère facilement 10-50M vecteurs en single-node
- Mode cluster pour HA si nécessaire
- Weaviate si hybrid search natif est critique
- Milvus si besoin GPU ou indexes spécialisés (IVF, DiskANN)
8.3. Systèmes à très grande échelle (>100M vecteurs)
Recommandation : Milvus
- Seule solution testée en production sur milliards de vecteurs
- Architecture cloud-native conçue pour scaling infini
- Support GPU pour accélération (IVF_GPU, PQ_GPU)
- Nécessite : équipe SRE, budget cloud, expertise Kubernetes
8.4. Cas d'usage spécifiques
RAG (Retrieval Augmented Generation)
- Weaviate : Hybrid search natif (BM25 + vector) améliore recall de 10-20%
- Qdrant : Si filtrage complexe requis (user_id, date, permissions)
- Milvus : Si volume documentaire massif (>10M documents)
Moteur de recommandation
- Qdrant : Latence minimale critique pour UX temps réel
- Milvus : Si catalogue produits >50M items
Recherche d'images/vidéos
- Weaviate : Modules img2vec, multi2vec-clip pré-intégrés
- Milvus : Si dataset massif (ImageNet, LAION-5B)
Recherche sémantique multi-tenant (SaaS)
- Weaviate : Multi-tenancy natif avec isolation parfaite
- Qdrant : Via filtrage payload (tenant_id) - plus flexible
8.5. Arbre de décision pour choisir
Décision rapide en 5 questions
- Volume de vecteurs ?
- <1M : Qdrant ou Weaviate
- 1M-50M : Qdrant (priorité)
- 50M-100M : Qdrant cluster ou Milvus
- >100M : Milvus
- Budget cloud mensuel ?
- <$500 : Qdrant Cloud ou Weaviate Cloud
- $500-2000 : Toutes options possibles
- >$2000 : Milvus self-hosted devient rentable
- Expertise DevOps disponible ?
- Aucune : Weaviate Cloud (plus simple)
- Basique : Qdrant (Docker suffit)
- Avancée (SRE) : Milvus (pleine puissance)
- Latence cible ?
- <10ms P95 : Qdrant single-node
- <50ms : Toutes solutions OK
- >50ms : Optimisation index nécessaire partout
- Features spécifiques nécessaires ?
- Hybrid search : Weaviate
- GPU acceleration : Milvus
- Filtrage avancé : Qdrant
- Vectorisation auto : Weaviate
8.6. Verdict final 2025
Résumé Comparatif
🥇 Qdrant
Meilleur choix général pour 80% des cas d'usage. Performances exceptionnelles, simplicité opérationnelle, coûts optimisés. Idéal pour startups et scale-ups jusqu'à 50M vecteurs.
🏆 Milvus
Champion scalabilité pour entreprises avec >100M vecteurs. Architecture cloud-native la plus avancée. Nécessite expertise DevOps mais imbattable à grande échelle.
✨ Weaviate
Prototypage ultra-rapide avec modules IA intégrés. Hybrid search natif excellent pour RAG. GraphQL puissant. Parfait pour équipes IA sans forte expertise DevOps.
Besoin d'aide pour choisir et déployer votre base vectorielle ?
Nos experts ont une expérience pratique avec ces trois solutions. Nous pouvons vous aider à faire le bon choix et assurer une mise en production réussie.
Discuter de votre projetQuestions fréquentes
Peut-on migrer facilement d'une solution à l'autre ?
La migration entre bases vectorielles est relativement simple car toutes exposent des APIs similaires (insert, search, delete). Le processus typique :
- Export vecteurs : Dump depuis source (format JSON/parquet)
- Transform : Adapter format métadonnées si nécessaire
- Import : Bulk insert vers destination (batch 1000-10000 vecteurs)
- Validation : Comparer recall sur sample queries
Durée : 10M vecteurs ~ 2-6 heures selon bande passante. Attention : Les index (HNSW) ne sont pas portables - reconstruction nécessaire (1-4h). Tools : Scripts open source disponibles (milvus-to-qdrant, qdrant-to-weaviate).
Quelle solution est la plus mature ?
Milvus (2019) et Weaviate (2019) sont les plus anciennes, avec 5+ ans de production. Qdrant (2021) est plus récent mais a rapidement gagné en maturité.
- Maturité production : Milvus > Weaviate > Qdrant
- Stabilité API : Toutes stables (v1.x ou v2.x)
- Adoption enterprise : Milvus (Nvidia, PayPal) > Weaviate (Spotify) > Qdrant (adoption rapide 2024)
- Breaking changes : Rares pour toutes (semantic versioning)
Verdict : Pour mission-critical avec SLA strict, privilégier Milvus ou Weaviate. Qdrant est suffisamment mature pour production depuis v1.5+ (2023).
Y a-t-il d'autres alternatives à considérer ?
Oui, plusieurs selon contexte :
- Pinecone : Cloud-only managed, très simple (serverless), mais vendor lock-in et coûts élevés ($70-200/mois pour 1M vecteurs)
- Chroma : Embarqué Python, parfait pour MVP/prototypes, mais pas scalable production (<1M vecteurs)
- Pgvector : Extension PostgreSQL, excellent si SQL existant, limite ~1M vecteurs sans tuning agressif
- Elasticsearch : Support vecteurs depuis v8.0, bon pour hybrid search, performances moyennes
- Redis Stack : RediSearch + VSS, ultra-rapide mais limite mémoire (coûteux >10M vecteurs)
- FAISS : Bibliothèque Meta (in-process), excellentes perfs mais pas de serveur (pour embedding dans apps)
Quand les considérer : Pinecone si zero DevOps, Pgvector si stack PostgreSQL, Chroma/FAISS pour POC uniquement.
Comment tester ces solutions avant de choisir ?
Méthodologie de benchmark en 5 étapes :
- Préparer dataset représentatif : 100k-1M vecteurs de votre domaine (vos vrais embeddings)
- Déployer localement : Docker Compose pour chaque solution (1 jour setup)
- Benchmark insertion : Mesurer throughput (vecteurs/s) et temps total indexation
- Benchmark recherche : 1000 queries aléatoires, mesurer latence P50/P95/P99 et recall@10
- Test filtrage : Requêtes avec filtres métadonnées complexes (date + category + user_id)
Outils : ann-benchmarks
(framework standard), scripts Python custom. Durée : 2-3 jours pour benchmark complet.
Free tiers cloud : Qdrant Cloud (1GB gratuit), Weaviate Cloud (14j), Zilliz Cloud (30j trial) permettent tests sans installation.
Quelle solution a le meilleur support enterprise ?
Support Enterprise comparé :
- Milvus (Zilliz)
- SLA 99.9% garantie, support 24/7, Slack dédié
- Professional Services (architecture review, tuning)
- Pricing : Contact (typiquement $2000+/mois)
- Clients : Nvidia, Shopify, PayPal, IBM
- Qdrant
- Enterprise tier : Support prioritaire, SLA custom
- Moins établi que Milvus (startup 2021) mais réactif
- Pricing : À partir $1000/mois
- Weaviate
- Enterprise Cloud : SLA 99.9%, support 24/7
- Professional Services disponibles
- Pricing : Contact ($1500+/mois estimé)
- Core team très présente sur Slack community
Verdict : Milvus/Zilliz offre le support enterprise le plus mature et prouvé. Weaviate excellent pour startups (communauté réactive). Qdrant en construction mais prometteur.