اختيار مخازن المتجهات وقياس أدائها
قارنوا بين Pinecone وpgvector وChroma وWeaviate وQdrant من حيث التكلفة وزمن الاستجابة وإمكانات التصفية والتعقيد التشغيلي لاختيار الأداة المناسبة لحالة الاستخدام الخاصة بكم.
اختيار مخازن المتجهات وقياس أدائها درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
مشهد مخازن المتجهات
شهد النظام البيئي لـقواعد بيانات المتجهات توسعًا هائلًا خلال السنوات القليلة الماضية. وتتراوح الخيارات بين الخدمات السحابية المصممة خصيصًا لهذا الغرض مثل Pinecone، وامتدادات PostgreSQL مثل pgvector، والخوادم مفتوحة المصدر مثل Chroma وQdrant وWeaviate، والمكتبات الموجودة في الذاكرة مثل FAISS. ويهم اختيار الأداة المناسبة لأن الانتقال لاحقًا يصبح مكلفًا بعد فهرسة بياناتك.
الأبعاد الأساسية للتقييم
عند مقارنة مخازن المتجهات، قيّم خمسة أبعاد: زمن استجابة الاستعلام عند النطاق المستهدف، ومعدل إنجاز الفهرسة للإدخال على دفعات، وإمكانات التصفية للتصفية المسبقة المستندة إلى البيانات الوصفية، والتعقيد التشغيلي (مُدار مقابل مستضاف ذاتيًا)، والتكلفة لكل مليون متجه مخزّن ومستعلَم عنه. لا تتفوق أداة واحدة في جميع الأبعاد.
Pinecone: بساطة الإدارة
Pinecone قاعدة بيانات متجهات سحابية مُدارة بالكامل ولا تتطلب أي إدارة للبنية التحتية. وتتفوق في أحمال العمل عالية التزامن، وتوفّر بحثًا هجينًا أصليًا يجمع بين المتجهات المتناثرة والكثيفة، كما تقدم استعلامات ثابتة بزمن من خانة واحدة بالمللي ثانية مهما كان النطاق. أما المفاضلة فهي التكلفة؛ إذ إنها أعلى تكلفة من الخيارات المستضافة ذاتيًا، كما ينشأ ارتباط بالمورّد لأن جميع البيانات موجودة في سحابة Pinecone.
import pinecone
pc = pinecone.Pinecone(api_key='YOUR_API_KEY')
index = pc.Index('my-index')
# Query with metadata filter
results = index.query(
vector=[0.1, 0.2, 0.3],
top_k=10,
filter={'category': {'$eq': 'finance'}},
include_metadata=True
)pgvector: التضمينات في PostgreSQL
pgvector يوسّع PostgreSQL بإضافة نوع بيانات vector وفهارس تقريبية لأقرب الجيران (ANN) باستخدام خوارزميتي HNSW أو IVFFlat. وهو مثالي عندما تكون PostgreSQL قيد التشغيل لديك بالفعل، لأن تضميناتك ستعيش في قاعدة البيانات نفسها التي تحتوي على بياناتك العلائقية، ما يتيح عمليات ربط SQL قوية بين البحث بالمتجهات وعوامل التصفية المهيكلة من دون بنية تحتية إضافية.
-- Create table with embedding column
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
content TEXT,
category TEXT,
embedding vector(1536)
);
-- Create HNSW index for fast ANN search
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- Query nearest neighbors with SQL filter
SELECT content, 1 - (embedding <=> '[0.1,0.2,...]')
FROM documents
WHERE category = 'finance'
ORDER BY embedding <=> '[0.1,0.2,...]'
LIMIT 10;Chroma: ملائم للمطورين ومحلي أولًا
Chroma قاعدة بيانات تضمينات مفتوحة المصدر مصممة لإجراء النماذج الأولية بسرعة. تعمل داخل العملية أثناء التطوير المحلي (من دون الحاجة إلى خادم)، وتدعم وضع الخادم الدائم للاستخدام الإنتاجي. تحظى Chroma بشعبية في دروس LangChain بفضل واجهتها البرمجية شديدة البساطة، لكنها تفرض قيودًا عند التوسع: فلا تدعم الوضع الموزع، كما أن إمكانات التصفية فيها أضعف من Pinecone أو Qdrant.
import chromadb
client = chromadb.PersistentClient(path='./chroma_db')
collection = client.get_or_create_collection('my_docs')
# Add documents
collection.add(
documents=['text one', 'text two'],
metadatas=[{'source': 'doc1'}, {'source': 'doc2'}],
ids=['id1', 'id2']
)
# Query
results = collection.query(
query_texts=['search query'],
n_results=5
)Qdrant: التصفية والبحث في الحمولة
Qdrant قاعدة بيانات متجهات مفتوحة المصدر مكتوبة بلغة Rust، وتتميز بالتعامل مع تصفية البيانات الوصفية المعقدة. فعلى خلاف قواعد البيانات التي تطبق عوامل التصفية بعد بحث ANN، تُجري Qdrant تصفية مسبقة للمتجهات المرشحة حسب حقول الحمولة قبل احتساب الدرجات، ما يحسن الدقة بدرجة كبيرة عندما تكون عوامل التصفية انتقائية. كما تدعم فهارس HNSW على القرص، ما يجعلها مناسبة لمجموعات البيانات التي لا تتسع لها ذاكرة RAM.
from qdrant_client import QdrantClient
from qdrant_client.models import Filter, FieldCondition, MatchValue
client = QdrantClient(url='http://localhost:6333')
# Search with payload filter
results = client.search(
collection_name='documents',
query_vector=[0.1, 0.2, 0.3],
query_filter=Filter(
must=[
FieldCondition(
key='category',
match=MatchValue(value='finance')
)
]
),
limit=10
)Weaviate: GraphQL ومتعدد الوسائط
Weaviate قاعدة بيانات متجهات مفتوحة المصدر تتميز بواجهة GraphQL API فريدة ودعم مدمج للكائنات متعددة الوسائط (النصوص والصور والصوت). وتتكامل مباشرةً مع موفّري نماذج التضمين عبر الوحدات، بحيث يمكنك إدخال النص الخام وترك Weaviate يستدعي واجهة التضمين تلقائيًا. لكن هذه السهولة تأتي على حساب إعداد أكثر تعقيدًا مقارنةً بـ Chroma أو Qdrant.
import weaviate
client = weaviate.Client('http://localhost:8080')
# Near-text search using built-in vectorizer
result = client.query.get(
'Document', ['content', 'category']
).with_near_text(
{'concepts': ['financial analysis']}
).with_where({
'path': ['category'],
'operator': 'Equal',
'valueString': 'finance'
}).with_limit(10).do()FAISS: داخل الذاكرة على نطاق واسع
FAISS (Facebook AI Similarity Search) مكتبة C++ مع روابط Python، وتوفّر بحثًا متجهيًا سريعًا جدًا داخل الذاكرة. وهي ليست قاعدة بيانات (فلا توفر استمرارية أو خادمًا)، لكنها تتعامل مع بحث التشابه على نطاق مليارات المتجهات على جهاز واحد مع تسريع GPU. ويُعد FAISS الخيار المناسب لأحمال عمل البحث المجمّع غير المتصل بالإنترنت، والتي تتحكم فيها في كامل الحزمة البرمجية.
import faiss
import numpy as np
dimension = 1536
vectors = np.random.random((100000, dimension)).astype('float32')
# Normalize for cosine similarity
faiss.normalize_L2(vectors)
# Build HNSW index
index = faiss.IndexHNSWFlat(dimension, 32) # M=32 neighbors
index.add(vectors)
# Search
query = np.random.random((1, dimension)).astype('float32')
faiss.normalize_L2(query)
D, I = index.search(query, k=10) # top-10 resultsإنشاء اختبار معياري
الطريقة الوحيدة للاختيار بثقة هي إجراء اختبار معياري على بياناتك الخاصة. ويقيس الاختبار الجيد: (1) وقت فهرسة مجموعة بياناتك كاملة، (2) زمن استجابة الاستعلام عند النسب المئوية p50 وp95 وp99 تحت حمل متزامن، (3) recall@K من خلال مقارنة نتائج ANN بالنتائج الدقيقة بالقوة الغاشمة، و(4) الذاكرة والتكلفة عند النطاق المستهدف. نفّذ الاستعلامات نفسها على كل مخزن مرشح.
import time
import numpy as np
def benchmark_store(store, queries, k=10):
latencies = []
for q in queries:
start = time.perf_counter()
store.search(q, k)
latencies.append(time.perf_counter() - start)
latencies.sort()
n = len(latencies)
print(f'p50: {latencies[n//2]*1000:.1f}ms')
print(f'p95: {latencies[int(n*0.95)]*1000:.1f}ms')
print(f'p99: {latencies[int(n*0.99)]*1000:.1f}ms')قياس المفاضلة بين الاسترجاع وزمن الاستجابة
تستبدل فهارس ANN جزءًا من الاسترجاع بالسرعة. فكلما زادت قيمة المعلمة ef_search في HNSW، عُثر على جيران أكثر دقة، لكن ذلك يستغرق وقتًا أطول. قِس recall@10 (نسبة أفضل 10 جيران حقيقيين التي أُعيدت) عند إعدادات مختلفة للمعلمات، وارسم الاسترجاع مقابل زمن الاستجابة. تستهدف معظم أنظمة الإنتاج استرجاعًا بنسبة 95-99%. ويعني الانخفاض إلى أقل من 90% أن المستخدمين سيحصلون على مقاطع غير ذات صلة حتى لو كانت الاستعلامات سريعة.
def compute_recall(approx_ids, exact_ids):
'''Compute recall@K for one query'''
return len(set(approx_ids) & set(exact_ids)) / len(exact_ids)
def benchmark_recall(index, brute_force, queries, k=10):
recalls = []
for q in queries:
approx = index.search(q, k)
exact = brute_force.search(q, k)
recalls.append(compute_recall(approx, exact))
print(f'Mean recall@{k}: {sum(recalls)/len(recalls):.3f}')إطار عمل لاتخاذ القرار
استخدم شجرة القرار التالية: إذا كنت تحتاج إلى عدم إدارة البنية التحتية مطلقًا ولم تكن الميزانية قيدًا، فاختر Pinecone. إذا كانت PostgreSQL قيد التشغيل لديك بالفعل وكانت مجموعة بياناتك تضم أقل من 10 ملايين متجه، فأضف pgvector. وللاستضافة الذاتية مفتوحة المصدر مع تصفية معقدة للحمولة، اختر Qdrant. ولإنشاء النماذج الأولية بسرعة والتطوير المحلي، ابدأ باستخدام Chroma ثم انتقل لاحقًا. وللمهام المجمعة غير المتصلة بالإنترنت على نطاق مليارات المتجهات، استخدم FAISS.
تحقق سريع
اختبر مدى فهمك لمفاهيم هندسة الذكاء الاصطناعي التي تناولها هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس مشهد مخازن المتجهات، بما في ذلك Pinecone وpgvector وChroma وQdrant وWeaviate وFAISS، وأبعاد التقييم الخمسة، وهي زمن الاستجابة ومعدل الإنجاز والتصفية والتعقيد والتكلفة، وإطارًا عمليًا لاتخاذ القرار لاختيار المخزن المناسب استنادًا إلى متطلبات بنيتك التحتية ونطاقك. بعد ذلك سنستكشف المشكلة التي ابتُكر RAG لحلها.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «اختيار مخازن المتجهات وقياس أدائها» مجاني؟
نعم — نص درس «اختيار مخازن المتجهات وقياس أدائها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
ماذا ستتعلم في «اختيار مخازن المتجهات وقياس أدائها»؟
قارنوا بين Pinecone وpgvector وChroma وWeaviate وQdrant من حيث التكلفة وزمن الاستجابة وإمكانات التصفية والتعقيد التشغيلي لاختيار الأداة المناسبة لحالة الاستخدام الخاصة بكم. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟
لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «اختيار مخازن المتجهات وقياس أدائها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟
نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا تحتاجون إلى قاعدة بيانات متجهية
- البدء باستخدام Pinecone
- pgvector: Embeddings في PostgreSQL
- اختيار مخازن المتجهات وقياس أدائها