كيفية ضغط البيانات في ميلفوس؟
صورة غلاف المدونة
بقلم بينجيي سون وأنجيلا ني.
مع الإصدار الرسمي لـ Milvus 2.0 GA، تم دعم قائمة من الميزات الجديدة. من بين تلك الميزات، الضغط هو إحدى الميزات الجديدة التي يمكن أن تساعدك على توفير مساحة التخزين.
يشير الضغط إلى عملية دمج الأجزاء الصغيرة في الأجزاء الكبيرة وتنظيف البيانات المحذوفة منطقيًا. وبعبارة أخرى، يقلل الضغط من استخدام مساحة القرص عن طريق مسح الكيانات المحذوفة أو منتهية الصلاحية في مدونات البيانات. وهي مهمة في الخلفية يتم تشغيلها بواسطة تنسيق البيانات ويتم تنفيذها بواسطة عقدة البيانات في ميلفوس.
تشرح هذه المقالة مفهوم الضغط وتنفيذه في ميلفوس.
ما هو الضغط؟
قبل التعمق في تفاصيل كيفية تنفيذ الضغط في ميلفوس 2.0، من المهم معرفة ما هو الضغط في ميلفوس.
في كثير من الأحيان، بصفتك مستخدم Milvus، قد تكون منزعجًا من الاستخدام المتزايد لمساحة القرص الصلب. هناك مشكلة أخرى هي أن المقطع الذي يحتوي على أقل من 1,024 صفًا لا تتم فهرسته ويدعم فقط البحث بالقوة الغاشمة لمعالجة الاستعلامات. قد تعيق المقاطع الصغيرة الناتجة عن التدفق التلقائي أو التدفق الذي يستدعيه المستخدم كفاءة الاستعلام.
لذلك، ولحل المشكلتين المذكورتين أعلاه والمساعدة في تقليل استخدام القرص وتحسين كفاءة الاستعلام، يدعم Milvus الضغط.
تقوم قواعد البيانات مثل LevelDB و RocksDB بإلحاق البيانات بجداول السلاسل المصنفة (SSTables). يزداد متوسط القراءات على القرص لكل استعلام مع زيادة عدد جداول السلاسل المفروزة، مما يؤدي إلى استعلامات غير فعالة. ولتقليل تضخيم القراءة وتحرير مساحة على القرص الصلب، تقوم قواعد البيانات هذه بضغط جداول SSTables في جدول واحد. تعمل عمليات الدمج في الخلفية تلقائيًا.
وبالمثل، يقوم ميلفوس بإلحاق البيانات المدرجة والمحذوفة في سجلات ثنائية. كلما زاد عدد السجلات المدمجة، يتم استخدام مساحة أكبر على القرص الثابت. لتحرير مساحة على القرص الثابت، يقوم Milvus بضغط مدونات البيانات المحذوفة والمدرجة. إذا تم إدراج كيان ما ولكن تم حذفه لاحقاً، فإنه لا يعود موجوداً في السجلات الثنائية التي تسجل إدراج البيانات أو حذفها بمجرد ضغطها. بالإضافة إلى ذلك، يقوم Milvus أيضًا بضغط المقاطع - ملفات البيانات التي يتم إنشاؤها تلقائيًا بواسطة Milvus لحفظ البيانات المدرجة.
كيفية تكوين الضغط؟
يتضمن تكوين الضغط في ميلفوس بشكل أساسي معلمتين: dataCoord.enableCompaction
و common.retentionDuration
.
dataCoord.enableCompaction
يحدد ما إذا كان سيتم تمكين الضغط أم لا. قيمته الافتراضية هي true
.
common.retentionDuration
تحدد الفترة التي لا يتم فيها تشغيل الضغط. وحدتها هي الثانية. عند قيامك بضغط البيانات، سيتم جعل جميع الكيانات المحذوفة غير متاحة للبحث باستخدام Time Travel. لذلك، إذا كنت تخطط للبحث باستخدام Time Travel، يجب عليك تحديد فترة زمنية لا يتم خلالها تشغيل الضغط ولا تؤثر على البيانات المحذوفة. لضمان الحصول على نتائج دقيقة لعمليات البحث باستخدام السفر عبر الزمن، يحتفظ ميلفوس بالبيانات التي تم تشغيلها في فترة زمنية محددة بواسطة common.retentionDuration
. أي أن البيانات التي يتم تشغيلها في هذه الفترة لن يتم ضغطها. لمزيد من التفاصيل، راجع البحث مع السفر عبر الزمن.
يتم تمكين الضغط في ملفوس بشكل افتراضي. إذا قمت بتعطيل الضغط ولكنك تريد لاحقًا تمكينه يدويًا، يمكنك اتباع الخطوات التالية:
- استدعاء الأسلوب
collection.compact()
لتشغيل عملية ضغط عام يدويًا. ومع ذلك، يرجى ملاحظة أن هذه العملية قد تستغرق وقتًا طويلاً. - بعد استدعاء الأسلوب، يتم إرجاع معرّف الضغط. عرض حالة الضغط عن طريق استدعاء الأسلوب
collection.get_compaction_state()
.
بعد تمكين الضغط، يتم تشغيله في الخلفية تلقائيًا. نظرًا لأن عملية الضغط قد تستغرق وقتًا طويلاً، تتم معالجة طلبات الضغط بشكل غير متزامن لتوفير الوقت.
كيف يتم تنفيذ الضغط؟
في ميلفوس، يمكنك إما تنفيذ الضغط يدويًا أو تلقائيًا.
لا يتطلب الدمج اليدوي للمدونات أو المقاطع ذات الثنائيات استيفاء أي شروط تشغيل. وبالتالي، إذا قمت باستدعاء الضغط يدويًا، فسيتم ضغط المدونات أو المقاطع ذات الثنائيات مهما كان الأمر.
ومع ذلك، إذا كنت ترغب في تمكين الضغط التلقائي، فيجب استيفاء شروط معينة لتشغيل الضغط لكي يقوم النظام بضغط المقاطع أو مدونات ثنائية.
بشكل عام هناك نوعان من الكائنات التي يمكن ضغطها في ميلفوس: المقاطع والمقاطع الثنائية.
ضغط السجلات الثنائية
السجل الثنائي هو سجل ثنائي، أو وحدة أصغر في المقاطع، يقوم بتسجيل ومعالجة التحديثات والتغييرات التي تم إجراؤها على البيانات في قاعدة بيانات Milvus vector. يتم الاحتفاظ بالبيانات من أي مقطع في سجلات ثنائية متعددة. يتضمن ضغط السجلات الثنائية نوعين من السجلات الثنائية في ميلفوس: السجلات الثنائية المدرجة والسجلات الثنائية دلتا.
يتم إنشاء سجلات دلتا الثنائية عندما يتم حذف البيانات بينما يتم إنشاء سجلات ثنائية الإدراج في الظروف الثلاثة التالية.
- عندما يتم إلحاق البيانات المدرجة، يصل المقطع إلى الحد الأعلى للحجم ويتم مسحه تلقائيًا إلى القرص.
- تقوم DataCoord تلقائيًا بمسح المقاطع التي تبقى غير مختومة لفترة طويلة.
- تقوم بعض واجهات برمجة التطبيقات مثل
collection.num_entities
وcollection.load()
وغيرها باستدعاء المسح تلقائيًا لكتابة المقاطع على القرص.
لذلك، يشير ضغط مدونة ثنائية المدونة، كما يوحي اسمها، إلى ضغط المدونات الثنائية داخل مقطع. وبشكل أكثر تحديدًا، أثناء ضغط السجلات الثنائية يتم ضغط جميع السجلات الثنائية الدلتا وإدراج السجلات الثنائية التي لم يتم الاحتفاظ بها.
ضغط السجلات الثنائية
عندما يتم مسح مقطع ما إلى القرص، أو عندما يطلب Milvus الضغط العام لأن الضغط لم يتم تشغيله لفترة طويلة، يجب استيفاء أحد الشرطين التاليين على الأقل لتشغيل الضغط التلقائي:
- الصفوف في مدونات دلتا الثنائية أكثر من 20% من إجمالي الصفوف.
- يتجاوز حجم مدونات دلتا الثنائية 10 ميغابايت.
ضغط المقطع
المقطع هو ملف بيانات يتم إنشاؤه تلقائيًا بواسطة Milvus لحفظ البيانات المدرجة. هناك نوعان من المقاطع في ملف Milvus: المقطع المتزايد والمقطع المختوم.
يستمر المقطع المتنامي في تلقي البيانات المدرجة حديثًا حتى يتم إغلاقه. لا يتلقى المقطع المختوم أي بيانات جديدة بعد ذلك، وسيتم مسحه إلى مخزن الكائنات، تاركًا البيانات الجديدة ليتم إدراجها في مقطع متنامٍ تم إنشاؤه حديثًا.
لذلك، يشير ضغط المقطع إلى ضغط المقاطع المختومة المتعددة. وبشكل أكثر تحديدًا، أثناء ضغط المقاطع، يتم ضغط المقاطع الصغيرة إلى مقاطع أكبر.
ضغط القطعة
لا يمكن أن يتجاوز كل مقطع تم إنشاؤه بعد الضغط الحد الأعلى لحجم المقطع، وهو 512 ميغابايت افتراضيًا. اقرأ تكوينات النظام لمعرفة كيفية تعديل الحد الأعلى لحجم المقطع.
عندما يتم مسح مقطع إلى القرص، أو عندما يطلب Milvus الضغط العام لأن الضغط لم يتم تشغيله لفترة طويلة، يجب استيفاء الشرط التالي لتشغيل الضغط التلقائي:
- المقاطع الأصغر من 0.5 *
MaxSegmentSize
أكثر من 10.
ما التالي؟
ما التالي بعد تعلم أساسيات الضغط في ميلفوس؟ حاليًا، لا توجد جميع المعلمات الخاصة بتكوين الضغط في الملف milvus.yaml
، كما أن استراتيجيات توليد الخطة أساسية نسبيًا. تعال وساهم في مشروع ميلفوس المفتوح المصدر إذا كنت مهتمًا!
أيضًا، في مدونة سلسلة الميزات الجديدة 2.0، نهدف إلى شرح تصميم الميزات الجديدة. اقرأ المزيد في سلسلة المدونة هذه!
- كيف يحذف ميلفوس البيانات المتدفقة في مجموعة موزعة
- كيفية ضغط البيانات في ميلفوس؟
- كيف يوازن ميلفوس حمل الاستعلام عبر العقد؟
- كيف تمكّن Bitset تعدد الاستخدامات في البحث عن التشابه المتجه
نبذة عن المؤلف
بينغيي صن، كبير مهندسي البرمجيات في مشروع Milvus، حصل على درجة الماجستير في هندسة البرمجيات من جامعة شنغهاي جياو تونغ. وهو مسؤول بشكل رئيسي عن تطوير المكونات المتعلقة بالتخزين في مشروع Milvus 2.0. مجال اهتمامه هو قواعد البيانات والأنظمة الموزعة. وهو من أشد المعجبين بالمشاريع مفتوحة المصدر وذواقة يستمتع بلعب ألعاب الفيديو والقراءة في أوقات فراغه.
- ما هو الضغط؟
- كيفية تكوين الضغط؟
- كيف يتم تنفيذ الضغط؟
- ضغط السجلات الثنائية
- ضغط المقطع
- ما التالي؟
- نبذة عن المؤلف
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word