Kurzreferenz

Vektordatenbanken & Retrieval-Architektur Spickzettel: Konzepte, Indizes, Quantisierung & Auswahl

Kompakter Praxisleitfaden für Vektordatenbanken und semantische Suche: Distanzmetriken, ANN-Indizes (HNSW, IVF, DiskANN, ScaNN), Speicherberechnung mit Quantisierung, Inline-Filterung, RRF-Hybridsuche sowie ein schichtweiser Vergleich von nativen Vektor-DBs, DB-Erweiterungen und Cloud-Diensten.

· Veröffentlicht

Eine Vektordatenbank speichert hochdimensionale Dense- und Sparse-Embeddings samt Metadaten und ermöglicht über Approximate-Nearest-Neighbor-(ANN)-Indizes eine Ähnlichkeitssuche im Millisekundenbereich – die zentrale Speicher- und Retrieval-Schicht für RAG, semantische Suche und KI-Agenten.

Anforderung / Rahmenbedingung Empfohlene Kategorie Typische Systeme Begründung
Bestehender PostgreSQL-Stack, unter ~10 Mio. Vektoren Relationale DB-Erweiterung pgvector (+ halfvec / HNSW) Nutzt ACID-Transaktionen, SQL-JOINs und vorhandenen Betrieb ohne neue Infrastruktur
Volltext-BM25 + Vektor-Hybrid-Scoring Suchmaschinen-Erweiterung Elasticsearch / OpenSearch / Vespa Ausgereifte invertierte Indizes und mehrstufiges Hybrid-Ranking
Eigenständiger High-QPS-Dienst mit komplexen Filtern Dedizierte verteilte Vektor-DB Qdrant / Milvus / Weaviate Spezialisierte Storage-Engine, schnelle Payload-Filterung und horizontale Skalierung
Lokale Entwicklung, Edge-Apps oder Data-Lake-Direktzugriff Eingebettete / spaltenorientierte DB LanceDB / Chroma / FAISS In-Process-Ausführung mit Zero-Copy-Integration in Apache Arrow / Parquet
Riesige Cold/Warm-Datenbestände bei minimalen Kosten Object-Storage-natives SaaS Turbopuffer Object Storage (S3/GCS) als Source of Truth + lokaler NVMe/RAM-Cache
Wartungsfreies Serverless tief im Cloud-Ökosystem Vollverwalteter Cloud-Dienst Pinecone / Vertex AI Vector Search / Azure AI Search Elastische Serverless-Skalierung und nahtlose Cloud-IAM-Integration

🔗 Verwandte Spickzettel: LLM & KI-Agenten Konzepte · Moderne KI-Algorithmen · PostgreSQL-Befehle · Redis-Befehle · MongoDB-Befehle


1. Kernkonzepte & Distanzmetriken

1.1 Zentrale Begriffe

Begriff Definition Technische Relevanz
Embedding Festlängen-Float-Vektor zur semantischen Codierung von Text, Bild oder Audio Übliche Dimensionen: 384 / 768 / 1024 / 1536 / 3072; RAM und Rechenlast steigen linear
ANN (Approximate Nearest Neighbor) Indexgestützte Suche, die minimalen Recall (z. B. 95–99 %) gegen 100×–1000× Tempo tauscht Kernabwägung Latenz vs. Recall im Gegensatz zum exakten k-NN-Scan
Metadata Filtering Einschränkung der Vektorsuche per Skalarattribut (Mandant, Zeit, ACL, Kategorie) Unterscheidung zwischen Pre-Filtering, Single-Stage / Inline und Post-Filtering
Hybrid Search Kombination aus Dense-Vektoren (Semantik) und Sparse-Vektoren / BM25 (exakte Terme) Behebt Trefferlücken der reinen Vektorsuche bei SKUs, Fehlercodes und Abkürzungen
Sparse Vector Hochdimensionaler Vektor mit fast ausschließlich Nullwerten (z. B. SPLADE, BM25) Speichert nur Indizes und Gewichte ungleich null; ideal als Partner zur Dense-Suche

1.2 Drei Standard-Distanzmetriken

