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

فقط مربوط به Cloud Firestore Enterprise edition.

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

قبل از شروع

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

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

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

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

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

یک شاخص ایجاد کنید

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

MongoDB API

برای ایجاد ایندکس از متد 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() پشتیبانی نمی شود.
  • گزارش‌های حسابرسی برای ایجاد فهرست با API MongoDB از نام روش google.firestore.admin.v1.FirestoreAdmin.CreateIndex استفاده می‌کنند.
  • برای گزینه‌های فهرست پشتیبانی‌شده، به نمایه‌ها و ویژگی‌های فهرست مراجعه کنید.
کنسول Firebase
  1. در کنسول Firebase ، به صفحه Firestore Database بروید.

    به پایگاه داده Firestore بروید

  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 را اضافه کنید.

Terraform

از منبع 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

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

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

MongoDB API

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

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

db.restaurants.dropIndex("cuisine_index")

با استفاده از تعریف شاخص، یک فهرست را حذف کنید

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

    به پایگاه داده Firestore بروید

  2. یک پایگاه داده را از لیست پایگاه های داده انتخاب کنید.
  3. روی تب Indexes کلیک کنید.
  4. در فهرست فهرست‌ها، از دکمه More_vert Delete را برای فهرستی که می‌خواهید حذف کنید، انتخاب کنید.
  5. روی Delete Index کلیک کنید.
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 در پاسخ تنظیم نشده باشد، عملیات تکمیل نشده است.