فهرست ها را مدیریت کنید

فقط مربوط به نسخه Cloud Firestore Enterprise است.

این صفحه نحوه مدیریت ایندکس‌ها را شرح می‌دهد. برای کسب اطلاعات بیشتر در مورد ایندکس‌ها، به نمای کلی ایندکس‌ها مراجعه کنید.

قبل از اینکه شروع کنی

قبل از اینکه بتوانید در Cloud Firestore با سازگاری MongoDB یک فهرست ایجاد کنید، مطمئن شوید که هر یک از نقش‌های زیر به شما اختصاص داده شده است:

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

برای اعطای یک نقش، به اعطای یک نقش واحد مراجعه کنید. برای اطلاعات بیشتر در مورد نقش‌های Cloud Firestore و مجوزهای مرتبط، به نقش‌های از پیش تعریف شده مراجعه کنید.

اگر نقش‌های سفارشی تعریف کرده‌اید، تمام مجوزهای زیر را برای ایجاد ایندکس‌ها اختصاص دهید:

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

ایجاد یک فهرست

برای ایجاد یک شاخص، مراحل زیر را انجام دهید:

رابط برنامه‌نویسی کاربردی مونگودی‌بی

برای ایجاد یک اندیس از متد createIndex() استفاده کنید. برای مثال:

  •   db.restaurants.createIndex({"cuisine" : 1})
      
  •   db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
      
  • ایجاد شاخص با db.runCommand() نیز حداکثر با یک شاخص پشتیبانی می‌شود.

      db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
      

به محدودیت‌های زیر توجه کنید:

  • شما فقط می‌توانید در هر درخواست یک ایندکس ایجاد کنید. db. collection .createIndexes() پشتیبانی نمی‌شود.
  • گزارش‌های حسابرسی برای ایجاد شاخص با رابط برنامه‌نویسی کاربردی MongoDB از متدی با نام google.firestore.admin.v1.FirestoreAdmin.CreateIndex استفاده می‌کنند.
  • برای گزینه‌های پشتیبانی‌شده برای اندیس‌ها، به اندیس‌ها و ویژگی‌های اندیس مراجعه کنید.
کنسول Firebase
  1. در کنسول Firebase ، به صفحه پایگاه داده فایراستور بروید.

    به پایگاه داده فایراستور بروید

  2. یک پایگاه داده از لیست پایگاه‌های داده انتخاب کنید.
  3. در تب Indexes ، روی Create Index کلیک کنید.
  4. شناسه مجموعه را وارد کنید.
  5. یک یا چند مسیر فیلد اضافه کنید و برای هر کدام یک گزینه شاخص انتخاب کنید.
  6. یک گزینه حضور میدانی، چه غیر پراکنده و چه پراکنده، انتخاب کنید.
  7. به صورت اختیاری، می‌توانید گزینه شاخص چندکلید را تنظیم کنید.
  8. روی ایجاد کلیک کنید.
  9. ایندکس جدید شما در لیست ایندکس‌ها نمایش داده می‌شود و Cloud Firestore با سازگاری MongoDB شروع به ایجاد ایندکس شما می‌کند. وقتی ایندکس شما ایجاد شد، یک علامت تیک سبز در کنار ایندکس مشاهده خواهید کرد. اگر ایندکس ایجاد نشد، برای دلایل احتمالی به خطاهای ساخت ایندکس مراجعه کنید.
gcloud CLI

برای ایجاد یک فهرست، از دستور gcloud firestore indexes composite create استفاده کنید. api-scope روی mongodb-compatible-api تنظیم کنید.

gcloud firestore indexes composite create \
--database='DATABASE_ID' \
--collection-group=COLLECTION \
--field-config=FIELD_CONFIGURATION \
--query-scope=collection-group \
--density=dense \
--api-scope=mongodb-compatible-api

موارد زیر را جایگزین کنید:

  • DATABASE_ID : شناسه پایگاه داده.
  • COLLECTION : نام یک مجموعه.
  • FIELD_CONFIGURATION : پیکربندی فیلد. برای هر فیلد، --field-config=field-path= را اضافه کنید. برای مثال:
        --field-config=field-path=user-id,order=descending \
        --field-config=field-path=score,order=descending
        

    برای اطلاعات بیشتر در مورد پیکربندی این فیلدها، به --field-config مراجعه کنید.

برای ایجاد یک شاخص پراکنده، --density=sparse-any را تنظیم کنید.

برای ایجاد یک اندیس چندکلیدی، پرچم --multikey را اضافه کنید.

برای ایجاد یک اندیس منحصر به فرد، پرچم --unique را اضافه کنید.

ترافرم

از منبع google_firestore_index استفاده کنید و api_scope روی MONGODB_COMPATIBLE_API و query_scope را روی COLLECTION_GROUP تنظیم کنید.

resource "google_firestore_index" "index" {
  database    = "DATABASE_ID"
  collection  = "COLLECTION"
  api_scope   = "MONGODB_COMPATIBLE_API"
  query_scope = "COLLECTION_GROUP"

  // You can include multiple field blocks
  fields {
    field_path = "FIELD_PATH"
    order      = "ORDER"
  }

  // Optional
  multikey = true
  density  = "DENSITY"
}

موارد زیر را جایگزین کنید:

  • DATABASE_ID : شناسه پایگاه داده برای پایگاه داده انتخابی شما
  • COLLECTION : نام مجموعه برای فهرست بندی
  • FIELD_PATH : نام فیلدی که قرار است اندیس‌گذاری شود.
  • ORDER : یکی از ASCENDING یا DESCENDING
  • DENSITY : یکی از SPARSE_ANY یا DENSE

حذف یک ایندکس

برای حذف یک ایندکس، مراحل زیر را انجام دهید:

رابط برنامه‌نویسی کاربردی مونگودی‌بی

برای حذف یک اندیس از متد dropIndex() استفاده کنید. برای مثال:

حذف یک اندیس با استفاده از نام اندیس

db.restaurants.dropIndex("cuisine_index")

حذف یک اندیس با استفاده از تعریف اندیس

db.restaurants.dropIndex({"cuisine" : 1})
کنسول Firebase
  1. در کنسول Firebase ، به صفحه پایگاه داده فایراستور بروید.

    به پایگاه داده فایراستور بروید

  2. یک پایگاه داده از لیست پایگاه‌های داده انتخاب کنید.
  3. روی برگه Indexes کلیک کنید.
  4. در لیست ایندکس‌ها، از دکمه‌ی More گزینه‌ی Delete را برای ایندکسی که می‌خواهید حذف کنید، انتخاب کنید.
  5. روی حذف فهرست کلیک کنید.
gcloud CLI
  1. برای یافتن نام ایندکس، از دستور gcloud firestore indexes composite list استفاده کنید.

    gcloud firestore indexes composite list \
    --database='DATABASE_ID'

    به جای DATABASE_ID شناسه پایگاه داده را وارد کنید.

  2. برای حذف ایندکس، از دستور gcloud firestore indexes composite delete استفاده کنید.

    gcloud firestore indexes composite delete INDEX_NAME \
    --database='DATABASE_ID'

    موارد زیر را جایگزین کنید:

    • INDEX_NAME : نام یک اندیس
    • DATABASE_ID : شناسه پایگاه داده

زمان ساخت ایندکس

برای ساخت یک شاخص، Cloud Firestore با سازگاری MongoDB باید شاخص را ایجاد کند و سپس ورودی‌های شاخص را با داده‌های موجود دوباره پر کند. زمان مورد نیاز برای ایجاد یک شاخص به شرح زیر تعیین می‌شود:

  • حداقل زمان ساخت برای یک فهرست، حتی برای یک پایگاه داده خالی، چند دقیقه است.

  • زمان لازم برای پر کردن مجدد ورودی‌های فهرست به میزان داده‌های موجود در فهرست جدید بستگی دارد. هرچه مقادیر فیلد بیشتری با تعریف فهرست مطابقت داشته باشند، پر کردن مجدد ورودی‌های فهرست بیشتر طول می‌کشد.

مدیریت عملیات طولانی مدت

ساخت ایندکس‌ها عملیات طولانی‌مدتی هستند. بخش‌های زیر نحوه کار با عملیات طولانی‌مدت برای ایندکس‌ها را شرح می‌دهند.

پس از شروع ایجاد یک فهرست، Cloud Firestore با سازگاری MongoDB به عملیات یک نام منحصر به فرد اختصاص می‌دهد. نام عملیات با پیشوند projects/ PROJECT_ID /databases/ DATABASE_ID /operations/ شروع می‌شود، برای مثال:

projects/PROJECT_ID/databases/DATABASE_ID/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 در پاسخ تنظیم نشده باشد، عملیات تکمیل نشده است.