نظرة عامة على الفهارس

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

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

تعريف الفهرس وبنيته

يتألف الفهرس من ما يلي:

  • رقم تعريف المجموعة
  • قائمة بالحقول في المجموعة المحدّدة
  • ترتيب تصاعدي أو تنازلي لكل حقل

يمكن أن يفعّل الفهرس أيضًا الخيارات sparse أو multikey أو unique.

ترتيب الفهرس

يحدّد ترتيب كل حقل واتجاه ترتيبه الفهرس بشكلٍ فريد. على سبيل المثال، الفهران التاليان هما فهرسان مختلفان ولا يمكن استبدالهما:

التجميع الحقول
المدن البلد (تصاعديًا)، عدد السكان (تنازليًا)
المدن عدد السكان (تنازليًا)، البلد (تصاعديًا)

عند إنشاء فهرس لدعم استعلام، يجب تضمين الحقول بالترتيب نفسه الذي يظهر في الاستعلام.

كثافة الفهرس

تخزِّن إدخالات الفهرس تلقائيًا بيانات من جميع المستندات في المجموعة. ويُعرف ذلك باسم الفهرس غير المتفرّق. ستتم إضافة إدخال فهرس لمستند بغض النظر عمّا إذا كان المستند يحتوي على أي من الحقول المحدّدة في الفهرس. تُعامَل الحقول غير المتوفّرة على أنّها تحتوي على قيمة `NULL` عند إنشاء إدخالات الفهرس. لتغيير هذا السلوك، يمكنك تعريف الفهرس على أنّه فهرس متفرّق.

الفهارس المتفرّقة

لا يفهرس الفهرس المتفرّق سوى المستندات في المجموعة التي تحتوي على قيمة (بما في ذلك القيمة الخالية) لحقل واحد على الأقل من الحقول المفهرسة. يقلّل الفهرس المتفرّق من تكاليف التخزين ويمكنه تحسين الأداء.

فهارس `multikey` لقيم المصفوفة

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

لا تستخدِم فهارس `multikey` إلا إذا كنت تعرف أنّك بحاجة إلى فهرسة قيم المصفوفة. تكون للفهارس العادية مزايا عند معالجة استعلام. على سبيل المثال، يمكن للفهارس العادية فلترة القيم ضمن نطاق بكفاءة أكبر.

تؤدي الحالات التالية إلى حدوث أخطاء عند التعامل مع قيم المصفوفة وفهارس `multikey`:

  • تحاول عملية إضافة قيمة مصفوفة إلى حقل مفهرس بفهرس عادي. لإضافة قيمة المصفوفة، عليك حذف الفهارس العادية الحالية في هذا الحقل وإعادة إنشائها كفهارس `multikey`.
  • تحاول إنشاء فهرس عادي في حقل يحتوي على قيمة مصفوفة. عليك إما إنشاء فهرس `multikey` أو حذف قيم المصفوفة.
  • تحاول عملية فهرسة حقول متعددة تحتوي على قيم مصفوفة. لا يمكنك أن يكون لديك أكثر من حقل واحد يحتوي على قيمة مصفوفة في فهرس `multikey`. للمتابعة، عليك تعديل نموذج البيانات أو تعريفات الفهرس.
  • تحاول إنشاء فهرس `multikey` يتشارك فيه مسارا حقلين بادئة مشتركة، مثل users.posts وusers.zip.

الفهارس الفريدة

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

الحقول غير المتوفّرة في فهرس فريد

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

على سبيل المثال، باستخدام هذا الفهرس:

db.cities.createIndex( { "name": 1 }, { unique: true } )

إذا أضفت المستند {"abbreviation": "LA"} إلى المجموعة، ينشئ الفهرس الفريد إدخالاً يتم فيه ضبط name على null. إذا حاولت بعد ذلك إضافة الـ مستند {"abbreviation": "NYC"}، ستفشل العملية لأنّ الإدخال الناتج الـ للفهرس الفريد هو نفسه.

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

فهارس مدة البقاء (TTL)

استخدِم فهارس مدة البقاء (TTL) لإزالة البيانات القديمة تلقائيًا من قواعد البيانات. يحدّد فهرس مدة البقاء (TTL) حقلاً معيّنًا على أنّه وقت انتهاء صلاحية المستندات في مجموعة معيّنة. باستخدام مدة البقاء (TTL)، يمكنك تقليل تكاليف التخزين من خلال إزالة البيانات القديمة. يتم عادةً حذف البيانات في غضون 24 ساعة بعد انتهاء صلاحيتها.

تحديد مشاكل أخطاء إنشاء الفهرس وحلّها

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

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

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