Vektor-Datenbanken und Embedding-Suchsysteme
Vektor-Datenbanken sind spezialisierte Datenbanken, die für die Speicherung und Ähnlichkeitssuche in hochdimensionalen Vektoren optimiert sind. Sie sind eine grundlegende Komponente moderner KI-Anwendungen, insbesondere von RAG-Systemen (Retrieval-Augmented Generation).
Was ist eine Vektor-Datenbank?
Während traditionelle Datenbanken für exakte Suchanfragen optimiert sind, konzentrieren sich Vektor-Datenbanken auf Approximate Nearest Neighbor (ANN)-Suchen.
Zentrale Konzepte
Embedding: Eine numerische Vektordarstellung von Daten (Text, Bild, Audio).
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Ähnlichkeitssuche: Finden der Vektoren, die einem Anfragevektor am nächsten sind.
query_vector → Top-K most similar vectors
Distanzmetriken:
- Cosine Similarity: Richtungssimilarität.
- Euklidische Distanz (L2): Geometrische Distanz.
- Dot Product: Skalarprodukt der Vektoren.
Ähnlichkeitsmetriken: Detaillierte Analyse
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
Wertebereich: [-1, 1]
- 1: Gleiche Richtung (identisch).
- 0: Orthogonal (nicht verwandt).
- -1: Entgegengesetzte Richtung.
Anwendungsfall: Textähnlichkeit, semantische Suche.
Euklidische Distanz (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
Wertebereich: [0, ∞) Anwendungsfall: Bildähnlichkeit, Clustering.
Dot Product
A · B = Σ(Aᵢ × Bᵢ)
Anwendungsfall: Entspricht der Cosine Similarity bei normalisierten Embeddings.
Indexierungsalgorithmen
1. Brute Force (Flat Index)
Vergleich der Anfrage mit jedem einzelnen Vektor in der Datenbank.
Komplexität: O(n × d)
- n: Anzahl der Vektoren.
- d: Dimension.
Vorteil: 100 % Genauigkeit. Nachteil: Sehr langsam bei großen Datensätzen.
2. IVF (Inverted File Index)
Einschränkung des Suchraums durch Aufteilung der Vektoren in Cluster.
Algorithmus:
- Erstellen von Zentroiden mittels K-Means.
- Zuweisung jedes Vektors zu seinem nächstgelegenen Zentroid.
- Während der Suche nur innerhalb der nächstgelegenen nprobe-Cluster suchen.
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.
3. HNSW (Hierarchical Navigable Small World)
Ein graphbasierter Ansatz und heute die beliebteste Methode.
Struktur:
1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)
Parameter:
- M: Maximale Anzahl an Verbindungen pro Knoten.
- ef_construction: Anzahl der Kandidaten beim Aufbau des Index.
- ef_search: Anzahl der Kandidaten während der Anfrageausführung.
Vorteile:
- Extrem schnelle Suche: O(log n).
- Hohe Recall-Raten.
- Unterstützt dynamisches Einfügen/Löschen.
4. Product Quantization (PQ)
Reduzierung der Speichernutzung durch Komprimierung von Vektoren.
Methode:
- Aufteilen des Vektors in M Sub-Vektoren.
- Zuordnung jedes Sub-Vektors zu einem von K Zentroiden.
- Speichern der Zentroid-IDs anstelle der ursprünglichen Vektorkomponenten.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Umwandlung von Float32-Repräsentationen in Int8.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Vergleich beliebter Vektordatenbanken 5 6### Pinecone 7 8**Funktionen:** 9- Vollständig verwalteter Cloud-Service. 10- Automatisches Skalieren. 11- Metadaten-Filterung. 12- Namespace-Isolierung. 13 14**Verwendung:** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})
Weaviate
Funktionen:
- Open Source.
- Eingebaute Vektorisierung.
- GraphQL API-Unterstützung.
- Hybride Suche (Vektor + Keyword).
Qdrant
Funktionen:
- In Rust geschrieben für hohe Performance.
- Umfangreiche Filteroptionen.
- Payload-Indexierung.
- Unterstützung für verteilte Deployments.
Milvus
Funktionen:
- GPU-Beschleunigung.
- Multi-Vektor-Suche.
- Time Travel (Versionierung).
- Kubernetes-native Architektur.
ChromaDB
Funktionen:
- Entwicklerfreundlich und einfach einzurichten.
- In-Memory + persistente Modi.
- Python-first Ansatz.
- Ideal für Prototyping.
Vergleichstabelle
| Funktion | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Hosting | Cloud | Beide | Beide | Beide |
| Skalierbarkeit | Auto | Manuell | Manuell | Auto |
| Hybride Suche | ✓ | ✓ | ✓ | ✓ |
| GPU-Unterstützung | - | - | ✓ | ✓ |
| Preis | Pro Vektor | Kostenlos/Bezahlt | Kostenlos/Bezahlt | Kostenlos/Bezahlt |
Filterung und Metadaten
Pre-Filtering vs. Post-Filtering
Pre-Filtering:
- Zuerst Metadatenfilter anwenden.
- Vektorsuche innerhalb der gefilterten Menge durchführen.
- Vorteil: Schneller.
- Nachteil: Möglicher Recall-Verlust.
Post-Filtering:
- Top-K × Multiplikator über Vektorsuche finden.
- Metadatenfilter auf diese Ergebnisse anwenden.
- Finale Top-K zurückgeben.
- Vorteil: Besserer Recall.
- Nachteil: Langsamere Performance.
Hybride Suche
Kombination aus Keyword (BM25) + Vektorsuche:
final_score = α × vector_score + (1-α) × keyword_score
Performance-Optimierung
Index-Parameter
Optimale HNSW-Einstellungen:
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
Batch-Verarbeitung
1# Schlecht: Einzelnes Insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Gut: Batch-Insert 6index.upsert(vectors, batch_size=100)
Connection Pooling
1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallele Verbindungen 6)
Beispiel einer Enterprise-Architektur
1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 4 │ 5┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 12 │ 13┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘
Monitoring und Observability
Wichtige Metriken
- Query-Latenz (p50, p95, p99)
- Recall-Rate
- QPS (Queries Per Second)
- Indexgröße
- Speichernutzung
Alerting-Schwellenwerte
1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## Fazit 10 11Vektordatenbanken sind unverzichtbare Komponenten moderner KI-Anwendungen. Mit der richtigen Wahl der Datenbank, der Indexierungsstrategie und geeigneten Optimierungen können Sie leistungsstarke semantische Suchsysteme entwickeln. 12 13Bei Veni AI bieten wir Unternehmenslösungen für die Vektorsuche an. Kontaktieren Sie uns für Ihre Anforderungen.
