توضّح هذه الصفحة عملية الفهرسة في Cloud Firestore. لا تنشئ Cloud Firestore أي فهارس تلقائيًا. لتحسين أداء قاعدة البيانات، أنشئ فهارس لطلبات البحث الأكثر استخدامًا.
تؤثر الفهارس بشكل كبير في أداء قاعدة البيانات. إذا كان هناك فهرس للاستعلام، يمكن لقاعدة البيانات عرض النتائج بكفاءة من خلال تقليل كمية البيانات التي يجب فحصها وتقليل الجهد المطلوب لترتيب النتائج. ومع ذلك، تؤدي إدخالات الفهرس إلى زيادة تكاليف التخزين وكمية العمل التي يتم تنفيذها أثناء عملية كتابة في الحقول المفهرسة.
تعريف الفهرس وبنيته
يتألف الفهرس مما يلي:
- معرّف مجموعة
- قائمة بالحقول في المجموعة المحدّدة
- ترتيب تصاعدي أو تنازلي لكل حقل
يمكن أن يتيح الفهرس أيضًا الخيارات sparse أو multikey أو unique.
ترتيب الفهرس
يحدّد ترتيب كل حقل واتجاه الفرز الفهرس بشكلٍ فريد. على سبيل المثال، الفهرسان التاليان هما فهرسان مختلفان ولا يمكن استبدالهما:
| التجميع | الحقول |
|---|---|
| المدن | البلد (ترتيب تصاعدي)، عدد السكان (ترتيب تنازلي) |
| المدن | عدد السكان (ترتيب تنازلي)، البلد (ترتيب تصاعدي) |
عند إنشاء فهرس لدعم طلب بحث، يجب تضمين الحقول بالترتيب نفسه الذي يظهر في طلب البحث.
كثافة الفهرس
تخزّن إدخالات الفهرس تلقائيًا البيانات من جميع المستندات في مجموعة. ويُعرف ذلك باسم الفهرس غير المتفرّق. ستتم إضافة إدخال فهرس لمستند بغض النظر عما إذا كان المستند يحتوي على أي من الحقول المحددة في الفهرس. يتم التعامل مع الحقول غير المتوفّرة على أنّها تتضمّن قيمة NULL عند إنشاء إدخالات الفهرس. لتغيير هذا السلوك، يمكنك تحديد الفهرس كفهرس متفرق.
الفهارس المتفرقة
لا يفهرس الفهرس المتفرّق سوى المستندات في المجموعة التي تحتوي على قيمة (بما في ذلك القيمة الخالية) لحقل واحد على الأقل من الحقول المفهرسة. يقلّل الفهرس المتفرّق من تكاليف التخزين ويمكن أن يحسّن الأداء.
فهارس المفاتيح المتعددة لقيم المصفوفة
إذا كنت بصدد إنشاء فهرس على حقل يحتوي على قيم مصفوفة، عليك إنشاء فهرس متعدد المفاتيح. لا يمكن للفهرس العادي فهرسة قيم المصفوفة. يتيح فهرس المفاتيح المتعددة استخدام حقل واحد على الأكثر من نوع المصفوفة في تعريف الفهرس، ويمكن استخدامه في العمليات التي تتنقّل بين قيم المصفوفة.
لا تستخدِم فهارس المفاتيح المتعددة إلا إذا كنت تعلم أنّك بحاجة إلى فهرسة قيم المصفوفة. تتضمّن الفهارس العادية مزايا عند معالجة طلب بحث. على سبيل المثال، يمكن للفهارس العادية فلترة القيم ضمن نطاق بكفاءة أكبر.
تؤدي الحالات التالية إلى حدوث أخطاء عند التعامل مع قيم المصفوفات والفهارس المتعددة المفاتيح:
- تحاول عملية إضافة قيمة مصفوفة إلى حقل مفهرس بواسطة فهرس عادي. لإضافة قيمة المصفوفة، يجب حذف الفهارس العادية الحالية في هذا الحقل، وإعادة إنشائها كفهارس متعددة المفاتيح.
- تحاول إنشاء فهرس عادي على حقل يحتوي على قيمة مصفوفة. يجب إنشاء فهرس متعدد المفاتيح أو حذف قيم المصفوفة.
- تحاول عملية فهرسة حقول متعددة بقيم مصفوفة. لا يمكنك أن يتضمّن الفهرس المتعدد المفاتيح أكثر من حقل واحد بقيمة مصفوفة. للمتابعة، عدِّل نموذج البيانات أو تعريفات الفهرس.
- تحاول إنشاء فهرس بمفاتيح متعدّدة يتشارك فيه مسارا حقلين بادئة مشتركة، مثل
users.postsوusers.zip.
الفهارس الفريدة
اضبط خيار الفهرس الفريد لفرض قيم فريدة للحقول المفهرسة. بالنسبة إلى الفهارس التي تتضمّن حقولاً متعدّدة، يجب أن تكون كل مجموعة من القيم فريدة في الفهرس. ترفض قاعدة البيانات أي عمليات تعديل وإدراج تحاول إنشاء إدخالات فهرس بقيم مكرّرة. إذا كانت بيانات الحقول المفهرسة تحتوي على قيم مكرّرة وحاولت إنشاء فهرس فريد، سيتعذّر إنشاء الفهرس وستظهر رسالة خطأ في تفاصيل العملية.
الحقول غير المتوفّرة في فهرس فريد
إذا أدرجت مستندًا يتضمّن حقولاً ناقصة للفهرس الفريد، سيضبط الفهرس قيم null للحقول الناقصة. يجب أن يكون إدخال الفهرس الناتج فريدًا، وإلا ستفشل العملية.
على سبيل المثال، باستخدام هذا الفهرس:
db.cities.createIndex( { "name": 1 }, { unique: true } )
إذا أضفت المستند {"abbreviation": "LA"} إلى المجموعة، سيُنشئ الفهرس الفريد إدخالاً بقيمة name مضبوطة على null. إذا حاولت بعد ذلك إضافة المستند {"abbreviation": "NYC"}، ستفشل العملية لأنّ الإدخال الناتج للفهرس الفريد سيكون هو نفسه.
وينطبق السلوك نفسه على الفهارس الفريدة التي تتضمّن حقولاً متعددة.
عند إنشاء مستند أو تعديله، يتم ضبط الحقول المفهرسة غير المتوفّرة على null، ويجب أن يكون إدخال الفهرس الناتج فريدًا في الفهرس.
فهارس TTL
استخدِم فهارس TTL لإزالة البيانات القديمة تلقائيًا من قواعد البيانات. يحدّد فهرس TTL حقلاً معيّنًا ليكون وقت انتهاء صلاحية المستندات في مجموعة معيّنة. باستخدام مدة البقاء، يمكنك خفض تكاليف التخزين من خلال إزالة البيانات القديمة. يتم عادةً حذف البيانات في غضون 24 ساعة بعد انتهاء صلاحيتها.
تحديد مشاكل أخطاء إنشاء الفهرس وحلّها
قد تواجه أخطاء في إنشاء الفهرس عند إدارة الفهارس. قد يتعذّر تنفيذ عملية الفهرسة إذا واجهت قاعدة البيانات مشكلة في البيانات. يمكن أن يتعذّر تنفيذ عمليات الفهرسة للأسباب التالية:
- لقد بلغت الحدّ الأقصى المسموح به للفهرس. على سبيل المثال، قد تكون العملية قد بلغت الحد الأقصى لعدد إدخالات الفهرس لكل مستند. إذا تعذّر إنشاء الفهرس، ستظهر لك رسالة خطأ. إذا لم تبلغ الحدّ الأقصى للفهرس، أعِد محاولة عملية الفهرسة.
- يجب توفّر فهرس متعدد المفاتيح. يحتوي حقل واحد على الأقل من الحقول المفهرسة على قيمة مصفوفة. للمتابعة، عليك إما استخدام فهرس متعدد المفاتيح أو حذف قيم المصفوفة.
- تحاول عملية فهرسة حقول متعددة بقيم مصفوفة. لا يمكنك أن يتضمّن الفهرس المتعدد المفاتيح أكثر من حقل واحد بقيمة مصفوفة. للمتابعة، عدِّل نموذج البيانات أو تعريفات الفهرس.
- إذا ضبطت خيار الفهرس الفريد، ستؤدي بيانات الحقول المفهرسة إلى إنشاء إدخالات فهرس مكرّرة. للمتابعة، عليك إزالة المجموعات المكرّرة من القيم من البيانات.