تُخزّن قاعدة البيانات المتجهة (Vector Database) التضمينات الكثيفة والمتفرقة عالية الأبعاد مع البيانات الوصفية، لتوفر بحث تشابه لأقرب الجيران التقريبيين (ANN) خلال أجزاء من الثانية كطبقة استرجاع وذاكرة لأنظمة RAG والبحث الدلالي ووكلاء الذكاء الاصطناعي.
| عبء العمل / القيد | الفئة الموصى بها | الحلول الممثلة | سبب الملاءمة |
|---|---|---|---|
| بنية PostgreSQL قائمة، أقل من ~10 ملايين متجه | إضافة قاعدة علائقية | pgvector (+ halfvec / HNSW) | تعيد استخدام معاملات ACID وSQL JOIN والتشغيل القائم دون بنية جديدة |
| بحث هجين نص كامل BM25 + متجهات | إضافة محرك بحث | Elasticsearch / OpenSearch / Vespa | منظومة ناضجة للفهارس المعكوسة والترتيب الهجين متعدد المراحل |
| خدمة مستقلة عالية QPS مع تصفية معقدة | قاعدة متجهات موزعة مخصصة | Qdrant / Milvus / Weaviate | محرك تخزين متخصص، تصفية سريعة للحمولة وتوسع أفقي |
| تطوير محلي، تطبيقات طرفية أو قراءة بحيرات البيانات | قاعدة مدمجة / عمودية | LanceDB / Chroma / FAISS | تنفيذ داخل العملية مع تكامل صفري النسخ مع Apache Arrow / Parquet |
| بيانات ضخمة باردة/دافئة بأقل تكلفة تخزين | خدمة SaaS أصلية على تخزين الكائنات | Turbopuffer | تخزين الكائنات (S3/GCS) كمصدر للحقيقة + ذاكرة تخزين مؤقت NVMe/RAM |
| Serverless بلا تشغيل مرتبط بالمنصات السحابية | خدمة سحابية مدارة بالكامل | Pinecone / Vertex AI Vector Search / Azure AI Search | توسع مرن تلقائي وتكامل أصيل مع IAM والمراقبة السحابية |
🔗 أوراق غش ذات صلة: مفاهيم LLM ووكلاء الذكاء الاصطناعي · خوارزميات الذكاء الاصطناعي الحديثة · أوامر PostgreSQL · أوامر Redis · أوامر MongoDB
1. المفاهيم الأساسية ومقاييس المسافة
1.1 المصطلحات الأساسية
| المصطلح | التعريف | اعتبارات هندسية |
|---|---|---|
| Embedding (التضمين) | مصفوفة أعداد عشرية ثابتة الطول ترمز المعنى الدلالي للنص أو الصورة أو الصوت | الأبعاد الشائعة: 384 / 768 / 1024 / 1536 / 3072؛ الذاكرة والحساب ينموان خطيًا |
| ANN (أقرب جار تقريبي) | بحث مفهرس يضحي بجزء ضئيل من الاسترجاع (95%–99%) مقابل تسريع 100×–1000× | جوهر الموازنة بين زمن الاستجابة والدقة مقارنة بالمسح الدقيق k-NN |
| Metadata Filtering | تقييد البحث المتجهي عبر سمات قياسية (المستأجر، التاريخ، الصلاحيات، الفئة) | يجب التمييز بين Pre-filtering وSingle-stage / Inline وPost-filtering |
| Hybrid Search (البحث الهجين) | دمج المتجهات الكثيفة (الدلالة) مع المتجهات المتفرقة / BM25 (التطابق اللفظي) | يعالج إخفاقات الدلالة الصرفة في رموز المنتجات والأخطاء والاختصارات |
| 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، تضمينات الجمل (الافتراضي) |
| الضرب الداخلي (IP / Dot) | يعكس الزاوية والطول معًا؛ أقل تكلفة حسابية | على المتجهات المطبعة يحل محل Cosine لتوفير الجذر والقسمة | أنظمة التوصية ثنائية الأبراج، تضمينات مطبعة (مثل OpenAI) |
| المسافة الإقليدية (L₂) | المسافة الهندسية المستقيمة؛ الأصغر يعني أقرب | للمتجهات الواحدية: L₂² = 2 − 2 · cos(u, v) |
تضمينات الصور/الوجوه، التجميع المكاني، الميزات الحساسة للطول |
2. خوارزميات فهرسة ANN وتكميم المتجهات
2.1 مقارنة فهارس المتجهات
| نوع الفهرس | الآلية | استهلاك RAM | زمن الاستجابة والاسترجاع | النطاق والمحركات الممثلة |
|---|---|---|---|---|
| Flat (مسح دقيق) | حساب شامل للمسافة مع جميع المتجهات | متوسط (المتجهات الخام/المكممة فقط) | استرجاع 100%؛ يرتفع التأخير بشدة بعد ~100 ألف | البيانات الصغيرة (<100 ألف) ومعايير القياس المرجعية |
| IVF-Flat (الملف المعكوس) | تجميع K-Means إلى nlist دلوًا ومسح أقرب nprobe دلوًا |
منخفض (دون عبء الرسم البياني) | قابل للضبط عبر nprobe؛ استرجاع متوسط إلى عالٍ |
1–10 ملايين سجل مع ذاكرة محدودة (FAISS / Milvus / pgvector) |
| IVF-PQ (IVF + التكميم الضربي) | تقسيم دلاء مع ضغط الفضاءات الفرعية بكتب الرموز | منخفض جدًا (أصغر 16×–64×) | فائق السرعة؛ ينخفض الاسترجاع الأولي (يتطلب إعادة ترتيب) | +100 مليون في الذاكرة (FAISS / Milvus / LanceDB) |
| HNSW (رسم بياني هرمي) | رسم جوار متعدد الطبقات (طبقات عليا خشنة وسفلى دقيقة) | عالٍ (المتجهات + الحواف في RAM أو mmap نشط) | أجزاء من الثانية + 95%–99% استرجاع؛ المعيار الصناعي | 1–100+ مليون بحث فوري منخفض الكمون (Qdrant / Milvus / Weaviate / pgvector) |
| DiskANN (رسم Vamana) | رسم محسن لـ SSD: المتجهات المضغوطة في RAM والبيانات الكاملة على NVMe | منخفض (توفير RAM بمقدار 5×–10×) | +100 مليون للعقدة خلال أجزاء من الثانية (يعتمد على NVMe IOPS) | 100 مليون–1+ مليار مع ذاكرة محدودة (Milvus / LanceDB / Azure) |
| ScaNN | تكميم متجهي متباين الخواص + تقسيم شجري | منخفض–متوسط | أفضل منحنى استرجاع/كمون للضرب الداخلي | البحث والتوصيات واسعة النطاق (Vertex AI Vector Search / OSS) |
معاملات ضبط HNSW الرئيسية:
M(أقصى عدد روابط ثنائية الاتجاه للعقدة، عادة16–64): القيمة الأكبر تحسن الاسترجاع للأبعاد العالية على حساب RAM ووقت البناء.efConstruction(طول قائمة المرشحين أثناء البناء، عادة100–400): يؤثر في وقت البناء فقط ويرفع جودة الرسم البياني.efSearch(عرض البحث أثناء الاستعلام، يجب أن يكون ≥top_k): المعامل الوحيد القابل للتعديل لكل استعلام؛ زيادته ترفع الاسترجاع وتخفض QPS.
2.2 التكميم وتقدير الذاكرة
مرجع لـ 10 ملايين متجه × 1536 بُعدًا (FP32 خام):
الحجم الخام ≈ N × D × 4 Bytes (يضيف رسم HNSW عبء RAM بنحو 1.2×–1.5×)
| التكميم | العرض / البعد | الضغط | حجم 10M × 1536-dim | مقايضة الدقة والاستخدام |
|---|---|---|---|---|
| FP32 (غير مضغوط) | 32 بت (4 B) | 1× | ~57.2 GB | الدقة المرجعية؛ مكلف في الذاكرة المقيمة |
| FP16 / BF16 (نصف دقة) | 16 بت (2 B) | 2× | ~28.6 GB | تقريبًا بلا فقدان استرجاع (مثل pgvector halfvec)، عائد ممتاز |
| SQ8 (تكميم قياسي Int8) | 8 بت (1 B) | 4× | ~14.3 GB | يحافظ عادة على 97%+ استرجاع؛ المعيار الإنتاجي السائد |
| PQ (التكميم الضربي) | فضاءات فرعية | 16×–64× | ~1–4 GB | يتطلب تدريب codebook؛ يُدمج مع oversampling + rescore |
| BQ (تكميم ثنائي 1-bit) | 1 بت | 32× | ~1.79 GB | مسح Hamming فائق السرعة؛ يُنصح بإعادة تقييم 3×–5× (≥1024 بُعدًا) |
3. مقارنة طبقية لقواعد البيانات ومحركات البحث
3.1 قواعد البيانات المتجهة الأصلية المخصصة
| المنتج | الترخيص / النشر | اللغة ومحرك التخزين | الفهارس والميزات | الأنسب لـ |
|---|---|---|---|---|
| Qdrant | Apache 2.0 / Self-hosted & Cloud | Rust؛ ذاكرة، mmap قرصي وتكميم قرصي | HNSW + SQ8/BQ؛ متجهات متفرقة أصلية وفهرسة payload سريعة | خدمة مستقلة عالية QPS، تعدد المستأجرين، تصفية معقدة |
| Milvus | Apache 2.0 / موزع & Zilliz Cloud | طبقة تحكم Go + تنفيذ C++؛ فصل التخزين الكائني وMQ | IVF, HNSW, DiskANN, GPU CAGRA؛ تقسيم متعدد المستأجرين | منصات المؤسسات على نطاق المليارات |
| Weaviate | BSD-3-Clause (بعض إضافات المؤسسات مغلقة) | Go؛ تخزين كائنات + فهرس معكوس مدمجان | HNSW + تكميم ديناميكي/PQ/BQ؛ GraphQL/REST، وحدات تضمين | تطبيقات RAG مع خط أنابيب تضمين مدمج |
| Chroma | Apache 2.0 / مدمجة & Client-Server | نواة Python / Rust؛ SQLite + تخزين محلي أو موزع | HNSW؛ واجهة برمجة بسيطة وتكامل وثيق مع LangChain / LlamaIndex | النماذج الأولية السريعة وRAG Python صغير/متوسط |
| LanceDB | Apache 2.0 / مدمجة & Enterprise | Rust؛ تنسيق Lance العمودي وApache Arrow | IVF-PQ, HNSW, DiskANN؛ I/O صفري النسخ، وسائط متعددة أصلية | التطبيقات المحلية المدمجة، قراءة S3 بدون خادم، بحيرات البيانات |
| Pinecone | SaaS Serverless مغلق المصدر | محرك موزع مدار (تطور من Pods إلى Serverless) | فهرس مملوك مفصول؛ هجين sparse-dense، عزل Namespace | فرق السحابة الباحثة عن تشغيل صفري الصيانة |
| Turbopuffer | SaaS مغلق / BYOC | Rust؛ تخزين الكائنات (S3/GCS) كمصدر للحقيقة + ذاكرة NVMe/RAM | فهرس مركزي (بأسلوب SPFresh) يتجنب قفزات القرص العشوائية؛ نص + متجه | البيانات الضخمة الباردة/الدافئة (فهرسة الأكواد) بأقل تكلفة |
3.2 مكتبات البحث المتجهي (ليست قواعد بيانات كاملة)
| المنتج | الترخيص | النطاق والحدود | الاستخدامات |
|---|---|---|---|
| FAISS (Meta) | MIT | مكتبة تشابه C++ / Python (بلا حفظ بيانات وصفية، معاملات موزعة أو خادم مصادقة)؛ CPU SIMD وGPU متعدد | الحساب الدفعي غير المتصل، أبحاث التعلم الآلي، نواة مدمجة في محركات خاصة |
3.3 إضافات القواعد التقليدية ومحركات البحث
| المنتج | الأساس | قدرات المتجهات | المزايا والقيود |
|---|---|---|---|
| pgvector | إضافة PostgreSQL (تشمل Supabase) | أنواع vector / halfvec / sparsevec / bit؛ HNSW وIVFFlat |
المزايا: ACID وSQL JOIN وصفر تشغيل إضافي؛ القيود: تضخم الكتابة وضغط RAM فوق ~10–50 مليون سجل |
| Elasticsearch / OpenSearch | فهرس Lucene المعكوس + HNSW | هجين أصيل Dense Vector + BM25، دمج RRF، تصفية متداخلة | المزايا: يعيد توظيف فرق البحث القائمة؛ القيود: استهلاك مرتفع لـ JVM off-heap RAM ودمج المقاطع |
| Redis (Query Engine) | مخزن KV في الذاكرة | Flat وHNSW، كمون دون المللي ثانية، تحديثات فورية | المزايا: مثالي للتخزين المؤقت الدلالي ومخازن الميزات؛ القيود: تكلفة RAM مرتفعة عند التوسع |
| MongoDB Atlas Search | قاعدة مستندات (Atlas / Local CLI) | HNSW مبني على Lucene بجانب مستندات BSON | المزايا: يلغي الكتابة المزدوجة للمستندات والمتجهات؛ القيود: ارتباط وثيق بمنصة Atlas |
| SingleStore | قاعدة SQL HTAP موزعة | SQL + عمليات متجهية أصلية (dot / L₂)، عمودي + صفي | أعباء المؤسسات التي تجمع التحليلات اللحظية والمعاملات |
| Vespa | محرك بيانات ضخمة Apache 2.0 | HNSW + هجين دقيق/تقريبي، ترتيب ML متعدد المراحل (Tensor/XGBoost/ONNX) | منصات بحث وتوصية عملاقة؛ منحنى تعلم وتشغيل أعلى |
3.4 الخدمات السحابية المدارة بالكامل
| الخدمة | المزود السحابي | البنية والمميزات |
|---|---|---|
| Vertex AI Vector Search (سابقًا Matching Engine) | Google Cloud (GCP) | يعتمد على ScaNN؛ تحديثات بثية بمقياس المليارات وهجين sparse-dense |
| Amazon OpenSearch Serverless / Aurora pgvector | AWS | عناقيد بحث بلا خادم وإضافات RDS/Aurora بتكامل أصيل مع Amazon Bedrock |
| Azure AI Search | Microsoft Azure | Semantic Ranker مدمج، خطوط تضمين وصلاحيات RBAC على مستوى المستند |
4. استراتيجيات التصفية والبحث الهجين
4.1 أوضاع تنفيذ تصفية البيانات الوصفية
| الاستراتيجية | ترتيب التنفيذ | الخطر والمعالجة الهندسية |
|---|---|---|
| Pre-filtering | تقييم الفهرس القياسي لإنتاج خريطة بت للمعرفات ثم البحث المتجهي | عند الشروط الصارمة (<1%) يتفكك الرسم البياني؛ الحل: الرجوع التلقائي للمسح الدقيق |
| Post-filtering | جلب أعلى K متجهًا عالميًا ثم استبعاد العناصر غير المطابقة | قد يُرجع أقل من K نتائج (أو صفرًا)؛ الحل: عدم استخدامه وحده دون oversampling كبير |
| Single-stage / Inline | فحص خريطة بت التصفية ديناميكيًا عند كل خطوة في رسم HNSW | المعيار الحديث (Qdrant / Milvus / Weaviate / pgvector 0.8+ iterative scan) لموازنة الدقة والسرعة |
4.2 دمج الترتيب العكسي (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