Vector Databases en Embedding Search Systemen
Vector databases zijn gespecialiseerde databases die geoptimaliseerd zijn voor het opslaan en uitvoeren van similariteitszoekopdrachten op hoog-dimensionale vectoren. Ze vormen een fundamenteel onderdeel van moderne AI-toepassingen, met name in RAG (Retrieval-Augmented Generation) systemen.
Wat is een Vector Database?
Waar traditionele databases geoptimaliseerd zijn voor exacte match-queries, richten vector databases zich op Approximate Nearest Neighbor (ANN) zoekopdrachten.
Kernconcepten
Embedding: Een numerieke vectorrepresentatie van data (tekst, afbeelding, audio).
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Similarity Search: Het vinden van de vectoren die het dichtst bij een queryvector liggen.
query_vector → Top-K most similar vectors
Distance Metrics:
- Cosine Similarity: Richtingssimilariteit.
- Euclidean Distance (L2): Geometrische afstand.
- Dot Product: Inwendig product van vectoren.
Similarity Metrics: Gedetailleerde Analyse
Cosine Similarity
cos(A, B) = (A · B) / (||A|| × ||B||)
Waardebereik: [-1, 1]
- 1: Zelfde richting (identiek).
- 0: Orthogonaal (niet gerelateerd).
- -1: Tegengestelde richting.
Use Case: Tekstsimilariteit, semantisch zoeken.
Euclidean Distance (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
Waardebereik: [0, ∞) Use Case: Afbeeldingssimilariteit, clustering.
Dot Product
A · B = Σ(Aᵢ × Bᵢ)
Use Case: Equivalent aan cosine voor genormaliseerde embeddings.
Indexeringsalgoritmen
1. Brute Force (Flat Index)
Het vergelijken van de query met elke vector in de database.
Complexiteit: O(n × d)
- n: Aantal vectoren.
- d: Dimensie.
Voordeel: 100% nauwkeurigheid. Nadeel: Zeer traag voor grote datasets.
2. IVF (Inverted File Index)
Het verkleinen van de zoekruimte door vectoren op te delen in clusters.
Algoritme:
- Maak centroiden met behulp van K-means.
- Wijs elke vector toe aan zijn dichtstbijzijnde centroid.
- Tijdens het zoeken wordt alleen gekeken binnen de dichtstbijzijnde nprobe clusters.
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)
Een graaf-gebaseerde aanpak en vandaag de dag de meest populaire methode.
Structuur:
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)
Parameters:
- M: Maximaal aantal verbindingen per node.
- ef_construction: Aantal kandidaten tijdens het bouwen van de index.
- ef_search: Aantal kandidaten tijdens het uitvoeren van een query.
Voordelen:
- Zeer snelle zoekopdrachten: O(log n).
- Hoge recall-ratio’s.
- Ondersteunt dynamisch invoegen/verwijderen.
4. Product Quantization (PQ)
Het verminderen van het geheugengebruik door vectoren te comprimeren.
Methode:
- Splits de vector in M sub-vectoren.
- Map elke sub-vector naar één van K centroiden.
- Sla centroid-ID’s op in plaats van de originele vectorcomponenten.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Het omzetten van Float32-representaties naar Int8.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Vergelijking van Populaire Vector Databases 5 6### Pinecone 7 8**Functies:** 9- Volledig beheerde cloudservice. 10- Automatische schaalvergroting. 11- Metadata-filtering. 12- Namespace-isolatie. 13 14**Gebruik:** 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
Functies:
- Open source.
- Ingebouwde vectorisatie.
- GraphQL API-ondersteuning.
- Hybride zoekmogelijkheden (vector + keyword).
Qdrant
Functies:
- Geschreven in Rust voor hoge prestaties.
- Uitgebreide filteropties.
- Payload-indexering.
- Ondersteuning voor gedistribueerde deployment.
Milvus
Functies:
- GPU-versnelling.
- Multi-vector search.
- Time travel (versiebeheer).
- Kubernetes-native architectuur.
ChromaDB
Functies:
- Ontwikkelaarsvriendelijk en eenvoudig op te zetten.
- In-memory + persistente modi.
- Python-first aanpak.
- Ideaal voor prototyping.
Vergelijkingstabel
| Functie | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Hosting | Cloud | Beide | Beide | Beide |
| Schaalbaarheid | Auto | Handmatig | Handmatig | Auto |
| Hybride Search | ✓ | ✓ | ✓ | ✓ |
| GPU-ondersteuning | - | - | ✓ | ✓ |
| Prijzen | Per vector | Gratis/Betaald | Gratis/Betaald | Gratis/Betaald |
Filtering en Metadata
Pre-filtering vs Post-filtering
Pre-filtering:
- Pas eerst de metadata-filter toe.
- Voer een vector search uit binnen de gefilterde set.
- Voordeel: Sneller.
- Nadeel: Mogelijk lagere recall.
Post-filtering:
- Vind Top-K × multiplier resultaten via vector search.
- Pas de metadata-filter toe op deze resultaten.
- Retourneer de uiteindelijke top K.
- Voordeel: Betere recall.
- Nadeel: Lagere prestaties.
Hybride Search
Combinatie van Keyword (BM25) + Vector search:
final_score = α × vector_score + (1-α) × keyword_score
Prestatie-optimalisatie
Indexparameters
Optimale HNSW-instellingen:
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
Batch Processing
1# Slecht: enkele insert 2for vec in vectors: 3 index.upsert([vec]) 4 5# Goed: 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 # Parallelle connecties 6)
Voorbeeld van Enterprise-architectuur
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 en Observability
Belangrijke Metrics
- Query-latency (p50, p95, p99)
- Recall-percentage
- QPS (Queries Per Second)
- Indexgrootte
- Geheugengebruik
Alerting-drempels
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## Conclusie 10 11Vector-databases zijn onmisbare componenten van moderne AI-toepassingen. Met de juiste keuze van database, indexeringsstrategie en optimalisaties kun je hoogwaardige semantische zoeksystemen bouwen. 12 13Bij Veni AI bieden we enterprise vector search-oplossingen. Neem contact met ons op voor jouw vereisten.
