إدارة الفهارس في 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 . للبدء ، Run firebase init firestore في دليل المشروع الخاص بك. أثناء الإعداد ، يقوم Firebase CLI بإنشاء ملف JSON مع الفهارس الافتراضية بالتنسيق الصحيح. قم بتحرير الملف لإضافة المزيد من الفهارس ونشره باستخدام أمر firebase deploy .

لنشر فهارس وقواعد Firestore Cloud فقط ، أضف علم --only firestore .

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

استخدم تيرافورم

إنشاء فهارس في قاعدة البيانات

يمكن أن تتضمن قاعدة بيانات Cloud Firestore فهرس حقل واحد أو فهرس مركب. يمكنك تحرير ملف تكوين Terraform لإنشاء فهرس لقاعدة البيانات الخاصة بك.

فهرس ميدان واحد

المثال التالي ملف تكوين Terraform ينشئ فهرس حقل واحد على حقل name في مجموعة chatrooms :

Firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "database-id"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • استبدل project-id بمعرف المشروع. يجب أن تكون معرفات المشروع فريدة من نوعها.
  • استبدل database-id بمعرف قاعدة البيانات الخاص بك.

المؤشر المركب

المثال التالي ملف تكوين Terraform ينشئ فهرس مركب لمجموعة من حقل name وحقل description في مجموعة chatrooms :

Firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"
  database = "database-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • استبدل project-id بمعرف المشروع. يجب أن تكون معرفات المشروع فريدة من نوعها.
  • استبدل database-id بمعرف قاعدة البيانات الخاص بك.

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

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

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

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

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

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

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

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

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

لسرد العمليات طويلة الأجل ، استخدم أمر قائمة عمليات GCLOUD Firestore . يسرد هذا الأمر العمليات المستمرة والمكتملة مؤخرًا. يتم سرد العمليات لبضعة أيام بعد الانتهاء:

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 مشكلة في البيانات التي يتم فهرستها. الأكثر شيوعًا ، هذا يعني أنك تضغط على حد فهرس . على سبيل المثال ، قد وصلت العملية إلى الحد الأقصى لعدد إدخالات الفهرس لكل مستند.

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