Changer le thème

Choix de base de données vectorielle pour RAG : Pinecone vs Weaviate vs Milvus

Easton editorial illustration: vector-store selection console, managed vault, hybrid modular vault, self-hosted cluster vault

Un système RAG avec seulement 2 millions de documents et une latence P99 qui grimpe à 800 ms — l’erreur de sélection typique. L’équipe avait monté un prototype avec Chroma en deux semaines, mais au-delà du million de documents, la latence est passée de 20 ms à des niveaux insupportables. La migration vers une autre solution a pris trois semaines supplémentaires : export, reconstruction des vecteurs, configuration de l’index — chaque étape un piège.

Choisir la bonne base de données vectorielle, c’est déjà la moitié du succès d’un système RAG. Le retrieval détermine si l’IA trouve la « bonne » information ; la génération ne peut produire une « bonne » réponse qu’ensuite. Si le retrieval s’effondre, ajuster les prompts ou changer de modèle ne servira à rien.

Cet article compare Pinecone, Weaviate et Milvus sur les benchmarks de performance, les modèles tarifaires et les cas d’usage. Vous repartirez avec un cadre de décision clair, adapté à votre scénario, et les moyens de calculer un budget réel.

Chapitre 1 : Pourquoi le choix de base de données vectorielle est si crucial ?

1.1 Le rôle de la base de données vectorielle dans un système RAG

Beaucoup pensent à tort qu’une base vectorielle n’est qu’un « entrepôt » pour stocker des embeddings. En réalité, sa valeur centrale n’est pas le stockage, mais la recherche efficace de similarité sémantique.

Les bases relationnelles excellent dans la correspondance exacte — par exemple WHERE id = 100. Le RAG doit résoudre un autre problème : l’utilisateur demande « comment optimiser les performances Python », et vous devez trouver les documents sémantiquement les plus pertinents, pas une correspondance mot à mot. La base vectorielle convertit texte, images et audio en vecteurs haute dimension (par exemple 1536 dimensions avec OpenAI text-embedding-3-small), puis utilise des algorithmes ANN (Approximate Nearest Neighbor) pour trouver rapidement les candidats les plus proches parmi des millions, voire des milliards de vecteurs.

Le cœur du compromis ANN : rappel vs latence de requête. Calculer la distance exacte pour tous les vecteurs coûte cher — 1 million de vecteurs à 1536 dimensions, un scan complet prend des dizaines de secondes. Les algorithmes ANN (HNSW, IVF, PQ) ramènent la latence à la milliseconde en « approximant », au prix de résultats parfois manqués. Chaque base vectorielle tranche différemment sur la courbe rappel-latence, ce qui impacte directement la précision du retrieval RAG.

1.2 Le coût réel d’une mauvaise sélection

L’expérience de notre équipe en est un bon exemple. Chroma en local est pratique pour le développement — pip install chromadb, opérationnel en cinq minutes. Mais au-delà d’1 million de documents, les limites du déploiement mononœud apparaissent : la montée en charge multi-machines exige de gérer serveurs, migration, reconstruction d’index et équilibrage de charge manuellement.

Un piège plus discret : la dérive des coûts Pinecone. La couche gratuite supporte 1 million de vecteurs — séduisant. Mais en passant au payant, la double facturation stockage + requêtes surprend. Un ami dans le juridique IA : 50 millions de documents, 100 000 requêtes/jour, facture mensuelle à plus de 3 000 $ — loin des 500 $ budgétés.

Une mauvaise sélection n’est pas qu’un problème technique, c’est aussi une question d’argent.

1.3 Le paysage des bases vectorielles en 2026

Le marché se résume à « trois leaders + nouvelles forces » :

Les trois principaux :

  • Pinecone : Serverless entièrement managé, prêt à l’emploi, idéal pour démarrer vite. En 2026, le Serverless abaisse encore la barrière d’entrée.
  • Weaviate : conception modulaire, capacités de graphe intégrées, recherche hybride (mots-clés + vecteurs) particulièrement performante.
  • Milvus : architecture cloud-native distribuée, accélération GPU, réponse en millisecondes à l’échelle du milliard de vecteurs.

