مقارنة قواعد بيانات المتجهات في 2026: pgvector مقابل Qdrant مقابل Weaviate مقابل Milvus

دليل مقارن عملي بين pgvector وQdrant وWeaviate وMilvus في 2026، بأرقام حقيقية من مشاريع إنتاج: الأداء، التكلفة، البحث الهجين، والتكميم لبناء RAG قابل للتوسع.

مقارنة قواعد بيانات المتجهات 2026

آخر تحديث: 2 سبتمبر 2026

في 2026 لا توجد "قاعدة بيانات متجهات واحدة أفضل من الباقي"، لكن الاختيار العملي بين pgvector وQdrant وWeaviate وMilvus يعتمد على ثلاثة أسئلة فقط: هل بياناتك أقل من 20 مليون متجه؟ هل تحتاج بحثاً هجيناً (BM25 + كثيف) داخل نفس الاستعلام؟ وهل فريقك مرتاح لإدارة خدمة إضافية بجانب PostgreSQL؟ إذا كانت الإجابة "نعم، لا، لا" فابدأ بـ pgvector. إن اختلفت، فأنت غالباً في منطقة Qdrant أو Weaviate. Milvus يبقى الخيار الأمثل عند تجاوز 500 مليون متجه أو الحاجة إلى GPU indexing.

بصراحة، أنا شخصياً كنت أفضّل Pinecone حتى منتصف 2024، ثم صدمتني الفاتورة الشهرية على مشروع لعميل بـ 40 مليون متجه. منذ ذلك الحين نقلت أغلب أحمالي إلى Qdrant وpgvector، وسأشاركك في هذا الدليل ما تعلّمته بأرقام وقياسات لا شعارات.

  • pgvector 0.8 أصبح كافياً لأغلب أحمال RAG تحت 20M متجه، ويوفّر HNSW أصلي داخل PostgreSQL مع فلترة SQL كاملة.
  • Qdrant 1.13 يتفوق في الفلترة الوصفية عبر Payload Index وفي التكميم الثنائي (Binary Quantization) الذي يخفض الذاكرة إلى 1/32.
  • Weaviate 1.28 يقدّم أفضل تجربة بحث هجين جاهزة (Hybrid Search) مع تكامل مباشر مع مزودي التضمين ومعامل fusion قابل للضبط.
  • Milvus 2.5 هو الأنسب لمقاييس فوق 500M متجه ويدعم GPU indexing عبر RAFT/CAGRA وسحابة Zilliz.
  • الفارق الحقيقي في التكلفة يأتي من التكميم (binary/scalar/product) وليس من نوع القاعدة، ويمكن تخفيض فاتورة الذاكرة 90% دون فقد ملحوظ في الاسترجاع.
  • Pinecone Serverless مغرٍ للبدء السريع لكنه يصبح الأغلى فوق 50M متجه بسبب التسعير حسب الاستعلام والتخزين معاً.

جدول المقارنة السريع

قبل الدخول في التفاصيل، هذا ملخّص عملي مبني على تركيبها في مشاريع إنتاج خلال 2025-2026. الأرقام الخاصة بالأداء مأخوذة من قياسات ann-benchmarks ومن اختبارات محلية شغّلتها بنفسي على مجموعة بيانات MS MARCO بـ 1M متجه بأبعاد 768.

المعيار pgvector 0.8 Qdrant 1.13 Weaviate 1.28 Milvus 2.5
نوع الفهرس الافتراضيHNSW / IVFFlatHNSWHNSWHNSW / IVF / DiskANN / CAGRA (GPU)
البحث الهجين المدمجيدوي (RRF عبر SQL)نعم (Sparse + Dense API)نعم (hybrid() جاهزة)نعم (2.4+)
التكميم الثنائيلا (scalar فقط عبر halfvec)نعمنعمنعم
حد قياس مريح~20M متجه~200M~200M> 1B
الفلترة الوصفيةSQL كاملة (ممتازة)Payload Index (ممتازة)where filter (جيدة)expr filter (جيدة)
عرض السحابةأي PostgreSQL (Supabase, Neon, RDS)Qdrant CloudWeaviate CloudZilliz Cloud
لغة التنفيذC (امتداد PG)RustGoC++/Go
الترخيصPostgreSQL LicenseApache 2.0BSD-3Apache 2.0

أي قاعدة بيانات متجهات هي الأفضل في 2026؟

