Catch up on highlights from Firebase at Google I/O 2023. Learn more

إدارة الفهارس في Cloud Firestore

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

قم بإنشاء فهرس مفقود من خلال رسالة خطأ

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

اتبع الرابط الذي تم إنشاؤه إلى وحدة تحكم Firebase ، وراجع المعلومات التي يتم ملؤها تلقائيًا ، وانقر فوق إنشاء .

الأدوار والأذونات

قبل أن تتمكن من إنشاء فهرس في Cloud Firestore ، تأكد من تعيين أي من الأدوار التالية:

  • roles/datastore.owner
  • roles/datastore.indexAdmin
  • roles/editor
  • roles/owner

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

  • datastore.indexes.create
  • datastore.indexes.delete
  • datastore.indexes.get
  • datastore.indexes.list
  • datastore.indexes.update

استخدم وحدة تحكم Firebase

لإنشاء فهرس جديد يدويًا من وحدة تحكم Firebase:

صورة لواجهة فهرسة firestore في وحدة تحكم Firebase

  1. انتقل إلى قسم Cloud Firestore في وحدة تحكم Firebase .
  2. انتقل إلى علامة التبويب فهارس وانقر فوق إضافة فهرس .
  3. أدخل اسم المجموعة وقم بتعيين الحقول التي تريد ترتيب الفهرس بها.
  4. انقر فوق إنشاء .

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

إزالة الفهارس

لحذف فهرس:

  1. انتقل إلى قسم Cloud Firestore في وحدة تحكم Firebase .
  2. انقر فوق علامة التبويب فهارس.
  3. مرر مؤشر الماوس فوق الفهرس الذي تريد حذفه وحدد حذف من قائمة السياق.
  4. قم بتأكيد رغبتك في حذفه بالنقر فوق حذف من التنبيه.

استخدم Firebase CLI

يمكنك أيضًا نشر الفهارس باستخدام Firebase CLI . للبدء ، قم بتشغيل firebase init firestore في دليل المشروع. أثناء الإعداد ، ينشئ Firebase CLI ملف JSON بالفهارس الافتراضية بالتنسيق الصحيح. قم بتحرير الملف لإضافة المزيد من الفهارس ونشره باستخدام أمر firebase deploy . إذا كنت تريد فقط نشر الفهارس ، فأضف علامة --only firestore:indexes flag. إذا أجريت تعديلات على الفهارس باستخدام وحدة تحكم Firebase ، فتأكد أيضًا من تحديث ملف الفهارس المحلي. راجع مرجع تعريف فهرس JSON .

وقت بناء الفهرس

لإنشاء فهرس ، يجب على Cloud Firestore إعداد الفهرس ثم إعادة تعبئة الفهرس بالبيانات الموجودة. وقت إنشاء الفهرس هو مجموع وقت الإعداد ووقت إعادة التعبئة:

  • يستغرق إعداد الفهرس بضع دقائق. الحد الأدنى لوقت بناء الفهرس هو بضع دقائق ، حتى لقاعدة بيانات فارغة.

  • يعتمد وقت إعادة التعبئة على مقدار البيانات الموجودة التي تنتمي إلى الفهرس الجديد. كلما زادت قيم الحقول التي تطابق تعريف الفهرس ، كلما طالت مدة إعادة تعبئة الفهرس.

عمليات إنشاء الفهرس هي عمليات طويلة الأمد .

بعد بدء إنشاء فهرس ، يقوم Cloud Firestore بتعيين اسم فريد للعملية. تكون أسماء العمليات مسبوقة projects/[PROJECT_ID]/databases/(default)/operations/ ، على سبيل المثال:

projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

ومع ذلك ، يمكنك استبعاد البادئة عند تحديد اسم عملية لأمر describe .

سرد جميع العمليات طويلة المدى

لسرد العمليات طويلة المدى ، استخدم الأمر gcloud firestore Operations list . يسرد هذا الأمر العمليات الجارية والتي تم الانتهاء منها مؤخرًا. يتم سرد العمليات لبضعة أيام بعد الانتهاء:

gcloud firestore operations list

تحقق من حالة العملية

بدلاً من سرد جميع العمليات طويلة المدى ، يمكنك سرد تفاصيل عملية واحدة:

gcloud firestore operations describe operation-name

تقدير وقت الانتهاء

أثناء تشغيل العملية ، راجع قيمة حقل state للحالة العامة للعملية.

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

قسّم workCompleted حسب workEstimated لتقدير تقريبي للتقدم. قد يكون التقدير غير دقيق لأنه يعتمد على تأخر جمع الإحصائيات.

على سبيل المثال ، فيما يلي حالة تقدم بنية الفهرس:

{
  "operations": [
    {
      "name": "projects/project-id/operations/AyAyMDBiM2U5NTgwZDAtZGIyYi0zYjc0LTIzYWEtZjg1ZGdWFmZWQHEjF0c2Flc3UtcmV4ZWRuaS1uaW1kYRUKSBI",
      "metadata": {
        "@type": "type.googleapis.com/google.firestore.admin.v1.IndexOperationMetadata",
        "common": {
          "operationType": "CREATE_INDEX",
          "startTime": "2020-06-23T16:52:25.697539Z",
          "state": "PROCESSING"
        },
        "progressDocuments": {
          "workCompleted": "219327",
          "workEstimated": "2198182"
        }
       },
    },
    ...

عند إجراء عملية ما ، سيحتوي وصف العملية على "done": true . انظر قيمة حقل state لنتيجة العملية. إذا لم يتم تعيين الحقل done في الاستجابة ، فإن قيمته false . لا تعتمد على وجود القيمة done للعمليات الجارية.

أخطاء بناء الفهرس

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

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