Nouvelles forces :

  • pgvector : extension PostgreSQL — si vous utilisez déjà PG, coût marginal nul pour ajouter la recherche vectorielle. Adapté aux scénarios légers.
  • Qdrant : open source, bonnes performances, positionnement rapport qualité-prix, plus léger que Milvus en auto-hébergement.

Cet article se concentre sur les trois premiers, couvrant de « zéro exploitation managé » à « auto-hébergement à grande échelle ». pgvector et Qdrant seront évoqués dans la section des cas particuliers.

Chapitre 2 : Comparaison des différences clés entre les trois bases

2.1 Architecture : trois philosophies distinctes

Milvus : architecture cloud-native distribuée

La philosophie de Milvus : « conçu pour la grande échelle ». Architecture distribuée native — déploiement Kubernetes, réplication multi-copies, extension horizontale. Composants bien séparés : nœuds coordinateurs pour l’orchestration, nœuds de données pour le stockage, nœuds de requête pour la recherche.

Déployer Milvus exige une vraie compétence d’exploitation : Kubernetes, configuration de cluster, réglage GPU. Une fois en place, de 10 à 100 millions de vecteurs, ajoutez des nœuds sans changer d’architecture. Recommandation officielle Milvus : cluster d’au moins 3 nœuds en production, 16 Go RAM minimum par nœud, GPU (NVIDIA A100 ou équivalent) pour les données à l’échelle du milliard.

Pinecone : Serverless entièrement managé

Pinecone pousse la simplicité au maximum. Pas de serveurs, pas de configuration d’index, pas de gestion de montée en charge — créez un compte, un index, appelez l’API. Le Serverless 2026 facture à l’usage réel ; quasi gratuit à l’arrêt.

Mais la commodité limite la flexibilité. Pinecone n’offre qu’une montée en charge verticale — la capacité d’index est plafonnée par le fournisseur cloud, sans extension horizontale comme Milvus. Les paramètres d’index personnalisés (M, ef pour HNSW) sont restreints à quelques presets. Si vous avez besoin d’un réglage fin des performances de retrieval, Pinecone peut sembler contraignant.

Weaviate : conception modulaire + héritage graphe

Weaviate fusionne base vectorielle et base de graphes. Chaque vecteur peut porter des attributs d’objet (texte, image, métadonnées) et des relations sémantiques entre objets. Idéal pour les graphes de connaissances — pas seulement des vecteurs similaires, mais aussi la navigation relationnelle.

Modularité : modules d’embedding OpenAI, Cohere ou modèles locaux ; vectorisation personnalisable ; recherche multimodale (texte vers image) prête à l’emploi. Déploiement flexible : auto-hébergé, Weaviate Cloud ou hybride. Plus de flexibilité signifie plus de paramètres — courbe d’apprentissage plus raide que Pinecone.

2.2 Benchmarks de performance : données réelles

Le tableau ci-dessous provient du benchmark Tencent Cloud 2025 et du rapport IoT Digital Twin PLM 2026. Conditions : vecteurs 1536 dimensions (OpenAI text-embedding-3-small), index HNSW, rappel 95 %.

<50ms
Milvus P99
Accélération GPU
<100ms
Pinecone P99
Serverless
<150ms
Weaviate P99
Recherche hybride
Centaines de milliards
Capacité Milvus
Extension distribuée
Source: Benchmark Tencent Cloud 2025
ProduitCapacité par indexLatence (P99)Recherche hybrideDistribuéAccélération GPU
MilvusCentaines de milliards<50msOuiOuiOui
WeaviateCentaines de milliards<150msOuiOuiNon
PineconeMilliards<100msOuiAuto-scalingNon

