إنشاء وإسقاط INDEX في Cassandra

⚡ ملخص ذكي

أنشئ واحذف الفهرس في Cassandra يُمكّن هذا الخيار من تصفية الأعمدة التي لا تُشكّل جزءًا من المفتاح الأساسي. تتناول هذه الصفحة أوامر إنشاء الفهرس وحذفه، وقواعد التسمية، وأنواع الفهارس المتاحة، والحالات التي يكون فيها الفهرس خيارًا غير مناسب.

  • 🔎 لماذا المؤشر: بدون فهرس، لا يمكن لعبارة WHERE أن تشير إلا إلى أعمدة المفتاح الأساسي.
  • 🏷️ قاعدة التسمية: يتم إنشاء فهرس غير مسمى باسم TableName_ColumnName_idx ويجب حذفه بهذا الاسم.
  • 🔁 الصيانة التلقائية: يتم فهرسة الصفوف الموجودة عند الإنشاء، ويتم فهرسة الصفوف الجديدة عند الكتابة دون أي إجراء إضافي.
  • 🚫 القيود: تم بالفعل فهرسة أعمدة المفتاح الأساسي، لذلك تم رفض إنشاء فهرس ثانوي عليها.
  • 📉 أهمية العددية: الأعمدة ذات العدد الكبير جدًا أو المنخفض جدًا من العناصر تجعل الفهرس بطيئًا أو عديم الفائدة.
  • 🧱 بديل أفضل: عادةً ما يتفوق جدول الاستعلام المصمم خصيصًا على الفهرس الثانوي عند التعامل مع كميات كبيرة من البيانات.

إنشاء وحذف الفهرس في Cassandra

Cassandra إنشاء فهرس

يقوم الأمر "إنشاء فهرس" بإنشاء فهرس في العمود المحدد من قبل المستخدم. إذا كانت البيانات موجودة بالفعل للعمود الذي تريد فهرسته، Cassandra يقوم بإنشاء فهارس على البيانات أثناء تنفيذ عبارة "إنشاء فهرس".

  • بعد إنشاء الفهرس، Cassandra يقوم بفهرسة البيانات الجديدة تلقائيًا عند إدراج البيانات.
  • لا يمكن إنشاء الفهرس على المفتاح الأساسي حيث أن المفتاح الأساسي مفهرس بالفعل.
  • يتم دعم الفهارس على أعمدة المجموعة، باستخدام نموذج KEYS أو VALUES أو ENTRIES حسب ما يجب البحث عنه.
  • بدون فهرسة على العمود ، Cassandra لا يمكن تصفية هذا العمود إلا إذا كان مفتاحًا أساسيًا.

لهذا السبب، لتصفية الأعمدة في Cassandraيجب إنشاء الفهارس.

بناء الجملة

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

مثال

فيما يلي اللقطة التي تمت فيها محاولة تصفية عمود "القسم" دون إنشاء الفهرس. ردا على ذلك، تم إرجاع الخطأ.

Cassandra إنشاء فهرس

هذه هي اللقطة حيث يتم إنشاء الفهرس في عمود القسم.

Cassandra إنشاء فهرس

CREATE INDEX DeptIndex ON University.Student (dept);

فيما يلي اللقطة التي سيتم فيها تصفية عمود "القسم" بنجاح.

Cassandra إنشاء فهرس

SELECT * FROM University.Student WHERE dept = 'CS';

اسم الفهرس اختياري. حذفه يسمح Cassandra قم بإنشاء واحد تلقائيًا، وهو أمر مهم عندما يتعين حذف الفهرس لاحقًا.

CREATE INDEX IF NOT EXISTS ON University.Student (dept);

Cassandra إسقاط الفهرس

الأمر "إسقاط الفهرس" يسقط الفهرس المحدد. إذا لم يتم تقديم اسم الفهرس أثناء إنشاء الفهرس، فسيكون اسم الفهرس هو TableName_ColumnName_idx.

  • إذا لم يكن الفهرس موجودًا، فسيُرجع خطأ ما لم يتم استخدام IF EXISTS فسيُرجع no-op.
  • يجب عليك تحديد اسم مساحة المفاتيح مع اسم الفهرس، وإلا سيتم البحث عن الفهرس في مساحة المفاتيح الحالية.

بناء الجملة

DROP INDEX IF EXISTS KeyspaceName.IndexName;

مثال

فيما يلي لقطة للأمر الذي تم تنفيذه "Drop Index" والذي يؤدي إلى إسقاط الفهرس DeptIndex.

Cassandra إسقاط الفهرس

DROP INDEX IF EXISTS University.DeptIndex;

