نُهج الفهرسة في Azure Cosmos DB

ينطبق على: NoSQL

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

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

إشعار

تنطبق طريقة تحديث نهج الفهرسة الموضحة في هذه المقالة فقط على واجهة برمجة تطبيقات Azure Cosmos DB ل NoSQL. تعرف على الفهرسة في واجهة برمجة التطبيقات Azure Cosmos DB لـ MongoDB

وضع الفهرسة

يدعم Azure Cosmos DB وضعين من الفهرسة:

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

إشعار

يدعم Azure Cosmos DB أيضًا وضع الفهرسة «الكسول». تجري الفهرسة الكسولة تحديثات على الفهرس عند مستوى أولوية أقل بكثير عندما لا ينفذ المشغل أي عمل آخر. يمكن أن يؤدي ذلك إلى نتائج استعلام غير متناسقة أو غير مكتملة . إذا كنت تخطط للاستعلام عن حاوية Azure Cosmos DB، يجب عدم تحديد الفهرسة البطيئة. لا يمكن للحاويات الجديدة تحديد الفهرسة الكسولة. يمكنك طلب استثناء عن طريق الاتصال cosmosdbindexing@microsoft.com (إلا إذا كنت تستخدم حساب Azure Cosmos DB في وضع بلا خادم لا يدعم الفهرسة البطيئة).

بشكل افتراضي، يتم تعيين نهج الفهرسة إلى automatic. يتم تحقيق ذلك عن طريق تعيين الخاصية automatic في نهج الفهرسة إلى true. تعيين هذه الخاصية للسماح ل true Azure Cosmos DB بفهرسة العناصر تلقائيا أثناء كتابتها.

حجم الفهرس

إجمالي التخزين المستهلك في Azure Cosmos DB هو مجموعة مكونة من حجم البيانات، وحجم الفهرس. فيما يلي بعض الميزات الخاصة بحجم الفهرس:

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

تضمين مسارات الخصائص واستبعادها