Observations clés :

  1. Écart de latence marqué : Milvus avec GPU ramène la P99 sous 50 ms, soit 3× plus rapide que Weaviate. Pour les scénarios sensibles à la réactivité (Q&R temps réel, chatbot), l’utilisateur perçoit la différence.

  2. Plafonds de capacité différents : Weaviate annonce des centaines de milliards de vecteurs, mais au-delà de 1 milliard les performances décroissent nettement. Milvus reste stable à l’échelle du milliard grâce au sharding distribué. Le plafond milliard de Pinecone suffit aux PME, mais peut limiter les grands comptes.

  3. Recherche hybride devenue standard : les trois supportent vecteur + mots-clés. Weaviate excelle — son héritage graphe rend la modélisation sémantique plus naturelle, avec un gain de précision de 5 à 10 % en sémantique complexe (données Tencent Cloud).

2.3 Modèles tarifaires : calculer le coût réel

Chaque éditeur a sa logique. Voici la structure des coûts :

Tarification Pinecone :

  • Gratuit : 1 M de vecteurs, stockage 0 $, requêtes limitées
  • Payant : à partir de 70 $/mois (10 Md de vecteurs inclus), dépassement facturé à la requête
  • Formule : Cost = $70 + (nombre de requêtes × $0,0001/requête) (hors quota gratuit)

Tarification Weaviate :

  • Cloud : 0,01 $/Go/mois (stockage), requêtes illimitées
  • Formule : Cost = (nombre de vecteurs × 1536 dim × 4 octets ÷ 1 Go) × $0,01 × mois
  • Auto-hébergé : open source gratuit, coût serveur à votre charge

Tarification Milvus :

  • Open source : auto-hébergement gratuit
  • Cloud (Tencent Cloud/AWS) : facturation par nœud, nœud haut de gamme ~2 000 $/mois
  • Formule : Cost = nombre de nœuds × $2 000/mois + coût GPU (si nécessaire)

Cas concret : 50 M de vecteurs, 100 000 requêtes/jour, 1536 dimensions.

SolutionCoût mensuel estiméRemarque
Pinecone payant70 $ + 100k×30×$0,0001 = 370 $Facturation à la requête, coût élevé si trafic fort
Weaviate Cloud50M×1536×4÷1024³ × $0,01 ≈ 3 $Stockage uniquement, requêtes illimitées, très économique
Milvus auto-hébergéServeur 500 $ + GPU 1 000 $ = 1 500 $Coût amorti sur le long terme, mais coût humain d’exploitation en sus

Point important : le modèle au stockage de Weaviate est très compétitif en requêtes fréquentes. Mais l’auto-hébergement cache souvent le coût d’exploitation — un ingénieur Kubernetes coûte au minimum 50 000 $/an.

Chapitre 3 : Arbre de décision selon les scénarios

Il n’y a pas de « meilleur » absolu, seulement le plus adapté. Voici un cadre selon volume de données et taille d’équipe.

3.1 Prototype rapide (<1 M de vecteurs)

Recommandation : couche gratuite Pinecone ou Chroma en local

Pour valider un produit, une démo interne ou si la croissance des données est incertaine, privilégiez Pinecone gratuit : zéro exploitation, intégration en 5 minutes, quota suffisant. Chroma convient aussi, mais au-delà du million, la migration devient douloureuse.

Comparaison de démarrage :

Pinecone :

from pinecone import Pinecone
pc = Pinecone(api_key="your-api-key")
index = pc.Index("my-index")  # 索引已在云端创建好

Chroma :

import chromadb
client = chromadb.Client()  # 本地内存模式
collection = client.create_collection("my-collection")

Les deux démarrent vite, mais l’index Pinecone persiste dans le cloud ; Chroma en mode local perd les données au redémarrage. Pour un prototype multi-session, Pinecone gratuit est préférable.

3.2 Production PME (1 M–100 M de vecteurs)

Recommandation : Pinecone payant ou Weaviate Cloud

Deux facteurs : coût d’exploitation et précision du retrieval.

Sans équipe dédiée, choisissez un service managé. Pinecone et Weaviate Cloud éliminent l’exploitation. Mais les modèles tarifaires divergent : requêtes fréquentes → Weaviate (stockage) ; requêtes rares → Pinecone (stockage + requêtes).

