Vektör Veritabanı
Vector Database
Vektörleri saklayıp anlam yakınlığına göre çok hızlı arama yapan özelleşmiş veritabanı.
Klasik bir DB satırlardan oluşur ve eşitlikle arar (WHERE name = 'X').
Vektör DB ise vektörleri saklar ve "bu vektöre en yakın 10 tanesi
hangileri?" sorusuna milisaniyelerde cevap verir — milyonlarca vektör
arasında bile.
Bunu ANN (Approximate Nearest Neighbors — yaklaşık en yakın komşu) algoritmalarıyla yapar: HNSW, IVF, ScaNN. Tam doğru sonucu garanti etmez (yaklaşıktır) ama 100 kat daha hızlıdır. Çoğu kullanım için bu uzlaşı makul.
Popüler seçenekler: Pinecone (yönetilen servis), Weaviate, Qdrant, Chroma (kendin barındır), pgvector (Postgres eklentisi), Milvus, LanceDB. Vektör + meta veri filtreleme ile hibrit aramalar yapabilirsin.
Kitap kütüphanesini düşün. Klasik DB = alfabetik raf (tam başlık biliyorsan hızlı). Vektör DB = "bu kitaba konu olarak benzer kitaplar" rafı — anahtar kelime değil, anlam üzerinden bulur. Üstelik 1 milyon kitabı saniyede tarar.
Bir girişimin dahili destek dokümantasyonu var: 5000 wiki sayfası, eğitim videosu transkriptleri, eski destek talepleri. Yeni bir destek botu kuruyorsun: 1. Tüm içeriği parçalara böl, embed et. 2. Vektörleri Qdrant'a yükle (200K vektör, ~5 GB). 3. Çalışan "VPN bağlantı sorunu" yazınca: sorgu vektörlenir, Qdrant en yakın 10 parçayı 50 ms'de döner. 4. Bu parçalar LLM'e bağlam olarak verilir.
Postgres'le bunu denersen tam metin araması 2 saniye sürer ve sonuçlar daha az alakalı olur.
- RAG sisteminin arama (retrieval) katmanı
- Anlamsal arama
- Öneri motorları (kullanıcı/ürün vektör eşleştirmesi)
- Anomali tespiti (kümelerin dışındaki vektörler)
- Görsel ya da ses benzerliği araması
- Sadece tam eşleşme arıyorsan — Postgres/MySQL daha basit
- 100K'dan az vektör — pgvector ya da bellek içi FAISS yeter, ayrı DB gereksiz
- Sıkı işlemsel (transactional) garanti gerekiyorsa — vektör DB'ler genelde nihai tutarlılık (eventual consistency) sunar
Sadece benzerliğe güvenmek
İlk 10 sonuç kullanıcı için her zaman doğru olmayabilir. Yeniden sıralama (reranking — cross-encoder) ekleyip sonuçları daha hassas sırala.
Meta veri filtrelemesini atlamak
1M vektörden ilk 10'u al, sonra WHERE user_id = X filtrele — yanlış. Önce filtrele, sonra benzerlik hesapla. Aksi halde başka kullanıcının verisi sızabilir.
İndeks maliyetini hafife almak
HNSW indeksi 1M vektör için 30 dakika + 10 GB RAM ister. Bunu canlı sistemde yapma, toplu güncelleme (batch update) planla.