الاستخدام
يتميّز Milvus 2.0 بمعالجة موحّدة للدفعات والتدفق وبنية سحابية أصلية، ويشكل Milvus 2.0 تحديًا أكبر من سابقه أثناء تطوير وظيفة الحذف. وبفضل تصميمه المتطور لتجزئة التخزين والحوسبة التخزينية وآلية النشر/الاشتراك المرنة، نحن فخورون بالإعلان عن تحقيق ذلك. في الإصدار Milvus 2.0، يمكنك حذف كيان في مجموعة معينة بمفتاحها الأساسي بحيث لا يتم إدراج الكيان المحذوف في نتيجة البحث أو الاستعلام.
يُرجى ملاحظة أن عملية الحذف في Milvus تشير إلى الحذف المنطقي، في حين أن تنظيف البيانات المادية يحدث أثناء ضغط البيانات. لا يؤدي الحذف المنطقي إلى تعزيز أداء البحث المقيد بسرعة الإدخال/الإخراج بشكل كبير فحسب، بل يسهل أيضًا استعادة البيانات. لا يزال من الممكن استرجاع البيانات المحذوفة منطقيًا بمساعدة وظيفة السفر عبر الزمن.
الاستخدام
دعونا نجرب دالة الحذف في Milvus 2.0 أولاً. (المثال التالي يستخدم PyMilvus 2.0.0 على Milvus 2.0.0).
from pymilvus import connections, utility, Collection, DataType, FieldSchema, CollectionSchema
# Connect to Milvus
connections.connect(
alias="default",
host='x.x.x.x',
port='19530'
)
# Create a collection with Strong Consistency level
pk_field = FieldSchema(
name="id",
dtype=DataType.INT64,
is_primary=True,
)
vector_field = FieldSchema(
name="vector",
dtype=DataType.FLOAT_VECTOR,
dim=2
)
schema = CollectionSchema(
fields=[pk_field, vector_field],
description="Test delete"
)
collection_name = "test_delete"
collection = Collection(
name=collection_name,
schema=schema,
using='default',
shards_num=2,
consistency_level="Strong"
)
# Insert randomly generated vectors
import random
data = [
[i for i in range(100)],
[[random.random() for _ in range(2)] for _ in range(100)],
]
collection.insert(data)
# Query to make sure the entities to delete exist
collection.load()
expr = "id in [2,4,6,8,10]"
pre_del_res = collection.query(
expr,
output_fields = ["id", "vector"]
)
print(pre_del_res)
# Delete the entities with the previous expression
collection.delete(expr)
# Query again to check if the deleted entities exist
post_del_res = collection.query(
expr,
output_fields = ["id", "vector"]
)
print(post_del_res)
التنفيذ
في مثيل Milvus، تكون عقدة البيانات مسؤولة بشكل أساسي عن تعبئة البيانات المتدفقة (السجلات في وسيط السجل) كبيانات تاريخية (لقطات السجل) ومسحها تلقائيًا إلى تخزين الكائنات. تقوم عقدة الاستعلام بتنفيذ طلبات البحث على البيانات الكاملة، أي البيانات المتدفقة والبيانات التاريخية.
ولتحقيق أقصى استفادة من سعة كتابة البيانات للعقد المتوازية في الكتلة العنقودية، تتبنى Milvus استراتيجية التجزئة على أساس تجزئة المفتاح الأساسي لتوزيع عمليات الكتابة بالتساوي على عقد عاملة مختلفة. وهذا يعني أن الوكيل سيقوم بتوجيه رسائل لغة التلاعب بالبيانات (DML) (أي الطلبات) الخاصة بكيان ما إلى نفس عقدة البيانات وعقدة الاستعلام. يتم نشر هذه الرسائل من خلال قناة DML-Channel وتستهلكها عقدة البيانات وعقدة الاستعلام بشكل منفصل لتوفير خدمات البحث والاستعلام معًا.
عقدة البيانات
بعد تلقي رسائل INSERT للبيانات، تقوم عقدة البيانات بإدراج البيانات في مقطع متزايد، وهو مقطع جديد تم إنشاؤه لاستقبال البيانات المتدفقة في الذاكرة. إذا وصل عدد صفوف البيانات أو مدة المقطع المتنامي إلى الحد الأدنى، تقوم عقدة البيانات بإغلاقه لمنع أي بيانات واردة. تقوم عقدة البيانات بعد ذلك بمسح المقطع المختوم، الذي يحتوي على البيانات التاريخية، إلى مخزن الكائن. وفي الوقت نفسه، تُنشئ عقدة البيانات مرشح ازدهار استنادًا إلى المفاتيح الأساسية للبيانات الجديدة، وتقوم بمسحها إلى مخزن الكائنات مع المقطع المختوم، وحفظ مرشح الازدهار كجزء من السجل الثنائي للإحصائيات (binlog)، والذي يحتوي على المعلومات الإحصائية للمقطع.
مرشح التفتح هو بنية بيانات احتمالية تتكون من متجه ثنائي طويل وسلسلة من دوال التعيين العشوائي. يمكن استخدامه لاختبار ما إذا كان عنصر ما عضوًا في مجموعة ما، ولكنه قد يُرجع مطابقات إيجابية كاذبة. -- ويكيبيديا
عند ورود رسائل حذف البيانات، تقوم عقدة البيانات بتخزين جميع مرشحات التفتح في الجزء المطابق، وتطابقها مع المفاتيح الأساسية المقدمة في الرسائل لاسترداد جميع المقاطع (من كل من المقاطع النامية والمغلقة) التي من المحتمل أن تتضمن الكيانات المراد حذفها. بعد تحديد المقاطع المطابقة، تقوم عقدة البيانات بتخزينها في الذاكرة لإنشاء سجلات دلتا الثنائية لتسجيل عمليات الحذف، ثم تقوم بمسح تلك السجلات الثنائية مع المقاطع إلى مخزن الكائنات.
عقدة البيانات
نظرًا لأنه يتم تعيين جزء واحد فقط بقناة DML واحدة، فلن تتمكن عقد الاستعلام الإضافية المضافة إلى الكتلة من الاشتراك في قناة DML-Channel. للتأكد من أن جميع عقد الاستعلام يمكنها تلقي رسائل الحذف، تقوم عقد البيانات بتصفية رسائل الحذف من قناة DML، وإعادة توجيهها إلى قناة دلتا لإعلام جميع عقد الاستعلام بعمليات الحذف.
عقدة الاستعلام
عند تحميل مجموعة من تخزين الكائن، تحصل عقدة الاستعلام أولاً على نقطة تدقيق كل جزء، والتي تحدد عمليات DML منذ آخر عملية مسح. استنادًا إلى نقطة التدقيق، تقوم عقدة الاستعلام بتحميل جميع المقاطع المختومة مع مرشحات دلتا بنلوغ وفلاتر بلوم الخاصة بها. مع تحميل جميع البيانات، تشترك عقدة الاستعلام بعد ذلك في قناة DML وقناة دلتا وقناة دلتا وقناة الاستعلام.
في حالة ورود المزيد من رسائل INSERT للبيانات بعد تحميل المجموعة إلى الذاكرة، تقوم عقدة الاستعلام أولاً بتحديد المقاطع المتزايدة وفقًا للرسائل، وتقوم بتحديث مرشحات التفتح المتضخمة المقابلة في الذاكرة لأغراض الاستعلام فقط. لن يتم مسح مرشحات التفتح المخصصة للاستعلام إلى تخزين الكائنات بعد انتهاء الاستعلام.
عقدة الاستعلام
كما ذكر أعلاه، يمكن لعدد معين فقط من عقد الاستعلام تلقي رسائل DELETE من قناة DML، مما يعني أنها وحدها التي يمكنها تنفيذ طلبات الحذف في قطاعات متزايدة. بالنسبة لعقد الاستعلام التي اشتركت في قناة DML، فإنها تقوم أولاً بتصفية رسائل الحذف في المقاطع المتزايدة، وتحديد موقع الكيانات من خلال مطابقة المفاتيح الأساسية المقدمة مع تلك المرشحات المزدوجة المخصصة للاستعلام في المقاطع المتزايدة، ثم تسجيل عمليات الحذف في المقاطع المقابلة.
يُسمح فقط لعقد الاستعلام التي لا يمكنها الاشتراك في قناة DML-Channel بمعالجة طلبات البحث أو الاستعلام على المقاطع المغلقة لأنها لا يمكنها الاشتراك إلا في قناة دلتا، واستقبال رسائل الحذف المعاد توجيهها بواسطة عقد البيانات. بعد تجميع جميع رسائل الحذف في المقاطع المختومة من قناة دلتا، تقوم عقد الاستعلام بتحديد موقع الكيانات من خلال مطابقة المفاتيح الأساسية المقدمة مع مرشحات التفتح للقطاعات المختومة، ثم تسجيل عمليات الحذف في القطاعات المقابلة.
في نهاية المطاف، في البحث أو الاستعلام، تقوم عقد الاستعلام بإنشاء مجموعة بتات بناءً على سجلات الحذف لحذف الكيانات المحذوفة، والبحث بين الكيانات المتبقية من جميع المقاطع، بغض النظر عن حالة المقطع. أخيرًا وليس آخرًا، يؤثر مستوى الاتساق على رؤية البيانات المحذوفة. في ظل مستوى الاتساق القوي (كما هو موضح في نموذج الكود السابق)، تكون الكيانات المحذوفة غير مرئية على الفور بعد الحذف. بينما يتم اعتماد مستوى الاتساق المحدود، سيكون هناك عدة ثوانٍ من وقت الاستجابة قبل أن تصبح الكيانات المحذوفة غير مرئية.
ما التالي؟
نهدف في مدونة سلسلة الميزات الجديدة 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