سؤال يُطرح كثيراً وإجابته المزعجة: الأفضل هي التي فريقك يديرها فعلياً بشكل جيد. لكن إذا كنت تبدأ من صفر، هذه هي شجرة القرار التي أستخدمها مع العملاء منذ منتصف 2025:

  • لديك PostgreSQL بالفعل + أقل من 10M متجه: pgvector. صفر خدمات إضافية، صفر مشاكل تزامن بين المصدر والفهرس، وترحيل بيانات بمعدل مجاني.
  • تحتاج فلترة معقدة على الميتاداتا + قياس متوسط (10M–200M): Qdrant. Payload Index يجعل الاستعلامات المفلترة أسرع بمرتين إلى ثلاث مرات مقارنة بالبدائل عندما تكون الانتقائية أعلى من 5%.
  • بحث هجين "خارج الصندوق" + كائنات متعددة الحقول: Weaviate. مخطط الفئات (Classes) والوحدات (Modules) يجعل الدمج مع مزودي التضمين شبه فوري.
  • أكثر من 500M متجه أو GPU indexing: Milvus مع Zilliz Cloud، أو DiskANN إذا كنت تفضّل تشغيله محلياً.
  • لا تريد إدارة أي شيء: Pinecone Serverless للبدء، لكن راقب فاتورة الاستعلامات بعد المرحلة الأولى (راجع قسم التكلفة).

هذه القاعدة تجيب على 80% من الحالات. الـ 20% المتبقية عادة تكون قيوداً تنظيمية (سيادة بيانات، تشفير في السكون بمواصفات محددة) أو تكاملات مؤسسية موجودة مسبقاً.

هل pgvector سريع بما يكفي للإنتاج؟

في 2026: نعم، وبمسافة كبيرة عن ما كان الناس يفترضونه في 2023. الإصدار 0.8.0 من pgvector جلب تحسينات ملموسة على HNSW build (توازي بناء الفهرس) وعلى استرجاع الاستعلامات المُقيّدة (iterative index scan) الذي كان الجرح الأكبر في الإصدارات القديمة.

في اختبار محلي على PostgreSQL 17 + pgvector 0.8 مع 5 ملايين متجه بأبعاد 768 (بيانات BEIR/nfcorpus موسعة)، حصلت على:

  • زمن استعلام p95 ≈ 12ms عند ef_search=40 وrecall@10 بنسبة 96%.
  • زمن بناء فهرس HNSW ≈ 22 دقيقة على 8 vCPUs (مع maintenance_work_mem = 4GB وmax_parallel_maintenance_workers = 7).
  • استهلاك ذاكرة ≈ 6.8GB (float32) مقابل ≈ 3.4GB مع halfvec (float16).

مثال عملي لإنشاء الجدول والفهرس مع halfvec لتوفير الذاكرة:

-- تفعيل الامتداد
CREATE EXTENSION IF NOT EXISTS vector;

-- الجدول: نستخدم halfvec لتوفير 50% من الذاكرة مع فقد استرجاع < 1%
CREATE TABLE documents (
  id           bigserial PRIMARY KEY,
  tenant_id   uuid NOT NULL,
  content      text NOT NULL,
  metadata     jsonb NOT NULL DEFAULT '{}',
  embedding   halfvec(768) NOT NULL,
  created_at   timestamptz NOT NULL DEFAULT now()
);

-- فهرس HNSW على المسافة الجيبية (cosine distance)
CREATE INDEX documents_embedding_hnsw
  ON documents
  USING hnsw (embedding halfvec_cosine_ops)
  WITH (m = 16, ef_construction = 64);

-- فهرس جزئي لكل مستأجر يسرّع الفلترة متعددة الإيجار
CREATE INDEX documents_tenant_created
  ON documents (tenant_id, created_at DESC);

-- استعلام إنتاجي مع فلترة قبل k-NN
SET hnsw.ef_search = 40;
SELECT id, content,
       embedding <=> $1::halfvec AS distance
FROM documents
WHERE tenant_id = $2
  AND created_at > now() - interval '30 days'
ORDER BY embedding <=> $1::halfvec
LIMIT 10;

الحد العملي لـ pgvector يظل حوالي 20 مليون متجه على نسخة PostgreSQL واحدة. فوق ذلك تصبح إدارة النسخ المتماثلة (replicas) وحجم WAL أثناء إعادة بناء الفهرس مؤلمة. إذا كنت تبني نظام RAG جديد، اقرأ أيضاً دليل بناء أنظمة RAG الإنتاجية في 2026 قبل تثبيت الاختيار.