Pour une haute exigence de précision (juridique, médical), la recherche hybride Weaviate performe mieux — +5 à 10 % en sémantique complexe selon Tencent Cloud. Les capacités graphe permettent aussi le retrieval par relations, pas seulement par similarité documentaire.

Estimation des coûts :

Coût mensuel = (nombre de vecteurs × dimensions × 4 octets ÷ 1 Go) × prix stockage × mois
             + (requêtes/jour × 30 × prix/requête)

Weaviate : prix requête = 0. Pinecone : ~0,0001 $/requête. Insérez vos chiffres — l’écart peut être considérable.

3.3 Grande entreprise (>100 M de vecteurs)

Recommandation : Milvus auto-hébergé + Kubernetes

À l’échelle du milliard, le managé perd en rapport qualité-prix. Le plafond milliard de Pinecone peut être insuffisant ; Weaviate Cloud au stockage devient cher. Milvus auto-hébergé : open source, GPU, extension horizontale.

Prérequis : une équipe d’exploitation. Déploiement Milvus nécessite :

  • Cluster Kubernetes (minimum 3 nœuds)
  • Serveurs GPU (NVIDIA A100 ou équivalent)
  • Réglage des paramètres d’index et optimisation de latence

Ne négligez pas le coût humain. Sans compétence Kubernetes existante, recrutement ou formation à intégrer. Sur le long terme, l’auto-hébergement à l’échelle du milliard coûte moins que le managé — mais investissement initial élevé, adapté aux projets à croissance prévisible.

3.4 Cas particuliers

Recherche multimodale (texte vers image, image vers image) : Weaviate

Weaviate intègre la vectorisation multimodale (CLIP, modèles multimodaux) — uploadez une image, vectorisation automatique, recherche dans le même index que les vecteurs texte. Milvus le supporte aussi, mais configuration manuelle. Pinecone ne stocke que les vecteurs fournis — la vectorisation reste à votre charge.

Graphe de connaissances + RAG : Weaviate

Weaviate modélise les relations objet-objet — par exemple la chaîne entreprise-employé-projet. Navigation relationnelle, pas seulement similarité documentaire. Milvus et Pinecone ne font que de la recherche vectorielle pure.

Léger / PostgreSQL existant : pgvector

Si vous utilisez déjà PostgreSQL avec peu de données (moins d’1 M), pgvector ajoute la recherche vectorielle sans coût supplémentaire. CREATE EXTENSION vector; suffit. Performance inférieure aux bases dédiées ; au-delà du million, latence notable.

Chapitre 4 : Intégration LangChain — code pratique

Exemples complets pour les trois bases : initialisation, ajout de vecteurs, requête — prêts à exécuter.

4.1 Pinecone + LangChain

# 安装依赖
# pip install pinecone-client langchain-openai

from pinecone import Pinecone
from langchain_openai import OpenAIEmbeddings
from langchain_pinecone import PineconeVectorStore

# 初始化 Pinecone
pc = Pinecone(api_key="your-pinecone-api-key")
index_name = "rag-demo"

# 创建索引(首次需要)
if index_name not in pc.list_indexes().names():
    pc.create_index(
        name=index_name,
        dimension=1536,  # OpenAI text-embedding-3-small
        metric="cosine",
        spec={"serverless": {"cloud": "aws", "region": "us-east-1"}}
    )

index = pc.Index(index_name)

# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = PineconeVectorStore(
    index=index,
    embedding=embeddings,
    text_key="text"
)

# 添加文档
from langchain.schema import Document
docs = [
    Document(page_content="Python 性能技巧:使用列表推导式替代循环", metadata={"source": "blog"}),
    Document(page_content="NumPy 向量化运算比纯 Python 快 100 倍", metadata={"source": "blog"}),
]
vectorstore.add_documents(docs)

# 查询检索
results = vectorstore.similarity_search("如何 Python 性能", k=3)
for doc in results:
    print(doc.page_content)

4.2 Weaviate + LangChain

# 安装依赖
# pip install weaviate-client langchain-openai

import weaviate
from langchain_openai import OpenAIEmbeddings
from langchain_weaviate import WeaviateVectorStore

