Vektör Veritabanı Seçimi: Çam Kozalağı, Qdrant, Weaviate, pgvector Karşılaştırıldı
RAG sisteminiz için yanlış vektör veritabanını seçmek haftalarca süren yeniden düzenlemeye mal olabilir ve planlanmamış bütçe. 2026 yılında pazar dört ana seçenek etrafında birleşti: her biri çok farklı bir takas profiline sahip: Çam kozalağı yönetilmek isteyenler için operasyonsuz hizmet, Qdrant performansa ve kendi kendini barındırmaya öncelik verenler için, Dokuma yerel hibrit aramaya ihtiyaç duyanlar için, e pgvektör Mevcut PostgreSQL veritabanında kalmak isteyenler için.
Bu kılavuz size kıyaslama verilerini, gerçek maliyetleri ve seçim kriterlerini sağlar. özel iş yükünüze göre bilinçli bir karar.
Ne Öğreneceksiniz
- Büyük vektör veritabanları için gecikme ve verim kıyaslamaları 2026
- Farklı ölçeklerde gerçek maliyetler (100K, 1M, 10M, 100M vektörler)
- Karar matrisi: hangi veri tabanının hangi kullanım durumu için
- Qdrant ve pgvector için Python ile pratik kurulum
- HNSW endeksleri: optimum performans için kritik parametreler
- Milvus 100 milyondan fazla taşıyıcı için doğru seçim olduğunda
Vektör Veritabanı Neden Modelden Daha Önemli?
Bir RAG sisteminde, son yanıtın kalitesi %60-70 oranında geri alma kalitesine bağlıdır, seçilen LLM'den değil. Zayıf erişime sahip bir GPT-4o, GPT-4o-mini'den daha kötü yanıtlar üretecektir mükemmel geri alma ile. Vektör veritabanı, erişimin kalbidir: gecikmesi, kesinliği ve ölçeklenebilirliği sisteminizin kullanıcı deneyimini belirler.
Benchmark 2026: Standartlaştırılmış Donanıma İlişkin Gerçek Veriler
Aşağıdaki kıyaslamalar 1536 boyuttan 1 milyon vektörden oluşan bir veri kümesinde ölçülmüştür (embedding OpenAI text-embedding-3-small), k=10 sorgusu ile, 8 vCPU ve 32 GB RAM'e sahip bir sunucuda.
Database | P50 Latency | P99 Latency | Throughput | Recall@10
-----------------|-------------|-------------|-------------|----------
Qdrant (HNSW) | 12ms | 28ms | 850 q/s | 0.989
Pinecone (cloud) | 18ms | 35ms | 600 q/s | 0.987
Weaviate (HNSW) | 22ms | 50ms | 500 q/s | 0.985
pgvector (IVFFlat)| 45ms | 120ms | 200 q/s | 0.941
pgvector (HNSW) | 18ms | 45ms | 420 q/s | 0.983
Milvus (HNSW) | 8ms | 18ms | 1200 q/s | 0.991
Note: pgvector HNSW disponibile da PG 16 (2023), molto migliorato
Qdrant, performans/kendi kendini barındırma konusunda lider olarak ortaya çıkıyor. Çam kozalağı garantili SLA'lar sunar yönetilen bir hizmet olarak. HNSW'li pgvector (PostgreSQL 16'da tanıtıldı) neredeyse tamamen köprü oluşturdu özel çözümlerle aradaki boşluğu giderin.
Farklı Ölçeklerde Maliyet Analizi
Costo mensile stimato (USD) — 1M vettori 1536 dim, 100K query/giorno
Pinecone Starter Pod: ~$70/mese (serverless, pay-per-use)
Pinecone Standard Pod: ~$280/mese (1x p1.x1 pod, SLA garantito)
Qdrant Cloud: ~$85/mese (0.5 vCPU, 1GB RAM managed)
Qdrant Self-hosted: ~$30/mese (infrastruttura cloud VPS)
Weaviate Cloud: ~$95/mese
pgvector (in Postgres): $0 aggiuntivo (gia paghi il DB)
A 10M vettori:
Pinecone: ~$700-1400/mese
Qdrant: ~$250/mese (self-hosted con server dedicato)
pgvector: ~$50/mese aggiuntivo (RAM extra per PostgreSQL)
Milvus: ~$180/mese (self-hosted, ottimo TCO a questa scala)
A 100M+ vettori:
Pinecone: >$5000/mese
Qdrant: ~$800/mese (cluster dedicato)
Milvus: ~$500/mese (cluster distribuito on-premise)
Pratik Kurulum: Qdrant
Qdrant, maksimum performans isteyen teknik ekiplerin en yaygın tercihidir. dağıtım üzerinde kontrol. İşte kurulumun tamamı:
# Qdrant: setup, indexing e querying
from qdrant_client import QdrantClient
from qdrant_client.models import (
Distance, VectorParams, HnswConfigDiff,
PointStruct, Filter, FieldCondition, MatchValue
)
from openai import OpenAI
import uuid
# Connessione (locale o cloud)
client = QdrantClient(url="http://localhost:6333")
# Per Qdrant Cloud: QdrantClient(url="...", api_key="...")
# Crea la collection con HNSW ottimizzato
client.create_collection(
collection_name="knowledge_base",
vectors_config=VectorParams(
size=1536, # dimensione embedding OpenAI
distance=Distance.COSINE
),
hnsw_config=HnswConfigDiff(
m=16, # connessioni per nodo (default: 16)
ef_construct=200, # qualita indice durante build (default: 100)
# Aumentare ef_construct migliora recall ma rallenta l'indicizzazione
),
on_disk_payload=True # payload su disco per risparmiare RAM
)
# Indicizza documenti
openai_client = OpenAI()
def embed_text(text: str) -> list[float]:
response = openai_client.embeddings.create(
input=text,
model="text-embedding-3-small"
)
return response.data[0].embedding
def index_documents(documents: list[dict]) -> None:
points = []
for doc in documents:
embedding = embed_text(doc["content"])
points.append(PointStruct(
id=str(uuid.uuid4()),
vector=embedding,
payload={
"content": doc["content"],
"source": doc["source"],
"category": doc["category"],
"created_at": doc["created_at"]
}
))
# Batch upload per efficienza
client.upsert(
collection_name="knowledge_base",
points=points,
wait=True
)
# Query con filtri
def search(
query: str,
category_filter: str | None = None,
limit: int = 5
) -> list[dict]:
query_embedding = embed_text(query)
query_filter = None
if category_filter:
query_filter = Filter(
must=[
FieldCondition(
key="category",
match=MatchValue(value=category_filter)
)
]
)
results = client.query_points(
collection_name="knowledge_base",
query=query_embedding,
query_filter=query_filter,
limit=limit,
with_payload=True
)
return [
{"content": r.payload["content"], "score": r.score, "source": r.payload["source"]}
for r in results.points
]
# Esempio d'uso
docs = [
{"content": "Come configurare l'autenticazione 2FA...", "source": "docs/security.md",
"category": "security", "created_at": "2026-01-15"},
]
index_documents(docs)
results = search("configurazione sicurezza account", category_filter="security")
Pratik Kurulum: pgvector
Zaten PostgreSQL kullanıyorsanız pgvector akıllıca bir seçimdir: sıfır ek altyapı, ASİT işlemleri, diğer tablolarla BİRLEŞİN. HNSW ile performans çözümlerle karşılaştırılabilir düzeydedir 5M taşıyıcıların altındaki teraziler için ayrılmıştır.
# pgvector: schema e querying con psycopg2
import psycopg2
from pgvector.psycopg2 import register_vector
import numpy as np
conn = psycopg2.connect("postgresql://user:pass@localhost/dbname")
register_vector(conn)
with conn.cursor() as cur:
# Abilita l'estensione (una tantum)
cur.execute("CREATE EXTENSION IF NOT EXISTS vector")
# Crea la tabella con embedding
cur.execute("""
CREATE TABLE IF NOT EXISTS documents (
id BIGSERIAL PRIMARY KEY,
content TEXT NOT NULL,
source VARCHAR(500),
category VARCHAR(100),
embedding vector(1536), -- dimensione OpenAI
created_at TIMESTAMP DEFAULT NOW()
)
""")
# Crea indice HNSW (migliore performance di IVFFlat)
cur.execute("""
CREATE INDEX IF NOT EXISTS documents_embedding_hnsw_idx
ON documents
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 200)
""")
conn.commit()
# Inserimento
def insert_document(content: str, source: str, category: str, embedding: list[float]):
with conn.cursor() as cur:
cur.execute(
"INSERT INTO documents (content, source, category, embedding) VALUES (%s, %s, %s, %s)",
(content, source, category, np.array(embedding))
)
conn.commit()
# Query similarity search con filtro
def search_documents(query_embedding: list[float], category: str = None, limit: int = 5):
with conn.cursor() as cur:
if category:
cur.execute("""
SELECT content, source, 1 - (embedding <=> %s) AS similarity
FROM documents
WHERE category = %s
ORDER BY embedding <=> %s
LIMIT %s
""", (np.array(query_embedding), category, np.array(query_embedding), limit))
else:
cur.execute("""
SELECT content, source, 1 - (embedding <=> %s) AS similarity
FROM documents
ORDER BY embedding <=> %s
LIMIT %s
""", (np.array(query_embedding), np.array(query_embedding), limit))
return cur.fetchall()
# Restituisce: [(content, source, similarity_score), ...]
Karar Matrisi: Hangisini seçmeli
Caso d'uso | Raccomandazione | Motivo
------------------------------------|------------------------|----------------------------------
Gia uso PostgreSQL, <1M vettori | pgvector | Zero infra, JOIN nativi, ACID
Startup, MVP rapido | Pinecone Serverless | Zero ops, pay-per-use
Team tecnico, >1M vettori | Qdrant self-hosted | Best performance/cost
Hybrid search nativo necessario | Weaviate | BM25+vector integrato
>100M vettori, cluster distribuito | Milvus | Scalabilita orizzontale
Compliance (dati on-premise) | Qdrant/Milvus | Full control, nessun cloud
Seçimde Yaygın Hatalar
- IVFFlat ile pgvector'u seçin veri kümelerinde > 500.000 vektör: gecikme önemli ölçüde bozulur. HNSW kullanın (PostgreSQL 16'dan beri mevcuttur) veya bir çözüme geçin adanmış
- Gömmelerin boyutunu abartmak: metin yerleştirme-3-küçük a 1536 boyut, 3072 boyutta metin yerleştirme-3-büyük ile neredeyse aynı performansa sahiptir ancak maliyeti yarı yarıyadır ve yarı RAM kullanır
- Sorgu zamanında ef_search'ü yoksay: ef_search'ü 100'den 200'e yükseltin Qdrant/Weaviate, yalnızca 1,3 kat gecikme ek yüküyle hatırlamayı %95 ila %99 oranında artırır
- Yalnızca ilk hacim için boyut: Önce geçişi planlayın mevcut seçiminizin sınırına ulaşmak için
Kritik HNSW Parametreleri
HNSW (Hiyerarşik Gezinilebilir Küçük Dünya) dizini vektör performansının kalbidir veritabanları. Parametrelerini anlamak, geri çağırma/gecikme dengesini optimize etmenize olanak tanır:
Parametro | Effetto sull'indice | Effetto sulla query
----------------|----------------------|--------------------
m (16-64) | Connessioni per nodo | Recall (piu alto = meglio)
| piu alto = piu RAM | Latency (marginale impatto)
| piu alto = build piu |
| lento |
| |
ef_construction | Qualita build | Nessun effetto diretto
(100-500) | piu alto = recall | (determina qualita indice)
| migliore |
| piu alto = build piu |
| lento |
| |
ef_search | Nessun effetto | Recall (molto impatto)
(50-500) | sull'indice | Latency (tradeoff principale)
Configurazione raccomandata per produzione:
- m = 16 (bilanciato), m = 32 (alta accuratezza, +50% RAM)
- ef_construct = 200 (build lenta, alta qualita indice)
- ef_search = 100-200 (aumenta a query time senza ricostruire)
Sonuçlar
2026'nın temel kuralı: 1M vektörler altında HNSW'li pgvektör genellikle tercihtir doğru if you are already on PostgreSQL — zero additional infrastructure and performance rekabetçi. Between 1M and 50M carriers, Qdrant self-hosted offers the best performance/cost ratio. Over 100M carriers, Milvus with distributed deployment and the standard choice.
Bir sonraki makale, Naive RAG'dan Modüler RAG'a kadar RAG mimarilerini kodla ele alıyor En karmaşık kullanım durumlarını ele alacak eksiksiz ve desen.