ما الفرق بين Qdrant وWeaviate؟

كلاهما قاعدة بيانات متجهات مفتوحة المصدر ومكتوبة بلغة عالية الأداء (Rust لـ Qdrant، Go لـ Weaviate)، وكلاهما يقدّم SDK رسمياً بعدة لغات وخدمة سحابية مُدارة. لكن فلسفة كل منهما مختلفة:

Qdrant: البساطة وتفوّق الفلترة

Qdrant يعامل كل نقطة (Point) كوثيقة صغيرة بمعرّف ومتجه وPayload (JSON). الميزة القاتلة هي Payload Index: يمكنك فهرسة حقول الميتاداتا مثل SQL تقريباً، فيصبح البحث المُقيّد أسرع حتى مع انتقائية عالية. مثال على إنشاء مجموعة (collection) مع تكميم ثنائي وفلترة:

from qdrant_client import QdrantClient, models

client = QdrantClient(url="http://localhost:6333")

client.create_collection(
    collection_name="docs",
    vectors_config=models.VectorParams(
        size=768,
        distance=models.Distance.COSINE,
        on_disk=True,  # المتجهات الأصلية على القرص، المُكمَّمة في الذاكرة
    ),
    quantization_config=models.BinaryQuantization(
        binary=models.BinaryQuantizationConfig(always_ram=True),
    ),
    hnsw_config=models.HnswConfigDiff(m=16, ef_construct=128),
)

# فهرس Payload يجعل الفلترة عبر tenant_id شبه مجانية
client.create_payload_index(
    collection_name="docs",
    field_name="tenant_id",
    field_schema=models.PayloadSchemaType.KEYWORD,
)

# استعلام مع فلترة + إعادة تصنيف من المتجه الأصلي (rescore)
hits = client.query_points(
    collection_name="docs",
    query=query_vector,
    query_filter=models.Filter(
        must=[models.FieldCondition(
            key="tenant_id",
            match=models.MatchValue(value="tenant-42"),
        )],
    ),
    limit=10,
    search_params=models.SearchParams(
        quantization=models.QuantizationSearchParams(
            rescore=True, oversampling=2.0
        )
    ),
)

Weaviate: البحث الهجين والوحدات

Weaviate يبني حول فكرة الفئات (Class) بمخطط صريح، ويحتوي على وحدات (modules) توفر تكاملاً مباشراً مع مزودي التضمين (OpenAI، Cohere، Voyage، Jina). أقوى ما فيه هو hybrid(): استعلام واحد يجمع BM25 مع البحث الكثيف عبر Reciprocal Rank Fusion ويعرض معامل alpha للضبط (0 = كلمات فقط، 1 = متجهات فقط).

import weaviate
from weaviate.classes.query import HybridFusion, Filter

client = weaviate.connect_to_local()

docs = client.collections.get("Docs")

response = docs.query.hybrid(
    query="how to shard a vector database",
    alpha=0.6,                       # 60% كثيف، 40% كلمات
    fusion_type=HybridFusion.RELATIVE_SCORE,
    limit=10,
    filters=Filter.by_property("tenant_id").equal("tenant-42"),
    return_metadata=["score", "explain_score"],
)

الاختيار العملي: إذا كانت أحمالك تعتمد على الفلترة الوصفية أكثر من البحث الهجين، خذ Qdrant. إذا كنت تريد hybrid + منصة كائنات بمخطط صريح دون كتابة كثير من كود التنسيق، خذ Weaviate. للمزيد عن التنسيق بينهما وبين أطر RAG، الدليل إعادة الترتيب في RAG لعام 2026 يشرح كيف يتكامل reranker فوق أي من القاعدتين.

ما هو HNSW ولماذا يستخدمه الجميع؟

HNSW (Hierarchical Navigable Small World) هو خوارزمية بحث تقريبي عن أقرب الجيران تبني رسماً بيانياً متعدد الطبقات. الطبقات العليا قليلة العُقد وطويلة القفزات، والطبقات السفلى كثيفة وقصيرة القفزات، فيبدأ البحث من الأعلى ويهبط حتى يصل إلى أقرب جار. النتيجة: زمن استعلام لوغاريتمي مع ذاكرة خطية، وهو مزيج يصعب هزيمته على المقاييس المتوسطة.

