Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
28 KiB
| layout | title | parent |
|---|---|---|
| default | مواصفات فنية لإدارة المجموعات | Arabic (Beta) |
مواصفات فنية لإدارة المجموعات
Beta Translation: This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
نظرة عامة
تصف هذه المواصفات إمكانات إدارة المجموعات لـ TrustGraph، والتي تتطلب إنشاء مجموعات بشكل صريح وتوفر تحكمًا مباشرًا في دورة حياة المجموعة. يجب إنشاء المجموعات بشكل صريح قبل استخدامها، مما يضمن المزامنة الصحيحة بين بيانات وصفية أمين المكتبة وجميع الواجهات الخلفية للتخزين. تدعم هذه الميزة أربع حالات استخدام رئيسية:
- إنشاء المجموعة: إنشاء مجموعات بشكل صريح قبل تخزين البيانات
- قائمة المجموعات: عرض جميع المجموعات الموجودة في النظام
- إدارة بيانات وصفية المجموعة: تحديث أسماء المجموعات والأوصاف والعلامات
- حذف المجموعة: إزالة المجموعات والبيانات المرتبطة بها عبر جميع أنواع التخزين
الأهداف
إنشاء المجموعة بشكل صريح: تتطلب أن يتم إنشاء المجموعات قبل تخزين البيانات مزامنة التخزين: ضمان وجود المجموعات في جميع الواجهات الخلفية للتخزين (المتجهات، والكائنات، والثلاثيات) إمكانية رؤية المجموعة: تمكين المستخدمين من سرد وفحص جميع المجموعات في بيئتهم تنظيف المجموعة: السماح بحذف المجموعات التي لم تعد مطلوبة تنظيم المجموعة: دعم العلامات والملصقات لتتبع واكتشاف المجموعة بشكل أفضل إدارة البيانات الوصفية: ربط بيانات وصفية ذات مغزى بالمجموعات من أجل الوضوح التشغيلي اكتشاف المجموعة: تسهيل العثور على مجموعات معينة من خلال التصفية والبحث الشفافية التشغيلية: توفير رؤية واضحة لدورة حياة المجموعة واستخدامها إدارة الموارد: تمكين تنظيف المجموعات غير المستخدمة لتحسين استخدام الموارد سلامة البيانات: منع وجود مجموعات معزولة في التخزين بدون تتبع البيانات الوصفية
الخلفية
في السابق، كانت المجموعات في TrustGraph يتم إنشاؤها ضمنيًا أثناء عمليات تحميل البيانات، مما أدى إلى مشاكل في المزامنة حيث يمكن أن توجد المجموعات في الواجهات الخلفية للتخزين بدون بيانات وصفية مقابلة في أمين المكتبة. وقد أدى ذلك إلى تحديات إدارية وإمكانية وجود بيانات معزولة.
يعالج نموذج إنشاء المجموعة الصريح هذه المشكلات عن طريق:
طلب إنشاء المجموعات قبل استخدامها عبر tg-set-collection
بث إنشاء المجموعة إلى جميع الواجهات الخلفية للتخزين
الحفاظ على حالة متزامنة بين بيانات وصفية أمين المكتبة والتخزين
منع الكتابة إلى المجموعات غير الموجودة
توفير إدارة واضحة لدورة حياة المجموعة
تحدد هذه المواصفات نموذج إدارة المجموعة الصريح. من خلال طلب إنشاء المجموعة بشكل صريح، تضمن TrustGraph: تتبع المجموعات في بيانات وصفية أمين المكتبة من لحظة إنشائها أن تكون جميع الواجهات الخلفية للتخزين على علم بالمجموعات قبل استقبال البيانات عدم وجود مجموعات معزولة في التخزين رؤية وتحكم واضحين في دورة حياة المجموعة معالجة أخطاء متسقة عند الإشارة العمليات إلى مجموعات غير موجودة
التصميم الفني
البنية التحتية
سيتم تنفيذ نظام إدارة المجموعة داخل البنية التحتية الحالية لـ TrustGraph:
-
تكامل خدمة أمين المكتبة سيتم إضافة عمليات إدارة المجموعة إلى خدمة أمين المكتبة الحالية لا توجد خدمة جديدة مطلوبة - تستفيد من أنماط المصادقة والوصول الحالية تتعامل مع قائمة المجموعات وحذفها وإدارة بياناتها الوصفية
الوحدة: trustgraph-librarian
-
جدول بيانات وصفية المجموعة في Cassandra جدول جديد في مساحة مفاتيح أمين المكتبة الحالية يخزن بيانات وصفية المجموعة مع وصول المستخدم المفتاح الأساسي: (user_id, collection_id) لضمان تعدد المستأجرين المناسب
الوحدة: trustgraph-librarian
-
واجهة سطر الأوامر لإدارة المجموعة واجهة سطر أوامر لعمليات المجموعة يوفر أوامر للقائمة والحذف والملصقات والعلامات يتكامل مع إطار عمل سطر الأوامر الحالي
الوحدة: trustgraph-cli
نماذج البيانات
جدول بيانات وصفية المجموعة في Cassandra
سيتم تخزين بيانات وصفية المجموعة في جدول Cassandra منظم في مساحة مفاتيح أمين المكتبة:
CREATE TABLE collections (
user text,
collection text,
name text,
description text,
tags set<text>,
created_at timestamp,
updated_at timestamp,
PRIMARY KEY (user, collection)
);
هيكل الجدول: user: + collection: مفتاح أساسي مركب يضمن عزل المستخدم name: اسم المجموعة الذي يمكن قراءته بواسطة الإنسان description: وصف تفصيلي لغرض المجموعة tags: مجموعة من العلامات لتصنيف وتصفية created_at: طابع زمني لإنشاء المجموعة updated_at: طابع زمني لآخر تعديل
هذا النهج يسمح بـ: إدارة مجموعات متعددة المستأجرين مع عزل المستخدم استعلام فعال حسب المستخدم والمجموعة نظام تصنيف مرن للتنظيم تتبع دورة حياة المجموعة للحصول على رؤى تشغيلية
دورة حياة المجموعة
يتم إنشاء المجموعات بشكل صريح في المكتبة قبل أن تتمكن عمليات البيانات من المضي قدمًا:
-
إنشاء المجموعة (مساران):
المسار أ: الإنشاء الذي يبدأه المستخدم عبر
tg-set-collection: يقوم المستخدم بتوفير معرف المجموعة والاسم والوصف والعلامات تقوم المكتبة بإنشاء سجل بيانات وصفية في جدولcollectionsتقوم المكتبة ببث "إنشاء مجموعة" إلى جميع الواجهات الخلفية للتخزين تقوم جميع معالجات التخزين بإنشاء المجموعة وتأكيد النجاح أصبحت المجموعة الآن جاهزة لعمليات البياناتالمسار ب: الإنشاء التلقائي عند إرسال المستند: يقوم المستخدم بإرسال مستند يحدد معرف مجموعة تتحقق المكتبة مما إذا كانت المجموعة موجودة في جدول البيانات الوصفية إذا لم تكن موجودة: تقوم المكتبة بإنشاء بيانات وصفية مع القيم الافتراضية (الاسم = معرف المجموعة، وصف/علامات فارغة) تقوم المكتبة ببث "إنشاء مجموعة" إلى جميع الواجهات الخلفية للتخزين تقوم جميع معالجات التخزين بإنشاء المجموعة وتأكيد النجاح تستمر معالجة المستند مع إنشاء المجموعة الآن
يضمن كلا المسارين وجود المجموعة في بيانات المكتبة الوصفية وجميع الواجهات الخلفية للتخزين قبل السماح بعمليات البيانات.
-
التحقق من التخزين: تتحقق عمليات الكتابة من وجود المجموعة: تتحقق معالجات التخزين من حالة المجموعة قبل قبول عمليات الكتابة تؤدي عمليات الكتابة إلى مجموعات غير موجودة إلى إرجاع خطأ يمنع هذا عمليات الكتابة المباشرة التي تتجاوز منطق إنشاء المجموعة الخاص بالمكتبة
-
سلوك الاستعلام: تتعامل عمليات الاستعلام مع المجموعات غير الموجودة بأمان: تؤدي الاستعلامات إلى مجموعات غير موجودة إلى إرجاع نتائج فارغة لا يتم إرجاع أي خطأ لعمليات الاستعلام يسمح بالاستكشاف دون الحاجة إلى وجود المجموعة
-
تحديثات البيانات الوصفية: يمكن للمستخدمين تحديث بيانات وصفية للمجموعة بعد الإنشاء: قم بتحديث الاسم والوصف والعلامات عبر
tg-set-collectionتنطبق التحديثات على بيانات المكتبة الوصفية فقط تحتفظ الواجهات الخلفية للتخزين بالمجموعة ولكن لا يتم نشر تحديثات البيانات الوصفية -
الحذف الصريح: يقوم المستخدمون بحذف المجموعات عبر
tg-delete-collection: تقوم المكتبة ببث "حذف مجموعة" إلى جميع الواجهات الخلفية للتخزين تنتظر تأكيدًا من جميع معالجات التخزين تحذف سجل بيانات المكتبة الوصفية فقط بعد اكتمال تنظيف التخزين يضمن عدم وجود بيانات متبقية في التخزين
المبدأ الأساسي: المكتبة هي نقطة التحكم الوحيدة لإنشاء المجموعة. سواء تم بدءها بأمر المستخدم أو بإرسال مستند، تضمن المكتبة تتبع البيانات الوصفية المناسبة ومزامنة الواجهة الخلفية للتخزين قبل السماح بعمليات البيانات.
العمليات المطلوبة:
إنشاء مجموعة: عملية المستخدم عبر tg-set-collection أو تلقائيًا عند إرسال مستند
تحديث بيانات وصفية للمجموعة: عملية المستخدم لتعديل الاسم والوصف والعلامات
حذف مجموعة: عملية المستخدم لإزالة المجموعة والبيانات المرتبطة بها عبر جميع المتاجر
قائمة المجموعات: عملية المستخدم لعرض المجموعات مع التصفية حسب العلامات
إدارة المجموعة عبر المتاجر
توجد المجموعات عبر واجهات خلفية تخزين متعددة في TrustGraph: مخازن المتجهات (Qdrant، Milvus، Pinecone): تخزن التضمينات والبيانات المتجهة مخازن الكائنات (Cassandra): تخزن المستندات وبيانات الملف مخازن الثلاثيات (Cassandra، Neo4j، Memgraph، FalkorDB): تخزن بيانات الرسم البياني/RDF
Each store type implements: Collection State Tracking: Maintain knowledge of which collections exist Collection Creation: Accept and process "create-collection" operations Collection Validation: Check collection exists before accepting writes Collection Deletion: Remove all data for specified collection
The librarian service coordinates collection operations across all store types, ensuring: Collections created in all backends before use All backends confirm creation before returning success Synchronized collection lifecycle across storage types Consistent error handling when collections don't exist
Collection State Tracking by Storage Type
Each storage backend tracks collection state differently based on its capabilities:
Cassandra Triple Store:
Uses existing triples_collection table
Creates system marker triple when collection created
Query: SELECT collection FROM triples_collection WHERE collection = ? LIMIT 1
Efficient single-partition check for collection existence
Qdrant/Milvus/Pinecone Vector Stores:
Native collection APIs provide existence checking
Collections created with proper vector configuration
collection_exists() method uses storage API
Collection creation validates dimension requirements
Neo4j/Memgraph/FalkorDB Graph Stores:
Use :CollectionMetadata nodes to track collections
Node properties: {user, collection, created_at}
Query: MATCH (c:CollectionMetadata {user: $user, collection: $collection})
Separate from data nodes for clean separation
Enables efficient collection listing and validation
Cassandra Object Store: Uses collection metadata table or marker rows Similar pattern to triple store Validates collection before document writes
APIs
Collection Management APIs (Librarian):
Create/Update Collection: Create new collection or update existing metadata via tg-set-collection
List Collections: Retrieve collections for a user with optional tag filtering
Delete Collection: Remove collection and associated data, cascading to all store types
Storage Management APIs (All Storage Processors): Create Collection: Handle "create-collection" operation, establish collection in storage Delete Collection: Handle "delete-collection" operation, remove all collection data Collection Exists Check: Internal validation before accepting write operations
Data Operation APIs (Modified Behavior): Write APIs: Validate collection exists before accepting data, return error if not Query APIs: Return empty results for non-existent collections without error
Implementation Details
The implementation will follow existing TrustGraph patterns for service integration and CLI command structure.
Collection Deletion Cascade
When a user initiates collection deletion through the librarian service:
- Metadata Validation: Verify collection exists and user has permission to delete
- Store Cascade: Librarian coordinates deletion across all store writers: Vector store writer: Remove embeddings and vector indexes for the user and collection Object store writer: Remove documents and files for the user and collection Triple store writer: Remove graph data and triples for the user and collection
- Metadata Cleanup: Remove collection metadata record from Cassandra
- Error Handling: If any store deletion fails, maintain consistency through rollback or retry mechanisms
Collection Management Interface
⚠️ LEGACY APPROACH - REPLACED BY CONFIG-BASED PATTERN
The queue-based architecture described below has been replaced with a config-based approach using CollectionConfigHandler. All storage backends now receive collection updates via config push messages instead of dedicated management queues.
All store writers implement a standardized collection management interface with a common schema:
Message Schema (StorageManagementRequest):
{
"operation": "create-collection" | "delete-collection",
"user": "user123",
"collection": "documents-2024"
}
هيكلة قائمة الانتظار:
قائمة انتظار إدارة مخزن المتجهات (
vector-storage-management): مخازن المتجهات/التضميناتقائمة انتظار إدارة مخزن الكائنات (
object-storage-management): مخازن الكائنات/المستنداتقائمة انتظار إدارة مخزن الثلاثيات (
triples-storage-management): مخازن الرسم البياني/RDFقائمة انتظار استجابة التخزين (storage-management-response): يتم إرسال جميع الاستجابات هنا
التنفيذ الحالي:
تستخدم جميع واجهات التخزين الخلفية الآن CollectionConfigHandler:
تكامل دفع التكوين: تسجل خدمات التخزين للحصول على إشعارات دفع التكوين
المزامنة التلقائية: يتم إنشاء/حذف المجموعات بناءً على تغييرات التكوين
نموذج تصريحي: يتم تعريف المجموعات في خدمة التكوين، وتقوم الواجهات الخلفية بالمزامنة للمطابقة
لا يوجد طلب/استجابة: يلغي تكامل التنسيق وتتبع الاستجابة
تتبع حالة المجموعة: يتم الحفاظ عليه عبر ذاكرة التخزين المؤقت known_collections
عمليات قابلة للعكس: من الآمن معالجة نفس التكوين عدة مرات
تقوم كل واجهة تخزين خلفية بتنفيذ:
create_collection(user: str, collection: str, metadata: dict) - إنشاء هياكل المجموعة
delete_collection(user: str, collection: str) - إزالة جميع بيانات المجموعة
collection_exists(user: str, collection: str) -> bool - التحقق من الصحة قبل الكتابة
إعادة هيكلة مخزن الثلاثيات Cassandra
كجزء من هذا التنفيذ، سيتم إعادة هيكلة مخزن الثلاثيات Cassandra من نموذج جدول لكل مجموعة إلى نموذج جدول موحد:
الهيكلة الحالية:
مساحة مفاتيح لكل مستخدم، وجدول منفصل لكل مجموعة
المخطط: (s, p, o) مع PRIMARY KEY (s, p, o)
أسماء الجداول: تصبح مجموعات المستخدمين جداول Cassandra منفصلة
الهيكلة الجديدة:
مساحة مفاتيح لكل مستخدم، وجدول "ثلاثيات" واحد لجميع المجموعات
المخطط: (collection, s, p, o) مع PRIMARY KEY (collection, s, p, o)
عزل المجموعة من خلال تقسيم المجموعة
التغييرات المطلوبة:
-
إعادة هيكلة فئة TrustGraph (
trustgraph/direct/cassandra.py): إزالة المعلمةtableمن المُنشئ، واستخدام جدول "ثلاثيات" ثابت إضافة المعلمةcollectionإلى جميع الطرق تحديث المخطط لتضمين المجموعة كأول عمود تحديثات الفهرس: سيتم إنشاء فهارس جديدة لدعم جميع أنماط الاستعلام الثمانية: فهرس على(s)للاستعلامات المستندة إلى الموضوع فهرس على(p)للاستعلامات المستندة إلى الرابط فهرس على(o)للاستعلامات المستندة إلى الكائن ملاحظة: لا تدعم Cassandra فهارس ثانوية متعددة الأعمدة، لذا هذه هي فهارس أحادية العمودأداء نمط الاستعلام: ✅
get_all()- فحص التقسيم علىcollection✅get_s(s)- يستخدم المفتاح الأساسي بكفاءة (collection, s) ✅get_p(p)- يستخدمidx_pمع تصفيةcollection✅get_o(o)- يستخدمidx_oمع تصفيةcollection✅get_sp(s, p)- يستخدم المفتاح الأساسي بكفاءة (collection, s, p) ⚠️get_po(p, o)- يتطلبALLOW FILTERING(يستخدم إماidx_pأوidx_oبالإضافة إلى التصفية) ✅get_os(o, s)- يستخدمidx_oمع تصفية إضافية علىs✅get_spo(s, p, o)- يستخدم المفتاح الأساسي بكفاءةملاحظة حول ALLOW FILTERING: يتطلب نمط استعلام
get_poALLOW FILTERINGلأنه يحتاج إلى كل من قيود الرابط والكائن بدون فهرس مركب مناسب. هذا مقبول لأن نمط الاستعلام هذا أقل شيوعًا من الاستعلامات المستندة إلى الموضوع في الاستخدام النموذجي لمخزن الثلاثيات. -
تحديثات كاتب التخزين (
trustgraph/storage/triples/cassandra/write.py): الحفاظ على اتصال TrustGraph واحد لكل مستخدم بدلاً من لكل (مستخدم، مجموعة) تمرير المجموعة إلى عمليات الإدراج تحسين استخدام الموارد مع عدد أقل من الاتصالات -
تحديثات خدمة الاستعلام (
trustgraph/query/triples/cassandra/service.py): اتصال TrustGraph واحد لكل مستخدم تمرير المجموعة إلى جميع عمليات الاستعلام الحفاظ على نفس منطق الاستعلام مع معلمة المجموعة
الفوائد:
تبسيط حذف المجموعة: حذف باستخدام مفتاح التقسيم collection عبر جميع الجداول الأربعة
كفاءة الموارد: عدد أقل من اتصالات قاعدة البيانات وكائنات الجدول
العمليات عبر المجموعات: من الأسهل تنفيذ العمليات التي تمتد عبر مجموعات متعددة
هيكلة متسقة: تتماشى مع نهج بيانات التعريف الموحد للمجموعة
التحقق من صحة المجموعة: من السهل التحقق من وجود المجموعة عبر جدول triples_collection
ستكون عمليات المجموعة ذرية قدر الإمكان، وستوفر معالجة أخطاء والتحقق المناسبين.
اعتبارات الأمان
تتطلب عمليات إدارة المجموعة تفويضًا مناسبًا لمنع الوصول غير المصرح به أو حذف المجموعات. سيتم مواءمة التحكم في الوصول مع نماذج الأمان الحالية لـ TrustGraph.
اعتبارات الأداء
قد تتطلب عمليات سرد المجموعة الترقيم في البيئات التي تحتوي على عدد كبير من المجموعات. يجب تحسين استعلامات البيانات الوصفية للأنماط الشائعة للتصفية.
استراتيجية الاختبار
ستغطي الاختبارات الشاملة ما يلي: سير عمل إنشاء المجموعة من البداية إلى النهاية مزامنة الواجهة الخلفية للتخزين التحقق من صحة الكتابة للمجموعات غير الموجودة معالجة الاستعلامات للمجموعات غير الموجودة حذف المجموعة بالتتالي عبر جميع المستودعات معالجة الأخطاء وسيناريوهات الاسترداد اختبارات الوحدة لكل واجهة خلفية للتخزين اختبارات التكامل للعمليات عبر المستودعات
حالة التنفيذ
✅ المكونات المكتملة
-
خدمة إدارة المجموعة Librarian (
trustgraph-flow/trustgraph/librarian/collection_manager.py) عمليات CRUD للبيانات الوصفية للمجموعة (القائمة، التحديث، الحذف) تكامل جدول بيانات وصفية للمجموعة في Cassandra عبرLibraryTableStoreتنسيق حذف المجموعة بالتتالي عبر جميع أنواع التخزين معالجة الطلبات/الاستجابات غير المتزامنة مع إدارة الأخطاء المناسبة -
مخطط البيانات الوصفية للمجموعة (
trustgraph-base/trustgraph/schema/services/collection.py) مخططاتCollectionManagementRequestوCollectionManagementResponseمخططCollectionMetadataلسجلات المجموعة تعريفات موضوع قائمة انتظار الطلبات/الاستجابات للمجموعة -
مخطط إدارة التخزين (
trustgraph-base/trustgraph/schema/services/storage.py) مخططاتStorageManagementRequestوStorageManagementResponseتم تعريف مواضيع قائمة انتظار إدارة التخزين تنسيق الرسائل لعمليات المجموعة على مستوى التخزين -
مخطط Cassandra المكون من 4 جداول (
trustgraph-flow/trustgraph/direct/cassandra_kg.py) مفاتيح تقسيم مركبة لأداء الاستعلام جدولtriples_collectionلاستعلامات SPO وتتبع الحذف تم تنفيذ حذف المجموعة بنمط القراءة ثم الحذف
✅ الترحيل إلى النمط المستند إلى التكوين - مكتمل
تم ترحيل جميع الواجهات الخلفية للتخزين من نمط قائمة الانتظار إلى النمط المستند إلى التكوين CollectionConfigHandler.
عمليات الترحيل المكتملة:
✅ trustgraph-flow/trustgraph/storage/triples/cassandra/write.py
✅ trustgraph-flow/trustgraph/storage/triples/neo4j/write.py
✅ trustgraph-flow/trustgraph/storage/triples/memgraph/write.py
✅ trustgraph-flow/trustgraph/storage/triples/falkordb/write.py
✅ trustgraph-flow/trustgraph/storage/doc_embeddings/qdrant/write.py
✅ trustgraph-flow/trustgraph/storage/graph_embeddings/qdrant/write.py
✅ trustgraph-flow/trustgraph/storage/doc_embeddings/milvus/write.py
✅ trustgraph-flow/trustgraph/storage/graph_embeddings/milvus/write.py
✅ trustgraph-flow/trustgraph/storage/doc_embeddings/pinecone/write.py
✅ trustgraph-flow/trustgraph/storage/graph_embeddings/pinecone/write.py
✅ trustgraph-flow/trustgraph/storage/objects/cassandra/write.py
جميع الواجهات الخلفية الآن:
ترث من CollectionConfigHandler
تسجيل للحصول على إشعارات دفع التكوين عبر self.register_config_handler(self.on_collection_config)
تنفيذ create_collection(user, collection, metadata) و delete_collection(user, collection)
استخدام collection_exists(user, collection) للتحقق قبل الكتابة
المزامنة التلقائية مع تغييرات خدمة التكوين
تم إزالة البنية التحتية لقائمة الانتظار القديمة:
✅ تمت إزالة مخططات StorageManagementRequest و StorageManagementResponse
✅ تمت إزالة تعريفات موضوع قائمة انتظار إدارة التخزين
✅ تمت إزالة المستهلك/المنتج لإدارة التخزين من جميع الواجهات الخلفية
✅ تمت إزالة معالجات on_storage_management من جميع الواجهات الخلفية