# 初始化 Weaviate(云托管示例)
client = weaviate.connect_to_wcs(
    cluster_url="your-cluster-url.weaviate.network",
    auth_credentials=weaviate.auth.AuthApiKey("your-weaviate-api-key"),
)

# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = WeaviateVectorStore(
    client=client,
    index_name="RagDemo",
    text_key="content",
    embedding=embeddings,
)

# 添加文档
from langchain.schema import Document
docs = [
    Document(page_content="RAG 系统检索精度取决于向量数据库选型", metadata={"category": "tech"}),
    Document(page_content="Weaviate 混合搜索提升语义检索准确率", metadata={"category": "tech"}),
]
vectorstore.add_documents(docs)

# 混合搜索(向量 + 关键词)
results = vectorstore.similarity_search(
    query="RAG 检索",
    k=3,
)
for doc in results:
    print(doc.page_content)

client.close()  # 关闭连接

4.3 Milvus + LangChain

# 安装依赖
# pip install pymilvus langchain-openai

from pymilvus import MilvusClient
from langchain_openai import OpenAIEmbeddings
from langchain_milvus import Milvus

# 初始化 Milvus(本地示例)
client = MilvusClient(uri="http://localhost:19530")

# 创建 collection
collection_name = "rag_demo"
if client.has_collection(collection_name):
    client.drop_collection(collection_name)
client.create_collection(
    collection_name=collection_name,
    dimension=1536,
)

# 初始化 LangChain 向量存储
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Milvus(
    embedding_function=embeddings,
    collection_name=collection_name,
    connection_args={"uri": "http://localhost:19530"},
)

# 添加文档
from langchain.schema import Document
docs = [
    Document(page_content="Milvus GPU 加速实现亿级向量毫秒检索", metadata={"gpu": True}),
    Document(page_content="分布式架构支持水平扩展到百亿向量", metadata={"scale": "large"}),
]
vectorstore.add_documents(docs)

# 查询检索
results = vectorstore.similarity_search("大规模向量检索", k=3)
for doc in results:
    print(doc.page_content)

4.4 Migration : de Chroma vers une solution managée

Si Chroma servait au prototype et que vous passez en production, voici le flux en trois étapes :

Étape 1 : exporter les données Chroma

import chromadb
client = chromadb.PersistentClient(path="./chroma_db")
collection = client.get_collection("my_collection")

# 获取所有向量
results = collection.get(include=["embeddings", "metadatas", "documents"])
vectors = results["embeddings"]
metadatas = results["metadatas"]
documents = results["documents"]

Étape 2 : import par lots vers la base cible

# 导入到 Pinecone
from langchain.schema import Document
docs = [
    Document(page_content=documents[i], metadata=metadatas[i])
    for i in range(len(documents))
]
pinecone_store.add_documents(docs)  # 批量上传

Étape 3 : reconstruire l’index et valider

# 验证检索结果一致性
chroma_results = collection.query(query_texts=["test query"], n_results=5)
pinecone_results = pinecone_store.similarity_search("test query", k=5)

# 对比召回率,确认迁移成功

Estimation : 2 à 3 heures pour 1 M de vecteurs de Chroma vers Pinecone (selon bande passante). Exécutez en période creuse.

Chapitre 5 : Synthèse et tableau de décision

5.1 Tableau de décision

ScénarioVolumeÉquipeRecommandationJustification
Prototype<1 M1–2 pers.Pinecone gratuitZéro exploitation, démarrage rapide
Production PME1 M–100 M3–5 pers., sans opsWeaviate CloudRecherche hybride précise, stockage économique
Production requêtes fréquentes1 M–100 M3–5 pers.Weaviate CloudRequêtes illimitées, meilleur rapport qualité-prix
Production requêtes rares1 M–100 M3–5 pers.Pinecone payantFacturation à la requête, coût maîtrisé si faible trafic
Grande entreprise>100 M5+ pers. + opsMilvus auto-hébergéGPU, extension horizontale, coût long terme
MultimodalIllimitéIllimitéWeaviateSupport multimodal intégré
Graphe de connaissances RAGIllimitéIllimitéWeaviateHéritage graphe, relations sémantiques
Léger / PG existant<1 MIllimitépgvectorCoût marginal nul, extension simple

