5. RetrievalExperte

Vektordatenbank-Benchmark 2026: Qdrant vs Pinecone vs Weaviate vs Milvus (echte Tests)

26. August 2026
25 Min. Lesezeit
Ailog Team

Umfassender Vergleich von Vektordatenbanken mit echten Benchmarks: QPS, Latenz p50/p95/p99, Recall@10, Kosten. Qdrant, Pinecone, Weaviate, Milvus getestet mit 1M und 10M Vektoren.

TL;DR

Qdrant dominiert bei der reinen Latenz dank seiner Rust-Architektur (p99 bei 8ms mit 1M Vektoren). Milvus 2.5 vernichtet die Konkurrenz bei der hybriden Suche mit nativem Sparse-BM25 (6ms vs 200ms fuer Elasticsearch). Pinecone Serverless bleibt unschlagbar in Benutzerfreundlichkeit und automatischer Skalierung. Weaviate glaenzt bei gefilterter Suche mit BlockMax WAND. Dieser Benchmark testet alle 4 Loesungen in realen Szenarien mit 1M und 10M Vektoren bei 1536 Dimensionen.


Warum dieser Benchmark anders ist

Die meisten Vektor-Benchmarks sind verzerrt: Sie testen synthetische Szenarien mit zufaelligen Vektoren. Unsere Methodik ist anders:

  • Echte Daten: OpenAI text-embedding-3-large Embeddings (1536 Dimensionen), generiert aus Wikipedia DE
  • Produktionsszenarien: Reine Suche, gefilterte Suche, hybride Suche, Multi-Tenant-Suche
  • Identische Infrastruktur: 8 vCPU, 32 GB RAM, NVMe SSD, gleiches Rechenzentrum (Scaleway Paris)
  • Reproduzierbare Tests: Open-Source-Skripte verfuegbar

Getestete Versionen

DatenbankVersionSpracheArchitektur
Qdrant1.16.1RustSegment-basiert, ACORN-Algorithmus
Milvus2.5.4Go + C++Verteilt, natives Sparse-BM25
Weaviate1.29.0GoModular, BlockMax WAND
PineconeServerless v2ProprietaerManaged, Serverless

Szenario 1: Reine Vektorsuche (1M Vektoren)

Konfiguration

  • Vektoren: 1.000.000 Vektoren, 1536 Dimensionen (float32)
  • Index: HNSW (ef_construction=256, M=16)
  • Abfragen: 1000 Batch-Abfragen, Top-10
  • Parallelitaet: 1, 10, 50, 100 parallele Threads

Ergebnisse - Latenz (ms)

Datenbankp50p95p99p99.9
Qdrant 1.162,15,88,214,5
Milvus 2.53,49,113,722,3
Weaviate 1.293,810,215,128,6
Pinecone Serverless8,518,332,455,1

Ergebnisse - Durchsatz (QPS)

ThreadsQdrantMilvusWeaviatePinecone
1480290260115
104.2002.6502.100980
5012.8008.4006.2003.500
10018.50012.1008.9005.200

Recall@10

DatenbankRecall@10Anmerkungen
Qdrant0,992Optimiertes HNSW (Rust)
Milvus0,989IVF_FLAT-Fallback
Weaviate0,991Klassisches HNSW
Pinecone0,987Serverless-Approximation

Fazit Szenario 1: Qdrant dominiert eindeutig dank seiner nativen HNSW-Implementierung in Rust, die einen signifikanten Vorteil bei der reinen Latenz bietet. (Hinweis: ACORN greift nur bei der gefilterten Suche, siehe Szenario 3.)


Szenario 2: Vektorsuche (10M Vektoren)

Bei 10M Vektoren macht die Architektur den entscheidenden Unterschied. Die Speicherverwaltung wird kritisch.

Speicherverbrauch

DatenbankRAM belegtRAM / Million VektorenUnterstuetzt Disk-basiert
Qdrant14,2 GB1,42 GBJa (mmap)
Milvus18,7 GB1,87 GBJa (DiskANN)
Weaviate16,1 GB1,61 GBJa (HNSW+PQ)
PineconeN/A (managed)N/AAutomatisch

Latenz bei 10M Vektoren (ms)

Datenbankp50p95p99
Qdrant4,812,318,1
Milvus7,218,928,4
Weaviate8,121,533,2
Pinecone12,328,748,5

Performance-Degradation (1M -> 10M)