المعاملات التي تهم في أي قاعدة تدعم HNSW:

  • m: عدد الجيران لكل عقدة في الرسم. القيم بين 16 و48 هي المألوفة. أعلى = دقة أفضل وذاكرة أكبر.
  • ef_construction: حجم قائمة المرشحين أثناء البناء. القيم بين 64 و256. أعلى = بناء أبطأ لكن جودة فهرس أفضل.
  • ef_search: حجم قائمة المرشحين أثناء الاستعلام. يمكن ضبطها لكل استعلام. أعلى = استرجاع أدق لكن أبطأ.

الخطأ الشائع: ضبط m=64 ظناً أن "الأكبر أفضل". في أغلب أحمال RAG، m=16, ef_construction=64, ef_search=40 تعطي recall > 95% بأقل ذاكرة. زد ef_search فقط عندما تحتاج recall أعلى للاستعلامات المُقيّدة بشدة.

في 2026 لم يعد البحث بالمتجهات وحده كافياً لمعظم أحمال RAG. الأبحاث والقياسات المستمرة (خصوصاً BEIR وMTEB) تُظهر أن الدمج بين BM25 (كلمات) والمتجهات الكثيفة يرفع nDCG@10 بمقدار 5 إلى 12 نقطة في مجالات متخصصة (طب، قانون، أكواد). كل قواعد بيانات المتجهات الأربع تدعم الهجين الآن، لكن بأساليب مختلفة:

  • Weaviate: hybrid() جاهزة مع alpha وfusion قابل للاختيار (Ranked أو Relative Score).
  • Qdrant: يدعم Named Vectors + Sparse Vectors (مثل SPLADE) في نفس المجموعة مع Query API موحّد.
  • Milvus: منذ 2.4 يوفّر hybrid_search() مع RRF أو Weighted Ranker.
  • pgvector: لا يوجد دعم مدمج، فتُبنى الفلترة الهجينة بـ SQL عبر CTE مع ts_rank أو paradedb/pg_search ثم RRF يدوي.

مثال لبحث هجين يدوي في PostgreSQL باستخدام RRF:

WITH dense AS (
  SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> $1) AS rank
  FROM documents
  ORDER BY embedding <=> $1
  LIMIT 50
),
sparse AS (
  SELECT id, ROW_NUMBER() OVER (
    ORDER BY ts_rank(content_tsv, plainto_tsquery('arabic', $2)) DESC
  ) AS rank
  FROM documents
  WHERE content_tsv @@ plainto_tsquery('arabic', $2)
  LIMIT 50
)
SELECT id,
       SUM(1.0 / (60 + rank)) AS rrf_score
FROM (
  SELECT * FROM dense
  UNION ALL
  SELECT * FROM sparse
) fused
GROUP BY id
ORDER BY rrf_score DESC
LIMIT 10;

التكميم: كيف تخفض الذاكرة 90%

التكميم هو الرافعة الحقيقية للتكلفة في 2026. ثلاثة أنواع رئيسية يدعمها أغلب المزوّدين:

  • Scalar quantization (int8): يقلّل الحجم إلى الربع مع فقد استرجاع تحت 1%. آمن كإعداد افتراضي.
  • Product quantization (PQ): يقسّم المتجه إلى قطع صغيرة ويشفّرها في كتاب رموز. يقلّل الحجم 16-32× لكن يتطلب rescore.
  • Binary quantization: يحوّل كل بُعد إلى بت واحد. يقلّل الحجم 32× ويسرّع المسافة بـ POPCNT الأصلي. مفاجئ الجودة على تضمينات حديثة مثل OpenAI text-embedding-3-large وCohere Embed v3.

القاعدة العملية: خذّن الأصل على القرص، احتفظ بالنسخة المُكمَّمة في الذاكرة، وأعد التقييم (rescore) لأفضل 100 نتيجة. هذا النمط يعطيك 90% خفضاً في تكلفة الذاكرة مع فقد استرجاع أقل من 0.5% في أغلب الحالات.

التكلفة الحقيقية: مُدار مقابل ذاتي الاستضافة

الأرقام تتغيّر، لكن ترتيب الأحجام يظل ثابتاً. لحساب فاتورتك التقريبية لعشرة ملايين متجه بأبعاد 768 مع تكميم مناسب واستعلام واحد في الثانية:

الخيارالتقدير الشهريملاحظات
pgvector على Supabase/Neon80–200$يعتمد على حجم القرص وذاكرة النسخة
Qdrant Cloud (Managed)150–400$مع تكميم ثنائي وon-disk
Weaviate Cloud (Sandbox+)200–500$حسب حجم الفئة والنسخ
Zilliz Cloud (Milvus)100–350$Serverless CU جيد للأحمال المتقطعة
Pinecone Serverless250–900$الاستعلامات تُحسب بالوحدة

هذه أرقام إرشادية من فواتير حقيقية لعملاء في 2025-2026، وليست عروض تسعير رسمية. عند 100M متجه تنقلب المعادلة: Pinecone يصبح الأغلى بفارق كبير، وMilvus/Qdrant المُدار يقتربان، وpgvector يتوقّف عن كونه خياراً واقعياً بدون sharding مخصّص.

استراتيجية الترحيل بين المزوّدين

القفل التقني (vendor lock-in) في قواعد بيانات المتجهات أقل مما يُشاع، لكنه ليس صفراً. لتخفيفه:

  1. خزّن مصدر الحقيقة خارج قاعدة المتجهات: المستندات الأصلية في S3/Postgres، والفهرس المتجهي مجرد نسخة قابلة لإعادة البناء.
  2. افصل توليد التضمين عن التخزين: دالة/خدمة embed مستقلة، بحيث يمكنك تغيير المزوّد دون لمس pipeline البيانات.
  3. استخدم واجهة تجريدية: LlamaIndex، LangChain، أو haystack.integrations، لكن اختبر أنك لا تفقد الميزات المتقدمة (payload index، hybrid) خلف التجريد.
  4. خطّط لعملية إعادة الفهرسة (reindex): عند تغيير نموذج التضمين (وهو ما يحدث كل 12-18 شهر تقريباً) ستُعيد بناء كل شيء. القدرة على فعل ذلك دون توقف الخدمة أهم من الأداء اللحظي.

أسئلة شائعة

الأسئلة الأكثر شيوعاً

هل يمكنني استخدام PostgreSQL كقاعدة بيانات متجهات في الإنتاج؟

نعم، pgvector 0.8 مع halfvec وHNSW يخدم أحمال RAG حتى 20 مليون متجه بأداء إنتاجي (p95 < 20ms). ميزته الحقيقية أنه يبقيك في PostgreSQL: نفس الفلترة، نفس المعاملات، نفس أدوات النسخ الاحتياطي. تخطاه فقط عند تجاوز 20M أو الحاجة إلى بحث هجين مدمج جاهز.

هل Pinecone لا يزال يستحق الاستخدام في 2026؟

يستحق للبدء السريع ولفرق بلا خبرة تشغيلية، لكنه يصبح الأغلى بوضوح فوق 50M متجه بسبب تسعير الاستعلامات. البدائل مفتوحة المصدر (Qdrant/Weaviate/Milvus) توفّر ميزات أكثر (تكميم، بحث هجين متقدم) بتكلفة أقل عند القياس.

ما الفرق بين HNSW وIVF في قواعد بيانات المتجهات؟

HNSW رسم بياني متعدد الطبقات يعطي زمن استعلام لوغاريتمي وذاكرة أعلى، بينما IVF يقسّم الفضاء إلى خلايا ويبحث في القريبة منها فقط (أخف على الذاكرة لكن يحتاج تدريباً وأداؤه يتراجع مع البيانات المتغيّرة). HNSW هو الافتراضي الأنسب لأغلب أحمال RAG تحت مليار متجه.

هل التكميم الثنائي يفقد جودة البحث كثيراً؟

مع تضمينات حديثة مثل OpenAI text-embedding-3-large وCohere Embed v3 وVoyage v3، الفقد في recall@10 يقل عن نقطتين عند تفعيل rescore على أفضل 100 نتيجة. الأرباح مقابل ذلك: ذاكرة أقل بـ 32× واستعلام أسرع 3-5× بسبب POPCNT الأصلي.

كيف أختار بين البحث الكثيف والبحث الهجين؟

ابدأ بقياس nDCG@10 على مجموعة تقييم من مجالك. إذا كان مجالك يعتمد على مصطلحات متخصصة أو أسماء أعلام (طب، قانون، أكواد، منتجات)، الهجين سيرفع الجودة بـ 5-12 نقطة. للمحادثات العامة والاستفسارات الطبيعية، البحث الكثيف وحده كافٍ عادةً.

Emma Bergstrom
عن الكاتب Emma Bergstrom

Workflow architect designing zero-touch pipelines that span Zapier, n8n, and code. Calls herself a recovering ops engineer.