بعد تنفيذ الأمر بنجاح، سيتم إسقاط DeptIndex من مساحة المفاتيح. الآن لا يمكن تصفية البيانات حسب قسم العمود.

للتأكد من وجود الفهارس قبل حذفهاping أولاً، صف الجدول واقرأ تعريفات الفهرس في أسفل المخرجات.

DESCRIBE TABLE University.Student;

أنواع الفهارس في Cassandra

يقوم الأمر أعلاه بإنشاء فهرس ثانوي قياسي، ولكن توجد ثلاث آليات متميزة وتتصرف بشكل مختلف تمامًا.

النوع كيف يعمل أفضل ل
الفهرس الثانوي كل عقدة تقوم بفهرسة بياناتها المحلية فقط، لذلك يجب على الاستعلام بدون مفتاح تقسيم الاتصال بكل عقدة. أعمدة ذات عدد عناصر متوسط ​​يتم الاستعلام عنها جنبًا إلى جنب مع مفتاح التقسيم.
مؤشر SASI فهرس مرفق يدعم مطابقة البادئات واللواحق LIKE بالإضافة إلى النطاقات الرقمية. أنماط البحث النصي. لا تزال هذه الميزة تجريبية، لذا يُرجى اختبارها قبل استخدامها في الإنتاج.
فهرس التخزين المرفق (SAI) قدم في Cassandra 5.0، مشاركة بنية فهرس واحدة عبر الأعمدة مع تقليل الحمل الزائد للكتابة. البديل الحديث لكليهما أعلاه على Cassandra 5 مجموعات.

يستخدم فهرسة عمود المجموعة مُعدِّلاً يحدد الجزء المراد فهرسته.

CREATE INDEX ON University.Teacher (VALUES(Email));
CREATE INDEX ON University.Course (KEYS(prereq));
CREATE INDEX ON University.Course (ENTRIES(prereq));

يبحث الأمر VALUES عن عناصر مجموعة أو قائمة، بينما يبحث الأمر KEYS عن مفاتيح الخريطة، ويقوم الأمر ENTRIES بمطابقة زوج من المفتاح والقيمة. سيتم تناول فهرسة المجموعات بمزيد من التفصيل في... Cassandra مجموعات البرنامج التعليمي.

متى لا يُنصح باستخدام الفهرس في Cassandra

يُعدّ الفهرس الثانوي مفيدًا، ولكنه ليس فهرسًا علائقيًا، واستخدامه في غير موضعه الصحيح سبب شائع لبطء التجميع. تتطلب أربع حالات اتباع نهج مختلف.

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

يتمثل البديل الدائم في جدول ثانٍ مفهرس بالعمود الذي يحتاج إلى البحث، ويتم إنشاؤه في نفس وقت إنشاء الجدول الأول. وهذا يتبع مبدأ الاستعلام أولاً الموضح في Cassandra قواعد نموذج البياناتوهو يحتفظ بكل عملية قراءة في قسم واحد على عقدة واحدة.

كقاعدة عامة، يُناسب الفهرس عمودًا ذا عدد قيم معتدل يتم الاستعلام عنه مع مفتاح تقسيم معروف. أما ما لا ينطبق على ذلك، فيُفضل استخدام جدول مُصمم خصيصًا لهذا الغرض.

الأسئلة الشائعة

لا يوجد حد أقصى ثابت، ولكن كل فهرس يزيد من تكلفة الكتابة واستهلاك الذاكرة. يُعتبر وجود فهرسين أو ثلاثة لكل جدول حدًا عمليًا؛ أما إذا تجاوز ذلك، فيُفضّل إعادة النظر في نموذج البيانات.

لا. يتم فهرسة الصفوف الموجودة في الخلفية ويبقى الجدول متاحًا. تستغرق الجداول الكبيرة وقتًا، ويمكن متابعة التقدم باستخدام أداة nodetool compactionstats.

يشير الفهرس إلى الصفوف في الجدول الأساسي. أما العرض المادي فهو جدول منفصل يتم تحديثه تلقائيًا بمفتاح تقسيم خاص به، لذا فإن عمليات القراءة منه تصل إلى قسم واحد فقط.

بالنظر إلى قائمة الاستعلامات وعدد الأعمدة، يستطيع الذكاء الاصطناعي ترتيب المرشحين بشكل منطقي. لكنه لا يستطيع رؤية معدل التحديث، الذي غالباً ما يحدد ما إذا كان الفهرس سيتراكم فيه عناصر محذوفة.

غالباً ما يكون ذلك بسبب تشغيل استعلام مرفوض. اعتبر هذا الاقتراح إشارة إلى أن هناك حاجة فعلية إما إلى فهرس أو جدول استعلام جديد.

تلخيص هذه التدوينة بـ: