
Vektör veritabanı, yüksek boyutlu vektör yerleştirmelerini depolamak, indekslemek ve sorgulamak için tasarlanmış özel bir veritabanıdır. Tam anahtar kelime eşleşmelerine veya yapılandırılmış sorgulara göre arama yapan geleneksel veritabanlarının aksine, vektör veritabanları anlamsal benzerliğe göre arama yapar; farklı kelimeler kullansa bile kavramsal olarak ilişkili verileri bulur.
Vektör veritabanı, yüksek boyutlu vektör yerleştirmelerini depolamak, indekslemek ve sorgulamak için tasarlanmış özel bir veritabanıdır. Tam anahtar kelime eşleşmelerine veya yapılandırılmış sorgulara göre arama yapan geleneksel veritabanlarının aksine, vektör veritabanları anlamsal benzerliğe göre arama yapar; farklı kelimeler kullansa bile kavramsal olarak ilişkili verileri bulur.
Vektör veritabanları yapay zeka uygulamaları için temel altyapı haline geldi: erişimle artırılmış nesil (RAG), anlamsal arama, öneri sistemleri, anormallik tespiti ve çok modlu yapay zeka (metin, resim, ses) desteği.
Yerleştirmeler, makine öğrenimi modelleri tarafından üretilen verilerin (metin, resim, ses veya başka herhangi bir yöntem) sayısal temsilleridir. İşin sihri, benzer öğelerin vektör uzayında birbirine yakınlaşmasıdır:
"king" ──► [0.23, -0.45, 0.78, ..., 0.12] (768 dimensions)
"queen" ──► [0.25, -0.42, 0.76, ..., 0.15] (close to king)
"apple" ──► [-0.12, 0.65, 0.33, ..., -0.28] (far from king)
┌───────┐
│ man │
└───┬───┘
│
┌───────────────┼───────────────┐
│ │ │
┌───▼───┐ ┌───▼───┐ ┌───▼───┐
│ king │───────│ woman │───────│ queen │
└───┬───┘ └───┬───┘ └───┬───┘
│ │ │
└───────────────┼───────────────┘
│
┌───▼───┐
│ girl │
└───────┘
Vector arithmetic: king - man + woman = queen
| Modeli | Boyutlar | En İyisi | sağlayıcı |
|---|---|---|---|
| metin yerleştirme-3-küçük | 512-1536 | Genel amaçlı, uygun maliyetli | OpenAI |
| metin gömme-3-büyük | 256-3072 | Yüksek doğruluk, anlamsal arama | OpenAI |
| Tutarlı Yerleştirme v3 | 1024 | Çok dilli, sınıflandırma | tutarlı |
| BAAI/bge-large-en-v1.5 | 1024 | Açık kaynak, yüksek kalite | Sarılma Yüz |
| cümle-transformatörler/tümü-MiniLM-L6-v2 | 384 | Hafif, hızlı | Sarılma Yüz |
| resim bağlama | 1024 | Çok modlu (metin, resim, ses) | meta |
Kaba kuvvetle en yakın komşu araması O(N)'dir; milyonlarca vektör için çok yavaştır:
# Brute force — O(N), not scalable
def brute_force_search(query_vector, all_vectors, k=10):
distances = []
for i, vec in enumerate(all_vectors):
dist = cosine_distance(query_vector, vec)
distances.append((dist, i))
return sorted(distances)[:k]
Vektör veritabanları, alt doğrusal arama süresini elde etmek için YSA algoritmalarını kullanır:
| Algoritma | Hız | Geri çağırma | Bellek | Oluşturma Süresi |
|---|---|---|---|---|
| HNSW (Hiyerarşik Gezinilebilir Küçük Dünya) | ⚡ Hızlı | %95-99 | Yüksek | Yavaş |
| IVF (Tersine Çevrilmiş Dosya Dizini) | 🐢 Yavaş | %90-95 | Orta | Hızlı |
| IVF + PQ (Ürün Niceleme) | ⚡ Hızlı | %85-95 | Düşük | Orta |
| DiskANN | ⚡ Hızlı | %90-95 | Düşük (disk) | Orta |
| LSH (Yerelliğe Duyarlı Karma) | 🐢 Yavaş | %80-90 | Yüksek | Hızlı |
HNSW çok katmanlı bir grafik yapısı oluşturur:
Layer 3: ────────●──────── (sparse, long-range connections)
│
Layer 2: ────●────────●─── (medium density)
│ │
Layer 1: ──●──●──●──●──●── (dense, short-range connections)
Search starts at top layer (coarse) and descends to bottom layer (fine).
| Özellik | Çam kozalağı | Dokuma | Qdrant | Milvus | Renk | pgvektör |
|---|---|---|---|---|---|---|
| Mimarlık | Yönetilen SaaS | Hibrit | Bağımsız | Dağıtılmış | Gömülü | PostgreSQL uzantısı |
| İstikrar | Bulut | Bulut/Şirket içi | Bulut/Şirket içi | Bulut/Şirket içi | Yerel dosya | PostgreSQL |
| dizin | HNSW | HNSW | HNSW | IVF/HNSW | HNSW | IVFFlat/HNSW |
| Karma arama | Evet | Evet | Evet | Evet | Sınırlı | Evet (SQL aracılığıyla) |
| Çoklu kiracılık | Evet | Evet | Evet | Evet | Manuel | Şemalar aracılığıyla |
| Filtreleme | Ön filtre | Ön/son filtre | Ön filtre | Filtre sonrası | Sınırlı | Filtre + dizin |
| Meta veriler | JSON | JSON | JSON | JSON | JSON | JSONB |
| Açık kaynak | Hayır | Evet (BSL) | Evet (Apache 2.0) | Evet (Apache 2.0) | Evet (Apache 2.0) | Evet (PostgreSQL) |
| Kendi kendine barındırıcı | Hayır | Evet | Evet | Evet | Evet | Evet |
En popüler vektör veritabanı kullanım örneği — LLM'leri özel verilerle genişletmek:
User Query: "What is our company policy on remote work?"
┌─────────────────────────┐
│ Embedding Model │
│ text-embedding-3-small │
└────────────┬────────────┘
│ (query vector)
▼
┌─────────────────────────┐
│ Vector Database │
│ (company policies) │
└────────────┬────────────┘
│ (relevant chunks)
▼
┌─────────────────────────┐
│ LLM (GPT-4 / Claude) │
│ "Based on our policy │
│ document X, remote │
│ work is allowed 3 │
│ days per week..." │
└─────────────────────────┘
Python uygulaması:
import openai
from qdrant_client import QdrantClient
client = QdrantClient("localhost", port=6333)
def rag_query(question: str) -> str:
# 1. Embed the question
query_vector = openai.embeddings.create(
input=question, model="text-embedding-3-small"
).data[0].embedding
# 2. Search vector database
results = client.query_points(
collection_name="company_policies",
query=query_vector,
limit=5
)
# 3. Build context from retrieved chunks
context = "\n\n".join([r.payload["text"] for r in results.points])
# 4. Generate answer with context
response = openai.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Answer based on the provided context only."},
{"role": "user", "content": f"Context:\n{context}\n\nQuestion: {question}"}
]
)
return response.choices[0].message.content
Anahtar kelimelere göre değil, anlama göre arama yapın:
# Traditional keyword search — misses synonyms
SELECT * FROM products WHERE description LIKE '%cheap laptop%'
# May miss: "affordable notebook" or "budget computer"
# Vector semantic search — finds conceptually related items
results = vector_db.search(
query="budget-friendly portable computer",
collection="products",
limit=10
)
# Finds: "cheap laptop", "affordable notebook", "budget desktop", "entry-level PC"
Performans karşılaştırması:
| Arama Türü | Geri çağırma | Kullanıcı Memnuniyeti | Uygulama Karmaşıklığı |
|---|---|---|---|
| Anahtar Kelime (BM25) | %40-60 | Düşük | Düşük |
| Anlamsal (Vektör) | %70-90 | Yüksek | Orta |
| Hibrit (BM25 + Vektör) | %85-95 | Çok Yüksek | Yüksek |
Farklı veri türlerinde arama yapın:
# Text-to-image search
text_vector = embed_text("sunset over mountains")
image_results = vector_db.search(text_vector, collection="images")
# Image-to-text search
image_vector = embed_image(uploaded_photo)
text_results = vector_db.search(image_vector, collection="descriptions")
# Image-to-image search (visual similarity)
product_image_vector = embed_image(product_photo)
similar_products = vector_db.search(product_image_vector, collection="products")
def recommend_items(user_id: str, n: int = 10):
# Get user's embedding (from past behavior)
user_vector = get_user_embedding(user_id)
# Find similar items in vector space
recs = vector_db.search(
query=user_vector,
collection="items",
limit=n,
with_payload=True
)
# Diversity re-ranking
return diversify(recs, diversity_factor=0.3)
Qdrant örneği:
from qdrant_client import QdrantClient
from qdrant_client.models import VectorParams, Distance
client = QdrantClient("localhost", port=6333)
# Create collection with specific vector config
client.create_collection(
collection_name="documents",
vectors_config=VectorParams(
size=1536, # Matches text-embedding-3-small
distance=Distance.COSINE # or DOT, EUCLIDEAN
),
)
# Insert vectors with payload (metadata)
client.upsert(
collection_name="documents",
points=[
{
"id": "doc_001",
"vector": [0.12, -0.45, ..., 0.78], # 1536-dimensional
"payload": {
"title": "Remote Work Policy",
"category": "HR",
"author": "HR Team",
"date": "2026-01-15",
"chunk_index": 0,
"text": "Employees may work remotely up to 3 days per week..."
}
},
# ... more points
]
)
# Semantic search with metadata filters
results = client.query_points(
collection_name="documents",
query=query_vector,
query_filter=models.Filter(
must=[
models.FieldCondition(
key="category",
match=models.MatchValue(value="Engineering")
),
models.FieldCondition(
key="date",
range=models.Range(gte="2025-01-01")
),
],
should=[
models.FieldCondition(
key="author",
match=models.MatchValue(value="Alice")
),
]
),
limit=20,
score_threshold=0.75 # Minimum similarity score
)
| Operasyon | PostgreSQL | pgvektör | Özel Vektör DB |
|---|---|---|---|
| Tam KNN | ❌ (tam tarama) | ❌ (yavaş) | ✅ (kaba kuvvet yoluyla) |
| YSA arama | ❌ | ✅ (IVFFlat, HNSW) | ✅ (optimize edilmiş) |
| 10 milyondan fazla vektör | ✅ | ⚠️ Performans düşer | ✅ |
| Gerçek zamanlı akış | ✅ | ⚠️ | ✅ |
| Hibrit arama | ✅ (SQL filtreleri) | ✅ | ✅ |
| Çok kiracılı | ✅ (şemalar) | ✅ | ✅ (yerli) |
| ASİT işlemleri | ✅ | ✅ | ⚠️ (sınırlı) |
| Zaman yolculuğu sorguları | ❌ | ❌ | ✅(WAL) |
vector_database_pricing:
pinecone:
starter: "$70/month for 100K vectors"
enterprise: "$2,000+/month for 10M+ vectors"
self_hosted_qdrant:
infrastructure: "$50-500/month (cloud VMs)"
maintenance: "Operational overhead"
Vektör veritabanları yapay zeka uygulamaları için kritik bir altyapı bileşenidir:
Vektör veritabanı ortamı hızla gelişiyor. Basit bir başlangıç yapın (pgvector veya açık kaynak Qdrant), verilerinizle kıyaslama yapın ve gerektiğinde ölçeklendirin.
Henüz onaylı yorum yok. Yeni yanıtlar moderasyon bekleyebilir.