يمكن أن يحدد نهج الفهرسة المخصص مسارات الخصائص التي يتم تضمينها، أو استبعادها بشكل صريح من الفهرسة. يمكنك، بتحسين عدد المسارات التي تتم فهرستها، تقليل زمن الوصول، وتكلفة RU لعمليات الكتابة بشكل كبير. يتم تعريف هذه المسارات باتباع الطريقة الموضحة في قسم نظرة عامة على الفهرسة مع الإضافات التالية:

  • مسار يؤدي إلى قيمة عددية (سلسلة أو رقم) ينتهي ب /?
  • تتم معالجة العناصر من صفيف معا من خلال /[] تدوين (بدلا من /0، /1 وما إلى ذلك)
  • /* يمكن استخدام حرف البدل لمطابقة أي عناصر أسفل العقدة

مع تطبيق نفس المثال مرة أخرى:

    {
        "locations": [
            { "country": "Germany", "city": "Berlin" },
            { "country": "France", "city": "Paris" }
        ],
        "headquarters": { "country": "Belgium", "employees": 250 },
        "exports": [
            { "city": "Moscow" },
            { "city": "Athens" }
        ]
    }
  • المسار headquartersهو employees/headquarters/employees/?

  • المسار locationsهو country/locations/[]/country/?

  • المسار إلى أي شيء ضمن headquarters هو /headquarters/*

على سبيل المثال، يمكننا تضمين /headquarters/employees/? المسار. سيضمن هذا المسار أننا نقوم بفهرسة الخاصية ولكن لن نقوم بفهرسة employees JSON المتداخلة الإضافية داخل هذه الخاصية.

إستراتيجية تضمين\ استبعاد

يجب أن يتضمن أي نهج فهرسة المسار /* الجذر إما كمسار مضمن أو مستبعد.

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

  • استبعاد المسار الجذر لتضمين المسارات التي تحتاج إلى فهرسة بشكل انتقائي. لا تتم فهرسة مسار خاصية مفتاح القسم بشكل افتراضي باستخدام استراتيجية الاستبعاد ويجب تضمينه بشكل صريح إذا لزم الأمر.

  • بالنسبة للمسارات ذات الأحرف العادية التي تتضمن: أحرف أبجدية رقمية و _ (الشرطة السفلية)، لن تضطر إلى حذف سلسلة المسار حول علامات الاقتباس المزدوجة ( "/path/?"على سبيل المثال). بالنسبة للمسارات التي تحتوي على أحرف خاصة أخرى، يلزمك التخلص من سلسلة المسار حول علامات الاقتباس المزدوجة (على سبيل المثال، "/?"‎"/"path-abc). إذا كنت تتوقع وجود حروف خاصة في المسار الخاص بك، يمكنك إلغاء كل مسار للسلامة. من الناحية الوظيفية، فإنه لا يحدث أي فرق إذا قمت بالهروب من كل مسار أو فقط تلك التي تحتوي على أحرف خاصة.

  • يتم استبعاد خاصية _etag النظام من الفهرسة بشكل افتراضي، ما لم تتم إضافة etag إلى المسار المضمن للفهرسة.

  • إذا تم تعيين وضع الفهرسة إلى متناسق، يتم فهرسة خصائص id النظام و _ts تلقائيا.

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

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

راجع هذا القسم للاطلاع على أمثلة سياسة الفهرسة لتضمين المسارات واستبعادها.

تضمين/استبعاد الأسبقية

في حالة وجود تعارض في المسارات المضمنة والمسارات المستبعدة، فتكون الأسبقية للمسار الأكثر دقة.

إليك مثال:

المسار المضمن: /food/ingredients/nutrition/*

المسار المستبعد: /food/ingredients/*

في هذه الحالة، يكون للمسار المضمن الأسبقية على المسار المستبعد لأنه أكثر دقة. استنادا إلى هذه المسارات، سيتم استبعاد أي بيانات في food/ingredients المسار أو متداخلة داخل من الفهرس. سيكون الاستثناء هو البيانات داخل المسار المضمن: /food/ingredients/nutrition/*، والتي سيتم فهرستها.

فيما يلي بعض القواعد لأسبقية المسارات المضمنة والمستبعدة في Azure Cosmos DB:

  • المسارات الأعمق هي الأكثر دقة من المسارات الأضيق. على سبيل المثال: /a/b/? أكثر دقة من /a/?.

  • هو /? أكثر دقة من /*. على سبيل المثال /a/? هو أكثر دقة من /a/* ذلك /a/? يأخذ الأسبقية.

  • يجب أن يكون المسار /* إما مسارا مضمنا أو مسارا مستبعدا.

فهارس المتجهات

إشعار

يجب التسجيل في ميزة معاينة فهرس متجهات Azure Cosmos DB NoSQL لتحديد نهج فهرسة المتجهات.>

تزيد فهارس المتجهات من الكفاءة عند إجراء عمليات بحث متجهة VectorDistance باستخدام وظيفة النظام. تحتوي عمليات البحث في المتجهات على زمن انتقال أقل ومعدل نقل أعلى واستهلاك أقل لوحدة الطلب عند تطبيق فهرس متجه. يمكنك تحديد الأنواع التالية من نهج فهرس المتجهات:

النوع ‏‏الوصف الحد الأقصى للأبعاد
flat يخزن المتجهات على نفس الفهرس مثل الخصائص المفهرسة الأخرى. 505
quantizedFlat قياس (ضغط) المتجهات قبل التخزين على الفهرس. يمكن أن يؤدي ذلك إلى تحسين زمن الانتقال ومعدل النقل على حساب قدر صغير من الدقة. 4096
diskANN إنشاء فهرس يستند إلى DiskANN للبحث التقريبي السريع والفعال. 4096

بعض النقاط التي يجب ملاحظتها:

  • flat تطبق أنواع الفهرس و quantizedFlat فهرس Azure Cosmos DB لتخزين كل متجه وقراءته عند إجراء بحث متجه. عمليات البحث المتجهة ذات الفهرس flat هي عمليات بحث غاشمة وتنتج دقة أو استدعاء بنسبة 100٪ . أي أنه من المضمون العثور على المتجهات الأكثر تشابها في مجموعة البيانات. ومع ذلك، هناك قيود على 505 أبعاد المتجهات على فهرس ثابت.

  • يخزن quantizedFlat الفهرس متجهات كمية (مضغوطة) على الفهرس. عمليات البحث المتجهة ذات quantizedFlat الفهرس هي أيضا عمليات بحث بقوة غاشمة، ولكن قد تكون دقتها أقل قليلا من 100٪ نظرا لأن المتجهات يتم تحديدها كميا قبل الإضافة إلى الفهرس. ومع ذلك، يجب أن يكون لعمليات البحث الموجهة ذات quantized flat زمن انتقال أقل ومعدل نقل أعلى وتكلفة وحدة طلب أقل من عمليات البحث المتجهة flat على فهرس. هذا خيار جيد للسيناريوهات التي تستخدم فيها عوامل تصفية الاستعلام لتضييق نطاق البحث المتجه إلى مجموعة صغيرة نسبيا من المتجهات، والدقة العالية مطلوبة.

  • الفهرس diskANN هو فهرس منفصل محدد خصيصا للخطوط المتجهة التي تطبق DiskANN، وهي مجموعة من خوارزميات فهرسة المتجهات عالية الأداء التي طورتها Microsoft Research. يمكن أن توفر فهارس DiskANN بعض أقل زمن انتقال وأعلى معدل نقل وأقل استعلامات تكلفة RU، مع الحفاظ على دقة عالية. ومع ذلك، نظرا لأن DiskANN هو أقرب فهرس جار تقريبي (ANN)، فقد تكون الدقة أقل من quantizedFlat أو flat.

فيما يلي مثال على نهج الفهرسة باستخدام فهرس متجه:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/_etag/?",
        },
        {
            "path": "/vector/*"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector",
            "type": "diskANN"
        }
    ]
}

هام

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

هام

تمت إضافة مسار المتجه إلى قسم "excludedPaths" في نهج الفهرسة لضمان الأداء الأمثل للإدراج. سيؤدي عدم إضافة مسار المتجه إلى "excludedPaths" إلى ارتفاع تكلفة وحدة الطلب وزمن الانتقال لإدراج المتجهات.

الفهارس المكانية

عند تحديد مسار مكاني في نهج الفهرسة، يجب تحديد الفهرس type الذي يجب تطبيقه على هذا المسار. تتضمن الأنواع المحتملة للفهارس المكانية ما يلي:

  • نقطة

  • Polygon

  • MultiPolygon

  • LineString

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

الفهارس المركبة

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

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

عند تحديد فهرس مركب، يمكنك تحديد:

  • مسارين أو أكثر من مسارات الخصائص. التسلسل الذي يتم فيه تحديد مسارات الخصائص له أهمية.

  • الترتيب (تصاعدي أو تنازلي).

إشعار

عند إضافة فهرس مركب، سيستخدم الاستعلام فهارس النطاق الموجودة حتى تكتمل إضافة الفهرس المركب الجديد. لذلك، عند إضافة فهرس مركب، قد لا تلاحظ على الفور تحسينات الأداء. من الممكن تتبع تقدم تحويل الفهرس باستخدام إحدى حزم SDK.

ترتيب حسب الاستعلامات عن خصائص متعددة:

يتم استخدام الاعتبارات التالية عند استخدام فهارس مركبة للاستعلامات مع ORDER BY عبارة ذات خاصيتين أو أكثر:

  • إذا لم تتطابق مسارات الفهرس المركب مع تسلسل الخصائص في ORDER BY عبارة ، فلن يتمكن الفهرس المركب من دعم الاستعلام.

  • يجب أن يتطابق ترتيب مسارات الفهرس المركبة (تصاعديا أو تنازليا) أيضا مع order في العبارة ORDER BY .

  • يدعم ORDER BY الفهرس المركب أيضا عبارة بالترتيب المعاكس على جميع المسارات.

يُرجى مراعاة المثال التالي حيث يتم تحديد فهرس مركب لخصائص الاسم والعمر و_ts:

فهرس مركب نموذج ORDER BY استعلام هل يدعمه الفهرس المركب؟
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name ASC, c.age asc Yes
(name ASC, age ASC) SELECT * FROM c ORDER BY c.age ASC, c.name asc No
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name DESC, c.age DESC Yes
(name ASC, age ASC) SELECT * FROM c ORDER BY c.name ASC, c.age DESC No
(name ASC, age ASC, timestamp ASC) SELECT * FROM c ORDER BY c.name ASC, c.age ASC, timestamp ASC Yes
(name ASC, age ASC, timestamp ASC) SELECT * FROM c ORDER BY c.name ASC, c.age ASC No

يجب عليك تخصيص نهج الفهرسة حتى تتمكن من تقديم جميع الاستعلامات الضرورية ORDER BY .

استعلامات باستخدام عوامل تصفية لخصائص متعددة

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

على سبيل المثال، ضع في اعتبارك الاستعلام التالي الذي يحتوي على كل من عامل تصفية المساواة والنطاق:

SELECT *
FROM c
WHERE c.name = "John" AND c.age > 18

هذا الاستعلام أكثر كفاءة، ويستغرق وقتا أقل ويستهلك عددا أقل من وحدات الطلب، إذا كان قادرا على تطبيق فهرس مركب على (name ASC, age ASC).

يمكن أيضا تحسين الاستعلامات ذات عوامل تصفية متعددة للنطاق باستخدام فهرس مركب. ومع ذلك، يمكن لكل فهرس مركب فردي تحسين عامل تصفية نطاق واحد فقط. تتضمن >عوامل تصفية النطاق و. <=!=<>= يجب تحديد عامل تصفية النطاق الأخير في الفهرس المركب.

ضع في اعتبارك الاستعلام التالي وعامل تصفية المساواة وعاملين تصفية النطاق:

SELECT *
FROM c
WHERE c.name = "John" AND c.age > 18 AND c._ts > 1612212188

هذا الاستعلام أكثر كفاءة مع فهرس مركب على (name ASC, age ASC) و (name ASC, _ts ASC). ومع ذلك، لن يستخدم الاستعلام فهرسا مركبا لأنه (age ASC, name ASC) يجب تعريف الخصائص ذات عوامل تصفية المساواة أولا في الفهرس المركب. هناك حاجة إلى فهرسين مركبين منفصلين بدلا من فهرس مركب واحد حيث (name ASC, age ASC, _ts ASC) يمكن لكل فهرس مركب تحسين عامل تصفية نطاق واحد فقط.

يتم استخدام الاعتبارات التالية عند إنشاء الفهارس المركبة للاستعلامات ذات عوامل تصفية لخصائص متعددة

  • يمكن لتعبيرات التصفية استخدام فهارس مركبة متعددة.
  • يجب أن تتطابق الخصائص الموجودة في عامل تصفية الاستعلام مع تلك الموجودة في الفهرس المركب. إذا كانت الخاصية موجودة في الفهرس المركب ولكن لم يتم تضمينها في الاستعلام كعامل تصفية، فلن يستخدم الاستعلام الفهرس المركب.
  • إذا كان الاستعلام يحتوي على خصائص أخرى في عامل التصفية لم يتم تعريفها في فهرس مركب، استخدام مجموعة من الفهارس المركبة وفهرس النطاق لتقييم الاستعلام. يتطلب هذا وحدات طلب أقل من استخدام فهارس النطاق حصريا.
  • إذا كانت الخاصية تحتوي على عامل تصفية نطاق (>أو <<=أو >=أو أو !=)، فيجب تعريف هذه الخاصية أخيرا في الفهرس المركب. إذا كان الاستعلام يحتوي على أكثر من عامل تصفية نطاق واحد، فقد يستفيد من فهارس مركبة متعددة.
  • عند إنشاء فهرس مركب لتحسين الاستعلامات باستخدام عوامل تصفية متعددة، ORDER لا يؤثر الفهرس المركب على النتائج. هذه الخاصية اختيارية.

يُرجى مراعاة المثال التالي حيث يتم تحديد فهرس مركب للخصائص والاسم والعمر والطابع الزمني:

فهرس مركب نموذج استعلام هل يدعمه الفهرس المركب؟
(name ASC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age = 18 Yes
(name ASC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name ASC, age ASC) SELECT COUNT(1) FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name DESC, age ASC) SELECT * FROM c WHERE c.name = "John" AND c.age > 18 Yes
(name ASC, age ASC) SELECT * FROM c WHERE c.name != "John" AND c.age > 18 No
(name ASC, age ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 123049923 Yes
(name ASC, age ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age < 18 AND c.timestamp = 123049923 No
(name ASC, age ASC) and (name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.age < 18 AND c.timestamp > 123049923 Yes

استعلامات باستخدام عامل تصفية والترتيب حسب

إذا قام استعلام بتصفية خاصية واحدة أو أكثر وكان له خصائص مختلفة في عبارة ORDER BY، فقد يكون من المفيد إضافة الخصائص في عامل التصفية إلى ORDER BY عبارة .

على سبيل المثال، عن طريق إضافة الخصائص في عامل التصفية إلى ORDER BY عبارة ، يمكن إعادة كتابة الاستعلام التالي لتطبيق فهرس مركب:

الاستعلام باستخدام فهرس النطاق:

SELECT *
FROM c 
WHERE c.name = "John" 
ORDER BY c.timestamp

الاستعلام باستخدام فهرس مركب:

SELECT * 
FROM c 
WHERE c.name = "John"
ORDER BY c.name, c.timestamp

يمكن تعميم تحسينات الاستعلام نفسها لأي ORDER BY استعلامات ذات عوامل تصفية، مع الأخذ في الاعتبار أن الفهارس المركبة الفردية يمكن أن تدعم عامل تصفية نطاق واحد فقط على الأكثر.

الاستعلام باستخدام فهرس النطاق:

SELECT * 
FROM c 
WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 1611947901 
ORDER BY c.timestamp

الاستعلام باستخدام فهرس مركب:

SELECT * 
FROM c 
WHERE c.name = "John" AND c.age = 18 AND c.timestamp > 1611947901 
ORDER BY c.name, c.age, c.timestamp

بالإضافة إلى ذلك، يمكنك استخدام الفهارس المركبة لتحسين الاستعلامات بوظائف النظام و ORDER BY:

الاستعلام باستخدام فهرس النطاق:

SELECT * 
FROM c 
WHERE c.firstName = "John" AND Contains(c.lastName, "Smith", true) 
ORDER BY c.lastName

الاستعلام باستخدام فهرس مركب:

SELECT * 
FROM c 
WHERE c.firstName = "John" AND Contains(c.lastName, "Smith", true) 
ORDER BY c.firstName, c.lastName

تنطبق الاعتبارات التالية عند إنشاء فهارس مركبة لتحسين استعلام باستخدام عامل تصفية وعبارة ORDER BY :

  • إذا لم تقم بتعريف فهرس مركب على استعلام باستخدام عامل تصفية على خاصية واحدة وعبارة منفصلة ORDER BY باستخدام خاصية مختلفة، فسيظل الاستعلام ناجحا. ومع ذلك، يمكن تقليل تكلفة RU للاستعلام باستخدام فهرس مركب، خاصة إذا كانت الخاصية في العبارة ORDER BY ذات علاقة أساسية عالية.
  • إذا كان الاستعلام يقوم بتصفية الخصائص، يجب تضمين هذه الخصائص أولا في ORDER BY عبارة .
  • إذا كان الاستعلام يقوم بتصفية خصائص متعددة، يجب أن تكون عوامل تصفية المساواة هي الخصائص الأولى في العبارة ORDER BY .
  • إذا قام الاستعلام بتصفية خصائص متعددة، يمكنك الحصول على عامل تصفية نطاق واحد أو وظيفة النظام المستخدمة كحد أقصى لكل فهرس مركب. يجب تحديد الخاصية المستخدمة في عامل تصفية النطاق أو وظيفة النظام أخيرا في الفهرس المركب.
  • لا تزال جميع الاعتبارات لإنشاء فهارس مركبة للاستعلامات ORDER BY ذات خصائص واستعلامات متعددة مع عوامل تصفية على خصائص متعددة تنطبق.
فهرس مركب نموذج ORDER BY استعلام هل يدعمه الفهرس المركب؟
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.name ASC, c.timestamp ASC Yes
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" AND c.timestamp > 1589840355 ORDER BY c.name ASC, c.timestamp ASC Yes
(timestamp ASC, name ASC) SELECT * FROM c WHERE c.timestamp > 1589840355 AND c.name = "John" ORDER BY c.timestamp ASC, c.name ASC No
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.timestamp ASC, c.name ASC No
(name ASC, timestamp ASC) SELECT * FROM c WHERE c.name = "John" ORDER BY c.timestamp ASC No
(age ASC, name ASC, timestamp ASC) SELECT * FROM c WHERE c.age = 18 and c.name = "John" ORDER BY c.age ASC, c.name ASC,c.timestamp ASC Yes
(age ASC, name ASC, timestamp ASC) SELECT * FROM c WHERE c.age = 18 and c.name = "John" ORDER BY c.timestamp ASC No

استعلامات باستخدام عامل تصفية وتجميع

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

تطبق الاعتبارات التالية عند إنشاء فهارس مركبة لتحسين الاستعلام باستخدام عامل التصفية ووظيفة النظام التجميعية.

  • الفهارس المركبة اختيارية عند تشغيل الاستعلامات باستخدام التجميعات. ومع ذلك، يمكن غالبا تقليل تكلفة RU للاستعلام باستخدام فهرس مركب.
  • إذا قام الاستعلام بتصفية خصائص متعددة، يجب أن تكون عوامل تصفية المساواة الخصائص الأولى في العبارة.
  • يمكن أن يكون لديك عامل تصفية نطاق واحد كحد أقصى لكل فهرس مركب ويجب أن يكون على الخاصية في وظيفة النظام التجميعية.
  • يجب تحديد الخاصية المستخدمة في وظيفة النظام التجميعية أخيرا في الفهرس المركب.
  • order لا يهم (ASC أو DESC) .
فهرس مركب نموذج استعلام هل يدعمه الفهرس المركب؟
(name ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" Yes
(timestamp ASC, name ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" No
(name ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name > "John" No
(name ASC, age ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" AND c.age = 25 Yes
(age ASC, timestamp ASC) SELECT AVG(c.timestamp) FROM c WHERE c.name = "John" AND c.age > 25 No

تعديل نهج الفهرسة

يمكن تحديث نهج الفهرسة للحاوية في أي وقت باستخدام مدخل Microsoft Azure أو إحدى حزم SDK المدعومة. يؤدي تحديث نهج الفهرسة إلى إجراء تحويل من الفهرس القديم إلى الفهرس الجديد، والذي يتم تنفيذه عبر الإنترنت وفي مكانه (لذلك لا يتم استهلاك مساحة تخزين إضافية أثناء العملية). يتم تحويل نهج الفهرسة القديم بشكل فعال إلى النهج الجديد دون التأثير على توفر الكتابة أو توفر القراءة أو معدل النقل المتوفر في الحاوية. تحويل الفهرس هو عملية غير متزامنة، ويعتمد الوقت الذي يستغرقه لإكماله على معدل النقل المتوفر، وعدد العناصر وحجمها. إذا كان يجب إجراء تحديثات نهج فهرسة متعددة، فمن المستحسن إجراء جميع التغييرات كعملية واحدة من أجل اكتمال تحويل الفهرس في أسرع وقت ممكن.

هام

تحويل الفهرس هو عملية تستهلك وحدات الطلب.

إشعار

يمكنك تتبع تقدم تحويل الفهرس في مدخل Microsoft Azure أو باستخدام إحدى حزم SDK.

لا يوجد أي تأثير على توفر الكتابة أثناء أي تحويلات للفهرس. يستخدم تحويل الفهرس وحدات RUs المتوفرة لديك ولكن بأولوية أقل من عمليات أو استعلامات CRUD.

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

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

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

إشعار

حيثما أمكن، يجب أن تحاول دائما تجميع عمليات إزالة فهرس متعددة في تعديل نهج فهرسة واحد.

هام

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

نُهج الفهرسة ومدة البقاء

يتطلب استخدام ميزة مدة البقاء (TTL) الفهرسة. وهذا يعني:

  • لا يمكن تنشيط TTL على حاوية حيث يتم تعيين وضع الفهرسة إلى none،
  • لا يمكن تعيين وضع الفهرسة إلى بلا على حاوية حيث يتم تنشيط TTL.

بالنسبة للسيناريوهات التي لا يحتاج فيها مسار الخاصية إلى فهرسة، ولكن TTL مطلوب، يمكنك استخدام نهج فهرسة مع تعيين وضع الفهرسة إلى consistent، ولا توجد مسارات مضمنة، وكمسار /* مستبعد فقط.