Μια διανυσματική βάση δεδομένων (Vector Database) αποθηκεύει πυκνά και αραιά embeddings υψηλών διαστάσεων μαζί με μεταδεδομένα, προσφέροντας αναζήτηση ομοιότητας Approximate Nearest Neighbor (ANN) σε χιλιοστά του δευτερολέπτου ως επίπεδο μνήμης και ανάκτησης για RAG, σημασιολογική αναζήτηση και πράκτορες ΤΝ.
| Φόρτος / Περιορισμός | Προτεινόμενη Κατηγορία | Αντιπροσωπευτικές Λύσεις | Λόγος Επιλογής |
|---|---|---|---|
| Υπάρχουσα στοίβα PostgreSQL, κάτω από ~10M διανύσματα | Επέκταση Σχεσιακής ΒΔ | pgvector (+ halfvec / HNSW) | Επαναχρησιμοποιεί συναλλαγές ACID, SQL JOINs και υφιστάμενη λειτουργία χωρίς νέα υποδομή |
| Υβριδική βαθμολόγηση πλήρους κειμένου BM25 + διανυσμάτων | Επέκταση Μηχανής Αναζήτησης | Elasticsearch / OpenSearch / Vespa | Ώριμο οικοσύστημα ανεστραμμένων ευρετηρίων και πολυβάθμιας υβριδικής κατάταξης |
| Αυτόνομη υπηρεσία υψηλού QPS με βαριά φίλτρα | Εξειδικευμένη Κατανεμημένη ΒΔ | Qdrant / Milvus / Weaviate | Ειδική μηχανή αποθήκευσης, γρήγορο φιλτράρισμα payload και οριζόντια κλιμάκωση |
| Τοπική ανάπτυξη, edge/desktop εφαρμογές ή data lakes | Ενσωματωμένη / Στηλοειδής ΒΔ | LanceDB / Chroma / FAISS | Εκτέλεση εντός διεργασίας με ενσωμάτωση zero-copy Apache Arrow / Parquet |
| Τεράστια cold/warm δεδομένα με ελάχιστο κόστος | Object-Storage-Native SaaS | Turbopuffer | Object Storage (S3/GCS) ως πηγή αλήθειας + τοπική κρυφή μνήμη NVMe/RAM |
| Serverless χωρίς συντήρηση σε δημόσιο cloud | Πλήρως Διαχειριζόμενη Υπηρεσία | Pinecone / Vertex AI Vector Search / Azure AI Search | Ελαστική serverless κλιμάκωση με εγγενή ενσωμάτωση IAM και παρακολούθησης |
🔗 Σχετικοί οδηγοί: Έννοιες LLM & AI Agents · Σύγχρονοι Αλγόριθμοι ΤΝ · Εντολές PostgreSQL · Εντολές Redis · Εντολές MongoDB
1. Βασικές Έννοιες & Μετρικές Απόστασης
1.1 Ορολογία Κλειδί
| Όρος | Ορισμός | Τεχνικές Επισημάνσεις |
|---|---|---|
| Embedding | Πίνακας float σταθερού μήκους που κωδικοποιεί σημασιολογία κειμένου, εικόνας ή ήχου | Κοινές διαστάσεις: 384 / 768 / 1024 / 1536 / 3072· η RAM και ο υπολογισμός αυξάνονται γραμμικά |
| ANN (Approximate Nearest Neighbor) | Αναζήτηση με ευρετήριο που θυσιάζει ελάχιστο recall (95%–99%) για επιτάχυνση 100×–1000× | Κύριος συμβιβασμός καθυστέρησης vs recall, έναντι της ακριβούς σάρωσης k-NN |
| Metadata Filtering | Περιορισμός της αναζήτησης μέσω βαθμωτών ιδιοτήτων (tenant, χρόνος, ACL, κατηγορία) | Διάκριση Pre-filtering, Single-stage / Inline και Post-filtering |
| Hybrid Search | Συνδυασμός πυκνών διανυσμάτων (σημασιολογία) και αραιών / BM25 (ακριβείς λέξεις) | Καλύπτει αστοχίες της καθαρής σημασιολογίας σε κωδικούς SKU, σφάλματα και ακρωνύμια |
| Sparse Vector | Διάνυσμα υψηλών διαστάσεων με κυρίως μηδενικά (π.χ. SPLADE, βάρη BM25) | Αποθηκεύει μόνο μη μηδενικούς δείκτες και βάρη· συμπληρώνει την πυκνή αναζήτηση |
1.2 Τρεις Κύριες Μετρικές Απόστασης & Ομοιότητας
Cosine(u, v) = (u · v) / (‖u‖₂ · ‖v‖₂)
IP(u, v) = u · v = ∑ᵢ (uᵢ × vᵢ)
L₂(u, v) = √( ∑ᵢ (uᵢ − vᵢ)² )
| Μετρική | Σημασία | Μαθηματική Ισοδυναμία | Τυπικές Εφαρμογές |
|---|---|---|---|
| Ομοιότητα Συνημιτόνου (Cosine) | Μετρά μόνο τη γωνία αγνοώντας το μέτρο (−1 έως 1· απόσταση = 1 - cos) |
Ίδια κατάταξη με το εσωτερικό γινόμενο για L₂-κανονικοποιημένα διανύσματα | Σημασιολογική αναζήτηση κειμένου, RAG, embeddings προτάσεων (προεπιλογή) |
| Εσωτερικό Γινόμενο (IP / Dot) | Αντικατοπτρίζει γωνία και μέτρο· ελάχιστο υπολογιστικό κόστος | Σε μοναδιαία διανύσματα αντικαθιστά το Cosine αποφεύγοντας ρίζες/διαιρέσεις | Συστάσεις two-tower, κανονικοποιημένα embeddings (π.χ. OpenAI) |
| Ευκλείδεια Απόσταση (L₂) | Ευθύγραμμη γεωμετρική απόσταση· μικρότερη = πιο κοντά | Για μοναδιαία διανύσματα: L₂² = 2 − 2 · cos(u, v) |
Embeddings εικόνων/προσώπων, χωρικό clustering, χαρακτηριστικά ευαίσθητα στο μέτρο |
2. Αλγόριθμοι Ευρετηρίασης ANN & Κβαντισμός
2.1 Σύγκριση Διανυσματικών Ευρετηρίων
| Τύπος Ευρετηρίου | Μηχανισμός | Χρήση RAM | Καθυστέρηση & Recall | Κλίμακα & Μηχανές |
|---|---|---|---|---|
| Flat (Ακριβής Σάρωση) | Εξαντλητικός υπολογισμός απόστασης σε όλα τα διανύσματα | Μέτρια (μόνο ακατέργαστα/κβαντισμένα) | 100% recall· η καθυστέρηση εκτοξεύεται >~100k | Μικρά σύνολα (<100k) και benchmarks αναφοράς |
| IVF-Flat (Ανεστραμμένο Αρχείο) | K-Means clustering σε nlist κάδους· σαρώνει τους nprobe πλησιέστερους |
Χαμηλή (χωρίς επιβάρυνση γράφου) | Ρυθμιζόμενο μέσω nprobe· μέτριο-υψηλό recall |
1M–10M γραμμές με περιορισμένη RAM (FAISS / Milvus / pgvector) |
| IVF-PQ (IVF + Product Quantization) | Διαμερισμός σε κάδους + συμπίεση υποχώρων με codebooks | Πολύ χαμηλή (16×–64× μικρότερη) | Υπερταχύ· χαμηλότερο αρχικό recall (χρειάζεται rescoring) | 100M+ στη μνήμη (FAISS / Milvus / LanceDB) |
| HNSW (Ιεραρχικός Γράφος) | Πολυεπίπεδος γράφος γειτνίασης τύπου skip-list | Υψηλή (διανύσματα + ακμές σε RAM ή hot mmap) | Χιλιοστά δευτ. + 95%–99% recall· βιομηχανικό πρότυπο | 1M–100M+ πραγματικού χρόνου (Qdrant / Milvus / Weaviate / pgvector) |
| DiskANN (Γράφος Vamana) | Γράφος για SSD: συμπιεσμένα διανύσματα στη RAM, πλήρης γράφος σε NVMe | Χαμηλή (μείωση RAM 5×–10×) | 100M+ ανά κόμβο σε ms· απαιτεί γρήγορο NVMe IOPS | 100M–1B+ με στενό προϋπολογισμό μνήμης (Milvus / LanceDB / Azure) |
| ScaNN | Ανισοτροπικός κβαντισμός διανυσμάτων + δενδρικός διαμερισμός | Χαμηλή–Μέτρια | Κορυφαία καμπύλη recall/καθυστέρησης σε IP | Μεγάλης κλίμακας αναζήτηση & συστάσεις (Vertex AI Vector Search / OSS) |
Βασικές παράμετροι ρύθμισης HNSW:
M(μέγιστες αμφίδρομες συνδέσεις ανά κόμβο, συνήθως16–64): μεγαλύτεροMβελτιώνει το recall σε υψηλές διαστάσεις αυξάνοντας RAM και χρόνο κατασκευής.efConstruction(μέγεθος λίστας υποψηφίων κατά την κατασκευή, συνήθως100–400): επηρεάζει μόνο τον χρόνο κατασκευής και βελτιώνει την ποιότητα του γράφου.efSearch(εύρος αναζήτησης ανά ερώτημα, ≥top_k): η μόνη παράμετρος που ρυθμίζεται ανά query· η αύξηση ανεβάζει το recall και μειώνει το QPS.
2.2 Κβαντισμός & Εκτίμηση Μνήμης
Βάση αναφοράς για 10 εκατομμύρια διανύσματα × 1536 διαστάσεις (ακατέργαστο FP32):
Ακατέργαστο μέγεθος ≈ N × D × 4 Bytes (ο γράφος HNSW προσθέτει ~1,2×–1,5× επιβάρυνση RAM)
| Κβαντισμός | Εύρος / διάστ. | Συμπίεση | Μέγεθος 10M × 1536-dim | Ακρίβεια & Χρήση |
|---|---|---|---|---|
| FP32 (Χωρίς συμπίεση) | 32-bit (4 B) | 1× | ~57,2 GB | Ακρίβεια αναφοράς· ακριβή η διατήρηση στη RAM |
| FP16 / BF16 (Μισή ακρίβεια) | 16-bit (2 B) | 2× | ~28,6 GB | Σχεδόν μηδενική απώλεια recall (π.χ. pgvector halfvec), εξαιρετικό ROI |
| SQ8 (Βαθμωτός Int8) | 8-bit (1 B) | 4× | ~14,3 GB | Διατηρεί συνήθως 97%+ recall· στάνταρ επιλογή παραγωγής |
| PQ (Product Quantization) | Υποχώροι | 16×–64× | ~1–4 GB | Απαιτεί εκπαίδευση codebook· συνδυασμός με oversampling + rescore |
| BQ (Δυαδικός 1-bit) | 1-bit | 32× | ~1,79 GB | Αστραπιαία σάρωση Hamming· συνιστάται rescore 3×–5× (≥1024 dim) |
3. Κλιμακωτή Σύγκριση Συστημάτων
3.1 Εξειδικευμένες Εγγενείς Διανυσματικές Βάσεις
| Προϊόν | Άδεια / Ανάπτυξη | Γλώσσα & Μηχανή Αποθήκευσης | Ευρετήρια & Δυνατότητες | Ιδανική Χρήση |
|---|---|---|---|---|
| Qdrant | Apache 2.0 / Self-hosted & Cloud | Rust· στη μνήμη, mmap δίσκου & κβαντισμός δίσκου | HNSW + SQ8/BQ· εγγενή αραιά διανύσματα και γρήγορα ευρετήρια payload | Αυτόνομη υπηρεσία υψηλού QPS, multi-tenancy, σύνθετα φίλτρα |
| Milvus | Apache 2.0 / Κατανεμημένη & Zilliz Cloud | Go control plane + εκτέλεση C++· διαχωρισμένο object storage + MQ | IVF, HNSW, DiskANN, GPU CAGRA· διαμερίσματα multi-tenant | Επιχειρησιακές πλατφόρμες κλίμακας δισεκατομμυρίων |
| Weaviate | BSD-3-Clause (ορισμένα enterprise πρόσθετα κλειστά) | Go· ενσωματωμένο object storage + ανεστραμμένο ευρετήριο | HNSW + δυναμικός/PQ/BQ κβαντισμός· GraphQL/REST, μονάδες vectorization | Εφαρμογές RAG με ενσωματωμένο pipeline embeddings |
| Chroma | Apache 2.0 / Embedded & Client-Server | Πυρήνας Python / Rust· SQLite + τοπική ή κατανεμημένη αποθήκευση | HNSW· μινιμαλιστικό API, στενή ενσωμάτωση LangChain / LlamaIndex | Ταχεία πρωτοτυποποίηση και μικρομεσαίο Python RAG |
| LanceDB | Apache 2.0 / Embedded & Enterprise | Rust· στηλοειδές φορμά Lance & Apache Arrow | IVF-PQ, HNSW, DiskANN· zero-copy I/O, εγγενές πολυτροπικό (ήχος/βίντεο/πίνακες) | Τοπικές embedded εφαρμογές, serverless ανάγνωση S3, data lakes |
| Pinecone | Ιδιόκτητο Serverless SaaS | Διαχειριζόμενη κατανεμημένη μηχανή (από Pods σε Serverless) | Αποσυνδεδεμένο ιδιόκτητο ευρετήριο· υβριδικό sparse-dense, απομόνωση Namespace | Ομάδες cloud zero-ops που προτιμούν διαχειριζόμενη απλότητα |
| Turbopuffer | Ιδιόκτητο SaaS / BYOC | Rust· object storage (S3/GCS) ως πηγή αλήθειας + cache NVMe/RAM | Ευρετήριο κεντροειδών (τύπου SPFresh) αποφεύγοντας τυχαία άλματα δίσκου· κείμενο + διάνυσμα | Τεράστια cold/warm δεδομένα (π.χ. ευρετηρίαση κώδικα) με ελάχιστο κόστος |
3.2 Βιβλιοθήκες Διανυσματικής Αναζήτησης (Όχι Πλήρεις ΒΔ)
| Προϊόν | Άδεια | Όρια & Δυνατότητες | Εφαρμογές |
|---|---|---|---|
| FAISS (Meta) | MIT | Βιβλιοθήκη ομοιότητας C++ / Python (χωρίς διατήρηση μεταδεδομένων, κατανεμημένες συναλλαγές ή server auth)· CPU SIMD & multi-GPU | Μαζικοί υπολογισμοί offline, έρευνα ML, ενσωματωμένος πυρήνας |
3.3 Επεκτάσεις Παραδοσιακών ΒΔ & Μηχανών Αναζήτησης
| Προϊόν | Βάση | Διανυσματικές Δυνατότητες | Πλεονεκτήματα & Περιορισμοί |
|---|---|---|---|
| pgvector | Επέκταση PostgreSQL (συμπ. Supabase) | Τύποι vector / halfvec / sparsevec / bit· HNSW & IVFFlat |
Υπέρ: ACID, SQL JOINs, μηδενική νέα λειτουργία· Κατά: write amplification & πίεση RAM >10M–50M γραμμές |
| Elasticsearch / OpenSearch | Ανεστραμμένο ευρετήριο Lucene + HNSW | Εγγενές υβριδικό Dense Vector + BM25, συγχώνευση RRF, ένθετα φίλτρα | Υπέρ: αξιοποιεί υπάρχουσες ομάδες search· Κατά: υψηλή κατανάλωση JVM off-heap RAM & συγχωνεύσεις τμημάτων |
| Redis (Query Engine) | Κατάστημα KV στη μνήμη | Flat & HNSW, καθυστέρηση κάτω του ms, ενημερώσεις σε πραγματικό χρόνο | Υπέρ: ιδανικό για σημασιολογική cache & feature stores· Κατά: υψηλό κόστος RAM σε μεγάλη κλίμακα |
| MongoDB Atlas Search | ΒΔ εγγράφων (Atlas / Local CLI) | HNSW βασισμένο σε Lucene δίπλα στα έγγραφα BSON | Υπέρ: καταργεί τη διπλή εγγραφή εγγράφου/διανύσματος· Κατά: κύρια αναζήτηση δεμένη με το Atlas |
| SingleStore | Κατανεμημένη HTAP SQL ΒΔ | SQL + εγγενείς διανυσματικές συναρτήσεις (dot / L₂), columnstore + rowstore | Επιχειρησιακοί φόρτοι με real-time SQL analytics και συναλλαγές |
| Vespa | Μηχανή big-data Apache 2.0 | HNSW + ακριβές/προσεγγιστικό υβριδικό, πολυβάθμια κατάταξη ML (Tensor/XGBoost/ONNX) | Μεγάλες πλατφόρμες αναζήτησης & συστάσεων· υψηλότερη καμπύλη εκμάθησης |
3.4 Πλήρως Διαχειριζόμενες Υπηρεσίες Cloud
| Υπηρεσία | Πάροχος Cloud | Αρχιτεκτονική & Χαρακτηριστικά |
|---|---|---|
| Vertex AI Vector Search (πρώην Matching Engine) | Google Cloud (GCP) | Βασισμένο στο ScaNN· ενημερώσεις ροής κλίμακας δισεκατομμυρίων και υβριδικό sparse-dense |
| Amazon OpenSearch Serverless / Aurora pgvector | AWS | Διαχειριζόμενα serverless clusters & επεκτάσεις RDS/Aurora με εγγενή ενσωμάτωση Amazon Bedrock |
| Azure AI Search | Microsoft Azure | Ενσωματωμένο Semantic Ranker, pipelines vectorization και έλεγχος πρόσβασης RBAC |
4. Στρατηγικές Φιλτραρίσματος & Υβριδική Αναζήτηση
4.1 Τρόποι Εκτέλεσης Φιλτραρίσματος Μεταδεδομένων
| Στρατηγική | Σειρά Εκτέλεσης | Κίνδυνος & Αντιμετώπιση |
|---|---|---|
| Pre-filtering | Αξιολογεί πρώτα το βαθμωτό ευρετήριο για bitmap IDs και έπειτα εκτελεί τη διανυσματική αναζήτηση | Σε πολύ αυστηρά φίλτρα (<1%) ο γράφος αποσυνδέεται· Λύση: αυτόματη εναλλαγή σε ακριβή σάρωση |
| Post-filtering | Ανακτά το καθολικό Top-K και απορρίπτει όσα δεν πληρούν τα κριτήρια | Κινδυνεύει να επιστρέψει λιγότερα από K αποτελέσματα (ή μηδέν)· Λύση: ποτέ μόνο του χωρίς ισχυρό oversampling |
| Single-stage / Inline | Ελέγχει δυναμικά το bitmap φίλτρου σε κάθε βήμα στον γράφο HNSW | Σύγχρονο πρότυπο (Qdrant / Milvus / Weaviate / pgvector 0.8+ iterative scan) που εξισορροπεί recall & καθυστέρηση |
4.2 Reciprocal Rank Fusion (RRF)
Επειδή οι βαθμολογίες πυκνής αναζήτησης και BM25 έχουν ανόμοιες κλίμακες, το RRF συγχωνεύει τις κατατάξεις απευθείας χωρίς βαθμονόμηση:
RRF_Score(d) = ∑_{r ∈ R} 1 / (k + rank_r(d)) (τυπική σταθερά εξομάλυνσης k = 60)
5. Αποσπάσματα Έτοιμα για Παραγωγή
5.1 Σχήμα pgvector, Ευρετήριο HNSW & Επαναληπτική Σάρωση (SQL)
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
tenant_id INT NOT NULL,
content TEXT NOT NULL,
embedding halfvec(1536), -- float16 εξοικονομεί 50% μνήμη έναντι float32
fts tsvector GENERATED ALWAYS AS (to_tsvector('simple', content)) STORED
);
CREATE INDEX idx_docs_emb_hnsw ON documents
USING hnsw (embedding halfvec_cosine_ops)
WITH (m = 16, ef_construction = 128);
CREATE INDEX idx_docs_fts ON documents USING gin (fts);
SET hnsw.ef_search = 100;
SET hnsw.iterative_scan = relaxed_order;
SELECT id, content, 1 - (embedding <=> $1::halfvec) AS cosine_sim
FROM documents
WHERE tenant_id = 42
ORDER BY embedding <=> $1::halfvec
LIMIT 10;
Τελεστές Απόστασης pgvector:
<->Ευκλείδεια (L₂) ·<=>Απόσταση συνημιτόνου (1 - cos) ·<#>Αρνητικό εσωτερικό γινόμενο ·<+>Μανχάταν (L₁).
5.2 Qdrant: Δυαδικός Κβαντισμός & Φιλτράρισμα Payload (Python)
from qdrant_client import QdrantClient, models
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="knowledge_base",
vectors_config=models.VectorParams(
size=1536,
distance=models.Distance.COSINE,
on_disk=True,
),
quantization_config=models.BinaryQuantization(
binary=models.BinaryQuantizationConfig(always_ram=True)
),
)
client.create_payload_index(
collection_name="knowledge_base",
field_name="tenant_id",
field_schema=models.PayloadSchemaType.KEYWORD,
)
hits = client.query_points(
collection_name="knowledge_base",
query=[0.012, -0.045, ...],
query_filter=models.Filter(
must=[models.FieldCondition(key="tenant_id", match=models.MatchValue(value="org_a"))]
),
search_params=models.SearchParams(
quantization=models.QuantizationSearchParams(rescore=True, oversampling=3.0)
),
limit=10,
).points