الفهرسة الثانوية في Azure Cosmos DB ل Apache Cassandra

ينطبق على: كاساندرا

تستفيد واجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB من البنية الأساسية للفهرسة لعرض قوة الفهرسة المتأصلة في النظام الأساسي. ومع ذلك، على عكس واجهة برمجة التطبيقات الأساسية ل NoSQL، لا تقوم واجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB بفهرسة جميع السمات بشكل افتراضي. بدلاً من ذلك، فإنها تدعم الفهرسة الثانوية لإنشاء فهرس على سمات معينة، والذي يتصرف بنفس الطريقة مثل Apache Cassandra.

بشكل عام، لا ينصح بتنفيذ استعلامات التصفية على الأعمدة التي لم يتم تقسيمها. يجب عليك استخدام صيغة "السماح بالتصفية" بشكل صريح، ما ينتج عنه عملية قد لا تعمل بشكل جيد. في Azure Cosmos DB، يمكنك تشغيل مثل هذه الاستعلامات على سمات أساسية منخفضة لأنها تنتشر عبر الأقسام لاسترداد النتائج.

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

ملاحظة

لا يمكن إنشاء الفهارس الثانوية إلا باستخدام أوامر CQL المذكورة في هذه المقالة، وليس من خلال الأدوات المساعدة لموفر الموارد (قوالب ARM أو Azure CLI أو PowerShell أو Terraform). الفهارس الثانوية غير معتمدة على العناصر التالية:

  • أنواع البيانات مثل أنواع تجميع المجمدة والأرقام العشرية وأنواع المتغيرات.
  • أعمدة ثابتة
  • مفاتيح نظام المجموعات

تحذير

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

مثال للفهرسة

أولاً، أنشئ نموذجاً لمساحة المفاتيح والجدول عن طريق تشغيل الأوامر التالية في موجه أوامر CQL:

CREATE KEYSPACE sampleks WITH REPLICATION = {'class' : 'SimpleStrategy'};
CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=400;

بعد ذلك، أدخل بيانات المستخدم النموذجية باستخدام الأوامر التالية:

insert into sampleks.t1(user_id,lastname) values (1, 'nishu');
insert into sampleks.t1(user_id,lastname) values (2, 'vinod');
insert into sampleks.t1(user_id,lastname) values (3, 'bat');
insert into sampleks.t1(user_id,lastname) values (5, 'vivek');
insert into sampleks.t1(user_id,lastname) values (6, 'siddhesh');
insert into sampleks.t1(user_id,lastname) values (7, 'akash');
insert into sampleks.t1(user_id,lastname) values (8, 'Theo');
insert into sampleks.t1(user_id,lastname) values (9, 'jagan');

إذا حاولت تنفيذ العبارة التالية، فسوف تواجه خطأً يطلب منك استخدام ALLOW FILTERING:

select user_id, lastname from sampleks.t1 where lastname='nishu';

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

CREATE INDEX ON sampleks.t1 (lastname);

بعد إنشاء فهرس في حقل "اسم العائلة"، يمكنك الآن تشغيل الاستعلام السابق بنجاح. باستخدام واجهة برمجة التطبيقات ل Cassandra في Azure Cosmos DB، ليس عليك توفير اسم فهرس. يتم استخدام فهرس افتراضي مع تنسيق tablename_columnname_idx. على سبيل المثال، يكون t1_lastname_idx هو اسم الفهرس للجدول السابق.

إسقاط الفهرس

تحتاج إلى معرفة اسم الفهرس لإسقاطه. شغّل الأمر desc schema للحصول على وصف الجدول الخاص بك. يتضمن إخراج هذا الأمر اسم الفهرس بالتنسيق CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname). يمكنك بعد ذلك استخدام اسم الفهرس لإسقاط الفهرس كما هو موضح في المثال التالي:

drop index sampleks.t1_lastname_idx;

الخطوات التالية