Cosine(u, v) = (u · v) / (‖u‖₂ · ‖v‖₂)
IP(u, v)     = u · v = ∑ᵢ (uᵢ × vᵢ)
L₂(u, v)     = √( ∑ᵢ (uᵢ − vᵢ)² )
Metrik Bedeutung Mathematische Äquivalenz Typische Einsatzgebiete
Kosinus-Ähnlichkeit (Cosine) Misst nur den Winkel ohne Vektorlänge (−1 bis 1; Distanz = 1 - cos) Identische Rangfolge zum Skalarprodukt bei L₂-normalisierten Vektoren Textsemantik, RAG, Sentence-Embeddings (Standardwahl)
Skalarprodukt (Inner Product / IP) Berücksichtigt Winkel und Länge; geringster Rechenaufwand Ersetzt Cosine bei normalisierten Vektoren ohne Normierungskosten Two-Tower-Recommender, normalisierte Embeddings (z. B. OpenAI)
Euklidische Distanz (L₂) Direkter geometrischer Abstand; kleiner = ähnlicher Für Einheitsvektoren gilt L₂² = 2 − 2 · cos(u, v) Bild-/Gesichtserkennung, räumliches Clustering, längensensitive Daten

2. ANN-Indexalgorithmen & Quantisierung

2.1 Vergleich der Vektorindizes

Indextyp Funktionsprinzip RAM-Bedarf Latenz & Recall Größenordnung & Engines
Flat (Exakter Scan) Vollständige Distanzberechnung über alle Vektoren Mittel (nur Roh-/quantisierte Vektoren) 100 % Recall; Latenz steigt ab ~100k stark an Kleine Bestände (<100k), Ground-Truth-Benchmarks
IVF-Flat (Inverted File) K-Means-Clustering in nlist Buckets; Scan der nächsten nprobe Buckets Niedrig (kein Graph-Overhead) Über nprobe steuerbar; mittlerer bis hoher Recall 1M–10M Vektoren bei knappem RAM (FAISS / Milvus / pgvector)
IVF-PQ (IVF + Product Quantization) Bucket-Partitionierung plus Teilraum-Codebuch-Kompression Sehr niedrig (16×–64× kleiner) Extrem schnell, geringerer Erst-Pass-Recall (Rescoring nötig) 100M+ In-Memory-Suche (FAISS / Milvus / LanceDB)
HNSW (Hierarchical Navigable Small World) Mehrschichtiger Nachbarschaftsgraph (oben grob, unten fein) Hoch (Vektoren + Graphkanten im RAM oder hot mmap) Millisekunden + 95–99 % Recall; Industriestandard 1M–100M+ Echtzeit-Suche (Qdrant / Milvus / Weaviate / pgvector)
DiskANN (Vamana-Graph) SSD-optimierter Graph: komprimierte Vektoren im RAM, Vollgraph auf NVMe Niedrig (5×–10× weniger RAM) 100M+ pro Knoten im ms-Bereich; erfordert schnelle NVMe-IOPS Speicherlimitierte 100M–1B+ Bestände (Milvus / LanceDB / Azure)
ScaNN Anisotrope Vektorquantisierung + Baum-Partitionierung Niedrig–Mittel Top-Recall-pro-Latenz bei Inner Product Große Empfehlungs- und Suchsysteme (Vertex AI Vector Search / OSS)

Zentrale HNSW-Tuningparameter:

  • M (max. bidirektionale Kanten pro Knoten, typisch 16–64): Höheres M steigert den Recall bei hohen Dimensionen, erhöht aber RAM und Build-Zeit.
  • efConstruction (Kandidatenliste beim Indexbau, typisch 100–400): Beeinflusst nur die Bauzeit; höhere Werte liefern bessere Graphqualität.
  • efSearch (Suchbreite pro Abfrage, muss ≥ top_k sein): Einziger pro Query anpassbarer Parameter; höher = mehr Recall, weniger QPS.

2.2 Quantisierung & Speicherbedarf

Referenzbasis für 10 Millionen × 1536-dimensionale Vektoren (rohes FP32):

Rohvektorgröße ≈ N × D × 4 Bytes   (HNSW-Graphstruktur benötigt ca. 1,2×–1,5× Zusatz-RAM)
Quantisierung Breite / Dim Kompression 10M × 1536-Dim Größe Genauigkeitsabwägung & Einsatz
FP32 (Unkomprimiert) 32 Bit (4 B) 1× ~57,2 GB Referenzpräzision; teuer im dauerhaften RAM-Betrieb
FP16 / BF16 (Halbe Präzision) 16 Bit (2 B) 2× ~28,6 GB Nahezu verlustfreier Recall (z. B. pgvector halfvec), hohes Preis-Leistungs-Verhältnis
SQ8 (Skalare Quantisierung Int8) 8 Bit (1 B) 4× ~14,3 GB Hält meist 97 %+ Recall; bewährter Produktionsstandard
PQ (Product Quantization) Codebuch-basiert 16×–64× ~1–4 GB Codebuch-Training nötig; mit Oversampling + Rescore kombinieren
BQ (Binäre Quantisierung 1-Bit) 1 Bit 32× ~1,79 GB Rasend schneller Hamming-Scan; 3×–5× Rescore empfohlen (ideal ab ≥1024 Dim.)

3. Schichtweiser Vergleich der Systeme

3.1 Dedizierte native Vektordatenbanken

Produkt Lizenz / Betrieb Sprache & Storage-Engine Indizes & Besonderheiten Einsatzprofil
Qdrant Apache 2.0 / Self-hosted & Cloud Rust; In-Memory, mmap-Disk & Disk-Quantisierung HNSW + SQ8/BQ; native Sparse-Vektoren, schnelle Payload-Filterindizes High-QPS-Standalone-Dienst, Mandantenfähigkeit, komplexe Filter
Milvus Apache 2.0 / Verteilt & Zilliz Cloud Go Control Plane + C++ Execution; Object Storage + MQ entkoppelt IVF, HNSW, DiskANN, GPU CAGRA; Multi-Tenant-Partitionen Milliarden-Maßstab, Hochdurchsatz-Plattformen
Weaviate BSD-3-Clause (einige Enterprise-Add-ons proprietär) Go; integrierter Object Store + invertierter Index HNSW + dynamische/PQ/BQ-Quantisierung; GraphQL/REST, Vectorizer-Module RAG-Apps mit integrierter Embedding-Pipeline
Chroma Apache 2.0 / Embedded & Client-Server Python / Rust-Kern; SQLite + lokal oder verteilt HNSW; minimale API, enge LangChain-/LlamaIndex-Integration Schnelles Prototyping, kleine bis mittlere Python-RAGs
LanceDB Apache 2.0 / Embedded & Enterprise Rust; Lance-Spaltenformat & Apache Arrow IVF-PQ, HNSW, DiskANN; Zero-Copy-I/O, natives Multimodal (Audio/Video/Tabellen) Lokale Embedded-Apps, Serverless-S3-Zugriff, multimodale Data Lakes
Pinecone Proprietäres Serverless SaaS Verwaltete verteilte Engine (von Pods zu Serverless) Entkoppelter proprietärer Index; Sparse-Dense-Hybrid, Namespace-Isolation Zero-Ops-Teams mit Fokus auf vollverwaltetes Cloud-SaaS
Turbopuffer Proprietäres SaaS / BYOC Rust; Object Storage (S3/GCS) als Hauptspeicher + NVMe/RAM-Cache Zentroid-Index (SPFresh-Prinzip) statt Random-I/O-Graph; Volltext + Vektor Große Cold/Warm-Daten (z. B. Code-Indizierung) bei minimalen Storage-Kosten

3.2 Reine Vektor-Suchbibliotheken (keine Voll-DB)

Produkt Lizenz Funktionsgrenzen Typischer Einsatz
FAISS (Meta) MIT C++ / Python Suchbibliothek (keine Metadaten-Persistenz, verteilte Transaktionen oder Auth-Server); CPU-SIMD & Multi-GPU Offline-Batch-Berechnung, Forschung, eingebetteter Kern in Eigenentwicklungen

3.3 Erweiterungen klassischer Datenbanken & Suchmaschinen

Produkt Basis Vektorfunktionen Stärken & Grenzen
pgvector PostgreSQL-Erweiterung (inkl. Supabase) Typen vector / halfvec / sparsevec / bit; HNSW & IVFFlat Stärken: ACID, SQL-JOINs, kein Zusatzbetrieb; Grenzen: Write-Amplification & RAM-Druck über ~10M–50M Zeilen
Elasticsearch / OpenSearch Lucene Invertiert + HNSW Natives Dense-Vector + BM25-Hybrid, RRF-Fusion, Nested-Filter Stärken: Nutzt bestehende Search-Stacks; Grenzen: hoher JVM-Off-Heap-Bedarf & Segment-Merges
Redis (Query Engine) In-Memory-KV-Store Flat & HNSW, Sub-Millisekunden-Latenz, Echtzeit-Updates Stärken: Ideal für Semantic Cache & Feature Stores; Grenzen: hohe RAM-Kosten bei großen Mengen
MongoDB Atlas Search Dokumenten-DB (Atlas / Local CLI) Lucene-basierter HNSW direkt neben BSON-Dokumenten Stärken: Kein Dual-Write zwischen Dokument- und Vektor-DB; Grenzen: stark an Atlas gebunden
SingleStore Verteilte HTAP-SQL-DB SQL + native Vektorfunktionen (Dot / L₂), Column- + Rowstore Enterprise-Workloads mit Echtzeit-Analytics und Transaktionen
Vespa Apache 2.0 Big-Data-Engine HNSW + exakt/approximativ hybrid, mehrstufiges ML-Ranking (Tensor/XGBoost/ONNX) Große Such- und Empfehlungsplattformen; höhere Einarbeitungs- und Betriebskomplexität

3.4 Vollverwaltete Cloud-Dienste

Dienst Cloud-Anbieter Kernarchitektur & Merkmale
Vertex AI Vector Search (ehem. Matching Engine) Google Cloud (GCP) Basiert auf ScaNN; Streaming-Updates im Milliarden-Bereich und Sparse-Dense-Hybrid
Amazon OpenSearch Serverless / Aurora pgvector AWS Verwaltete Serverless-Cluster bzw. RDS/Aurora-Erweiterung mit Amazon-Bedrock-Integration
Azure AI Search Microsoft Azure Semantic Ranker, integrierte Vektorisierungspipelines und Enterprise-RBAC-Zugriffssteuerung

4. Filterstrategien & Hybridsuche

4.1 Ausführungsmodi für Metadatenfilter

Strategie Ablaufreihenfolge Problemfall & Gegenmaßnahme
Pre-Filtering Zuerst ID-Bitmap über Skalarindex bestimmen, danach Vektorsuche Bei sehr engen Filtern (<1 % Treffer) zerfällt der Graph; Lösung: automatischer Fallback auf exakten Scan
Post-Filtering Globales Vektor-Top-K holen, dann unpassende Einträge verwerfen Liefert weniger als K Treffer (oder 0); Lösung: niemals allein ohne starkes Oversampling nutzen
Single-Stage / Inline Filter-Bitmap bei jedem HNSW-Sprung dynamisch mitprüfen Heutiger Standard (Qdrant / Milvus / Weaviate / pgvector 0.8+ Iterative Scan) für hohen Recall bei niedriger Latenz

4.2 Reciprocal Rank Fusion (RRF)

Da Dense-Vektor-Scores und BM25-Scores unterschiedliche Skalen besitzen, kombiniert RRF beide Ergebnislisten direkt über ihren Rang:

RRF_Score(d) = ∑_{r ∈ R} 1 / (k + rank_r(d))     (übliche Glättungskonstante k = 60)

5. Produktionsnahe Code-Snippets

5.1 pgvector Schema, HNSW & Iterative Scan (SQL)

CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE documents (
    id BIGSERIAL PRIMARY KEY,
    tenant_id INT NOT NULL,
    content TEXT NOT NULL,
    embedding halfvec(1536),          -- float16 spart 50 % RAM gegenüber float32
    fts tsvector GENERATED ALWAYS AS (to_tsvector('simple', content)) STORED
);

CREATE INDEX idx_docs_emb_hnsw ON documents
    USING hnsw (embedding halfvec_cosine_ops)
    WITH (m = 16, ef_construction = 128);

CREATE INDEX idx_docs_fts ON documents USING gin (fts);

SET hnsw.ef_search = 100;
SET hnsw.iterative_scan = relaxed_order;

SELECT id, content, 1 - (embedding <=> $1::halfvec) AS cosine_sim
FROM documents
WHERE tenant_id = 42
ORDER BY embedding <=> $1::halfvec
LIMIT 10;

pgvector-Distanzoperatoren: <-> Euklidisch (L₂) · <=> Kosinus-Distanz (1 - cos) · <#> Negatives Skalarprodukt · <+> Manhattan (L₁).

5.2 Qdrant Collection, binäre Quantisierung & Payload-Filter (Python)

from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.create_collection(
    collection_name="knowledge_base",
    vectors_config=models.VectorParams(
        size=1536,
        distance=models.Distance.COSINE,
        on_disk=True,
    ),
    quantization_config=models.BinaryQuantization(
        binary=models.BinaryQuantizationConfig(always_ram=True)
    ),
)

client.create_payload_index(
    collection_name="knowledge_base",
    field_name="tenant_id",
    field_schema=models.PayloadSchemaType.KEYWORD,
)

hits = client.query_points(
    collection_name="knowledge_base",
    query=[0.012, -0.045, ...],
    query_filter=models.Filter(
        must=[models.FieldCondition(key="tenant_id", match=models.MatchValue(value="org_a"))]
    ),
    search_params=models.SearchParams(
        quantization=models.QuantizationSearchParams(rescore=True, oversampling=3.0)
    ),
    limit=10,
).points

Verwandte Themen