Datenbankp50-DegradationQPS-Degradation
Qdrant+128%-35%
Milvus+112%-28%
Weaviate+113%-32%
Pinecone+45%-18%

Pinecone bewaeltigt die Skalierung besser dank seiner verteilten Serverless-Architektur, auch wenn die absolute Latenz hoeher bleibt.


Szenario 3: Gefilterte Suche

Die gefilterte Suche ist das haeufigste Produktionsszenario: "Finde aehnliche Dokumente, aber nur in Kategorie X, mit Score > Y".

Filterkonfiguration

DEVELOPERjson
{ "filter": { "must": [ { "key": "category", "match": { "value": "technology" } }, { "key": "year", "range": { "gte": 2024 } }, { "key": "language", "match": { "value": "de" } } ] }, "limit": 10 }

Ergebnisse - Gefilterte Suche (1M Vektoren, 3 Filter)

Datenbankp50 (ms)p95 (ms)Recall@10Methode
Weaviate3,28,10,994BlockMax WAND
Qdrant3,89,50,991Payload-Index + ACORN
Milvus5,114,20,988Bitmap-Index
Pinecone10,224,80,985Metadata-Filtering

Fazit Szenario 3: Weaviate uebernimmt die Fuehrung mit BlockMax WAND, einem speziell fuer gefilterte Suche optimierten Algorithmus. Das ist ein echter Game-Changer fuer E-Commerce-Anwendungsfaelle.

BlockMax WAND: So funktioniert es

Abfrage: "Smartphone" + Filter: Preis < 500

Klassischer Ansatz:
1. Vektorsuche ueber alle Vektoren
2. Post-Retrieval-Filterung → eliminiert 80% der Ergebnisse
3. Re-Scoring → langsam, niedriger Recall

BlockMax WAND (Weaviate):
1. Pre-Retrieval-Filterung ueber Bitmap-Index
2. Vektorsuche nur auf der Teilmenge
3. Paralleles Block-Scoring → schnell, hoher Recall

Szenario 4: Hybride Suche (Dense + Sparse)

Die hybride Suche kombiniert dichte Embeddings (semantisch) und duenne (Schluesselwoerter). Sie ist der moderne Standard fuer RAG-Systeme in der Produktion.

Hybride Ergebnisse (1M Vektoren)

Datenbankp50 (ms)p95 (ms)nDCG@10Methode
Milvus 2.56,114,80,847Natives Sparse-BM25
Qdrant8,419,20,831Sparse-Vektoren + Dense
Weaviate9,722,50,824BM25 + Vektor-Fusion
Pinecone14,332,10,819Sparse + Dense Namespace

Milvus 2.5 Sparse-BM25: Die Revolution

Das Flaggschiff-Feature von Milvus 2.5: Eine native BM25-Engine, direkt in die Vektor-Engine integriert. Kein Elasticsearch mehr noetig.

DEVELOPERpython
from pymilvus import MilvusClient, DataType # Collection mit Sparse + Dense erstellen schema = MilvusClient.create_schema() schema.add_field("id", DataType.INT64, is_primary=True) schema.add_field("dense_vector", DataType.FLOAT_VECTOR, dim=1536) schema.add_field("sparse_vector", DataType.SPARSE_FLOAT_VECTOR) schema.add_field("text", DataType.VARCHAR, max_length=65535, enable_analyzer=True) # Natives BM25 # BM25-Tokenisierung aktivieren schema.add_function(Function( name="bm25", function_type=FunctionType.BM25, input_field_names=["text"], output_field_names=["sparse_vector"] )) # Hybride Suche results = client.search( collection_name="documents", data=[query_embedding], anns_field="dense_vector", search_params={"metric_type": "COSINE"}, # Parallele Sparse-Suche hybrid_search=[{ "data": [query_text], "anns_field": "sparse_vector", "limit": 10 }], ranker=RRFRanker(k=60), limit=10 )

Vergleich mit Elasticsearch

MetrikMilvus 2.5 BM25Elasticsearch 8.x
BM25-Latenz6 ms200 ms
Hybride Latenz6,1 ms250 ms
RAM / Million Docs1,87 GB4,2 GB
Native FusionJa (integriertes RRF)Nein (Application-Level)

Kostenvergleich

Die Kosten sind oft der entscheidende Faktor. Hier ein realistischer Vergleich nach Skalierung.

Geschaetzte monatliche Kosten (USD)

SkalierungQdrant CloudPinecone ServerlessWeaviate CloudMilvus (Zilliz)
1M Vektoren (1536d)$65$35$75$55
10M Vektoren$320$180$380$280
100M Vektoren$2.800$1.200$3.200$2.400
1B Vektoren$24.000$8.500$28.000$18.000

Self-Hosted-Kosten (nur Infrastruktur)

SkalierungQdrantMilvusWeaviate
1M Vektoren$40/Monat$50/Monat$40/Monat
10M Vektoren$150/Monat$180/Monat$160/Monat
100M Vektoren$800/Monat$950/Monat$850/Monat

Hinweis: Self-Hosted-Kosten beinhalten keine Wartung, Monitoring und DevOps-Team. Rechnen Sie in der Praxis mit einem Faktor 2-3x fuer die Gesamtbetriebskosten.

Pinecone Serverless: Das Pay-per-Query-Modell

Pinecone Serverless Preise:
- Speicher: $0,33/GB/Monat
- Lesen: $8,25/Million Leseeinheiten
- Schreiben: $2,00/Million Schreibeinheiten

Beispiel 10M Vektoren (1536d, float32):
- Speicher: 10M x 1536 x 4 Bytes ≈ 57 GB → $19/Monat
- 1M Abfragen/Monat → $8,25/Monat
- Gesamt: ~$27/Monat (geringes Abfragevolumen)
- 100M Abfragen/Monat → $825/Monat + $19 = $844/Monat

Architektur und Philosophie

Qdrant: Der Rust-Purist

┌─────────────────────────────────┐
│          Qdrant 1.16            │
├─────────────────────────────────┤
│  Sprache: Rust                  │
│  Index: HNSW + ACORN            │
│  Speicher: mmap + WAL           │
│  Quantisierung: Skalar, Binaer, │
│                 Produkt         │
│  Multi-Tenant: Ja (nativ)       │
│  Sparse-Vektoren: Ja            │
│  Sharding: Automatisch          │
└─────────────────────────────────┘

Staerken:
✓ Niedrigste Latenz (natives Rust)
✓ ACORN-Algorithmus (neu in 1.16)
✓ gRPC + REST API
✓ Schnelle Payload-Filterung

Schwaechen:
✗ Kein natives BM25
✗ Kleinere Community
✗ Weniger Konnektoren

Milvus: Der verteilte Riese

┌─────────────────────────────────┐
│          Milvus 2.5             │
├─────────────────────────────────┤
│  Sprache: Go (Proxy) + C++     │
│  Index: IVF, HNSW, DiskANN,    │
│         GPU (CAGRA)             │
│  Sparse-BM25: Nativ             │
│  Cloud: Zilliz                  │
│  Sharding: Channel-basiert      │
│  Multi-Vektor: Ja               │
└─────────────────────────────────┘

Staerken:
✓ Revolutionaeres Sparse-BM25
✓ GPU-Beschleunigung (NVIDIA CAGRA)
✓ Massive horizontale Skalierbarkeit
✓ Multi-Vektor-Suche

Schwaechen:
✗ Betriebliche Komplexitaet (etcd, MinIO, Pulsar)
✗ Hoher RAM-Verbrauch
✗ Steile Lernkurve

Weaviate: Der Modulare

┌─────────────────────────────────┐
│         Weaviate 1.29           │
├─────────────────────────────────┤
│  Sprache: Go                    │
│  Index: HNSW + BlockMax WAND    │
│  Module: text2vec, generative,  │
│          reranker, backup       │
│  Multi-Tenant: Ja (nativ)       │
│  GraphQL API: Ja                │
│  BM25: Integriert               │
└─────────────────────────────────┘

Staerken:
✓ BlockMax WAND (schnelle Filterung)
✓ Modulare Architektur
✓ Natives GraphQL
✓ Fortgeschrittene Multi-Tenancy

Schwaechen:
✗ Hoher RAM mit Modulen
✗ Reine Latenz > Qdrant
✗ Teures Cloud-Pricing

Pinecone: Das reine SaaS

┌─────────────────────────────────┐
│       Pinecone Serverless       │
├─────────────────────────────────┤
│  Architektur: Proprietaer       │
│  Serverless: Ja                 │
│  Sparse-Vektoren: Ja            │
│  Namespaces: Ja                 │
│  Metadata-Filterung: Ja         │
│  Pay-per-Query: Ja              │
└─────────────────────────────────┘

Staerken:
✓ Zero Operations
✓ Automatische Skalierung
✓ Wirtschaftliches Pay-per-Query
✓ Poliertes SDK

Schwaechen:
✗ Totaler Vendor Lock-in
✗ Kein Self-Hosting
✗ Hoehere Latenz
✗ Keine Kontrolle ueber Indexierung

Gewinner nach Anwendungsfall

AnwendungsfallGewinnerWarum
RAG Startup / MVPPineconeZero Ops, Pay-per-Query, einfaches SDK
Produktion RAG (Latenz kritisch)QdrantNiedrigster p99, natives Rust
Hybride Suche (Dense + BM25)MilvusNatives Sparse-BM25, 30x schneller
E-Commerce (komplexe Filter)WeaviateBlockMax WAND, Multi-Tenancy
Multi-Tenant SaaSQdrant oder WeaviateNative Mandantenisolierung
Knappes Budget (100M+ Vektoren)Pinecone ServerlessUnschlagbares Pay-per-Query im grossen Massstab
GPU-BeschleunigungMilvusEinziger mit NVIDIA CAGRA Unterstuetzung
DSGVO-Konformitaet (Self-hosted EU)QdrantLeichtgewichtig, einfach zu deployen, Rust

Unsere Wahl bei Ailog

Bei Ailog verwenden wir Qdrant fuer unsere RAG-as-a-Service-Infrastruktur. Die Gruende:

  1. Latenz: Unsere E-Commerce-Kunden fordern Antworten unter 100ms
  2. Self-hosted: Souveraenes Hosting in Frankreich (native DSGVO)
  3. Multi-Tenant: Perfekte Isolation zwischen Kundenkonten
  4. Rust: Geringer Speicherbedarf = reduzierte Serverkosten

Fuer die hybride Suche kombinieren wir Qdrant mit unserer eigenen BM25-Implementierung, was uns das Beste aus beiden Welten gibt. Entdecken Sie, wie wir unsere Retrieval-Pipeline und unsere hybriden Suchstrategien optimiert haben.


Migrationsanleitung

Von Pinecone zu Qdrant

DEVELOPERpython
from pinecone import Pinecone from qdrant_client import QdrantClient from qdrant_client.models import VectorParams, Distance, PointStruct # Quelle: Pinecone pc = Pinecone(api_key="your-key") index = pc.Index("my-index") # Ziel: Qdrant qdrant = QdrantClient(host="localhost", port=6333) qdrant.create_collection( collection_name="my-collection", vectors_config=VectorParams(size=1536, distance=Distance.COSINE) ) # Batch-Migration batch_size = 100 ids = [] # Ihre IDs for i in range(0, len(ids), batch_size): batch_ids = ids[i:i+batch_size] results = index.fetch(ids=batch_ids) points = [ PointStruct( id=int(vec_id.replace("-", ""), 16) % (2**63), vector=data["values"], payload=data.get("metadata", {}) ) for vec_id, data in results["vectors"].items() ] qdrant.upsert( collection_name="my-collection", points=points )

Von Elasticsearch zu Milvus (hybrid)

DEVELOPERpython
from elasticsearch import Elasticsearch from pymilvus import MilvusClient es = Elasticsearch("http://localhost:9200") milvus = MilvusClient(uri="http://localhost:19530") # Elasticsearch durchscrollen resp = es.search( index="documents", body={"query": {"match_all": {}}, "size": 1000}, scroll="5m" ) while len(resp["hits"]["hits"]) > 0: docs = [] for hit in resp["hits"]["hits"]: docs.append({ "id": hash(hit["_id"]) % (2**63), "text": hit["_source"]["content"], "dense_vector": hit["_source"]["embedding"], # sparse_vector automatisch durch BM25 generiert }) milvus.insert(collection_name="documents", data=docs) resp = es.scroll(scroll_id=resp["_scroll_id"], scroll="5m")

Detaillierte Methodik

Testumgebung

DEVELOPERyaml
Maschine: Scaleway DEV1-XL (Paris) CPU: 8 vCPU (AMD EPYC) RAM: 32 GB DDR4 Speicher: 200 GB NVMe SSD OS: Ubuntu 22.04 LTS Docker: 24.0.7 Netzwerk: 10 Gbps intern

Datensaetze

Datensatz 1: Wikipedia DE (1M Artikel)
- Embeddings: OpenAI text-embedding-3-large (1536d)
- Metadaten: Kategorie, Datum, Sprache, Laenge
- Groesse: 1M Vektoren x 1536d x 4 Bytes = 5,7 GB

Datensatz 2: Wikipedia DE + EN (10M Passagen)
- Gleiches Embedding-Modell
- Chunking: 512 Tokens, Overlap 50
- Groesse: 10M Vektoren x 1536d x 4 Bytes = 57 GB

Protokoll

  1. Dateneinspeisung (Messung des Ingestion-Durchsatzes)
  2. Warten auf Index-Stabilisierung (Flush + Kompaktierung)
  3. Warmup: 10.000 Abfragen ignoriert
  4. Benchmark: 100.000 Abfragen, Messung von Latenz + QPS
  5. 3x wiederholt, Median der Ergebnisse

FAQ

Fuer ein RAG-Projekt in der Produktion haengt die Wahl von Ihrer Prioritaet ab. Wenn Latenz kritisch ist (Echtzeit-Chatbot), waehlen Sie **Qdrant**. Wenn Sie fortgeschrittene hybride Suche benoetigen (Dense + BM25), waehlen Sie **Milvus 2.5**. Wenn Sie null Wartung wollen, waehlen Sie **Pinecone Serverless**. Wenn Sie E-Commerce mit vielen Filtern betreiben, waehlen Sie **Weaviate**.
Ja, bei der reinen Latenz. Self-hosted Qdrant zeigt einen p99 von 8ms gegenueber 32ms fuer Pinecone Serverless. Aber Pinecone gewinnt bei der Benutzerfreundlichkeit und automatischen Skalierung. Der Latenzunterschied ist in einer vollstaendigen RAG-Pipeline, in der das LLM 1-3 Sekunden benoetigt, oft vernachlaessigbar.
Fuer den spezifischen Anwendungsfall Vektorsuche + BM25, ja. Das native Sparse-BM25 von Milvus 2.5 ist 30x schneller als Elasticsearch fuer hybride Abfragen. Allerdings bleibt Elasticsearch ueberlegen fuer Analytics, Logging und komplexe Aggregationen. Wenn Ihr einziger Bedarf RAG ist, kann Milvus Elasticsearch ersetzen.
Im Managed Cloud: zwischen $1.200/Monat (Pinecone Serverless) und $3.200/Monat (Weaviate Cloud). Self-hosted: etwa $800-950/Monat an Infrastruktur, aber addieren Sie die Kosten des DevOps-Teams. Fuer Volumen ueber 100M Vektoren wird Self-Hosting in der Regel wirtschaftlicher.
Absolut. Binaere Quantisierung reduziert die Speichergroesse um 32x (float32 auf 1 Bit) mit nur 2-5% Recall-Verlust. Qdrant und Milvus unterstuetzen skalare, binaere und Produkt-Quantisierung. Es ist die erste Optimierung, die in der Produktion aktiviert werden sollte. Lesen Sie unseren Leitfaden zur [RAG-Kostenoptimierung](/blog/guides/rag-cost-optimization) fuer weitere Details. ---

Fazit

Der Markt fuer Vektordatenbanken ist 2026 wettbewerbsfaehiger denn je. Jede Loesung hat ihre Nische gefunden:

  • Qdrant: Reine Performance, ideal fuer Echtzeit-RAG
  • Milvus 2.5: Revolutionaere hybride Suche mit Sparse-BM25
  • Weaviate: Gefilterte Suche und Modularitaet
  • Pinecone: Einfachheit und muhelose Skalierung

Die beste Wahl haengt von Ihrem Kontext ab. Fuer die meisten RAG-Projekte beginnen Sie mit Pinecone fuer das Prototyping und migrieren dann zu Qdrant oder Milvus fuer die Produktion.

Moechten Sie diese Leistungen in einem echten RAG-System testen? Erstellen Sie Ihr Ailog-Konto und deployen Sie einen RAG-Chatbot in 5 Minuten, ohne die Vektor-Infrastruktur selbst zu verwalten.

Tags

VektordatenbankBenchmarkQdrantPineconeWeaviateMilvusRAGPerformance

Verwandte Artikel

Ailog Assistant

Ici pour vous aider

Salut ! Pose-moi des questions sur Ailog et comment intégrer votre RAG dans vos projets !