مرجع سريع

قواعد البيانات المتجهة وهندسة الاسترجاع: ورقة غش شاملة (المفاهيم، الفهرسة، التكميم والاختيار)

مرجع مكثف لقواعد البيانات المتجهة والبحث الدلالي: مقاييس المسافة، خوارزميات فهرسة ANN (HNSW/IVF/DiskANN/ScaNN)، حساب الذاكرة مع التكميم، التصفية المدمجة، دمج RRF، ومقارنة طبقية بين قواعد المتجهات الأصلية والإضافات والخدمات السحابية.

· تاريخ النشر

تُخزّن قاعدة البيانات المتجهة (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

موضوعات ذات صلة