5.2 Processus de sélection en trois étapes

  1. Évaluer volume et croissance

    • Combien de documents aujourd’hui ?
    • Projection dans un an ?
    • Croissance linéaire ou exponentielle ?
  2. Calculer le coût réel

    Coût mensuel = stockage + requêtes + exploitation

    Appliquez les formules ci-dessus. N’oubliez pas l’exploitation — le managé la supprime, l’auto-hébergement peut être moins cher amorti.

  3. Valider à petite échelle

    • Testez avec 10 % des données
    • Mesurez P99, rappel, QPS
    • Migrez en volume une fois validé

5.3 Trois erreurs courantes

Erreur 1 : regarder le prix, pas l’exploitation

Beaucoup choisissent l’open source « parce que gratuit », mais le coût humain est sous-estimé. Un ingénieur Kubernetes : 50 000 $+/an ; former l’équipe existante : 1 à 2 mois. Le managé semble cher, mais économisez l’exploitation dans le calcul total.

Erreur 2 : ignorer l’impact de la dimension des vecteurs

text-embedding-3-large produit 3072 dimensions — 2× text-embedding-3-small (1536). Plus la dimension est élevée, plus latence et stockage augmentent. Fixez d’abord le modèle d’embedding avant de choisir la base.

Erreur 3 : découvrir trop tard l’incompatibilité avec le modèle d’embedding

Pinecone ne stocke que les vecteurs — vous générez les embeddings vous-même. Weaviate intègre la vectorisation (OpenAI, Cohere, modèles locaux). Si vous voulez « uploader un document et vectoriser automatiquement », vérifiez cette capacité avant de choisir.

Il n’y a pas de réponse standard. Clarifiez votre scénario, calculez le coût réel, validez à petite échelle avant le déploiement complet. Cet article devrait vous aider à éviter les pièges et choisir la solution adaptée.

Si vous rencontrez d’autres problèmes en pratique, n’hésitez pas à commenter — nous continuons aussi à apprendre sur le terrain.

FAQ

Pinecone, Weaviate ou Milvus — lequel a la latence la plus faible ?
Avec accélération GPU, Milvus atteint une latence P99 &lt;50 ms, soit 3× plus rapide que Weaviate (&lt;150 ms) et 2× plus rapide que Pinecone (&lt;100 ms). Pour le Q&amp;R en temps réel, choisissez Milvus.
Lequel coûte le moins cher en cas de requêtes fréquentes ?
Weaviate facture au stockage ($0,01/Go/mois), sans limite sur les requêtes. Pour 50 M de vecteurs et 100 000 requêtes/jour, Weaviate coûte environ 3 $/mois, Pinecone environ 370 $.
Sans équipe d'exploitation, lequel choisir ?
Pinecone ou Weaviate Cloud. Les deux sont entièrement managés, zéro exploitation. Pinecone est plus simple ; Weaviate offre plus de flexibilité (recherche hybride, multimodal).
Combien de temps pour migrer depuis Chroma ?
Environ 2 à 3 heures pour 1 M de vecteurs de Chroma vers Pinecone. Étapes : export → import par lots → reconstruction de l'index → validation du rappel. Exécutez en période creuse.
Comment choisir la dimension des vecteurs ?
OpenAI text-embedding-3-small produit 1536 dimensions, latence modérée ; text-embedding-3-large produit 3072 dimensions, latence doublée. En production, privilégiez small, sauf si la précision exige le large.
Graphe de connaissances + RAG : lequel choisir ?
Weaviate. Son héritage de base de graphes permet de modéliser les relations objet-objet, par exemple la chaîne sémantique entreprise-employé-projet. Milvus et Pinecone ne supportent que la recherche vectorielle pure.

14 min de lecture · Publié le: 27 avr. 2026 · Mis à jour le: 27 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog