فقط مربوط به 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
در کنسول Firebase ، به صفحه Firestore Database بروید.
- یک پایگاه داده را از لیست پایگاه های داده انتخاب کنید.
- در تب Indexes ، روی Create Index کلیک کنید.
- شناسه مجموعه را وارد کنید.
- یک یا چند مسیر فیلد اضافه کنید و برای هر کدام یک گزینه شاخص انتخاب کنید.
- یک گزینه حضور در میدان، غیر پراکنده یا پراکنده را انتخاب کنید.
- به صورت اختیاری، می توانید گزینه شاخص چند کلیدی را تنظیم کنید.
- روی ایجاد کلیک کنید.
- فهرست جدید شما در لیست ایندکس ها نمایش داده می شود و 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
در کنسول Firebase ، به صفحه Firestore Database بروید.
- یک پایگاه داده را از لیست پایگاه های داده انتخاب کنید.
- روی تب Indexes کلیک کنید.
- در فهرست فهرستها، از دکمه More_vert Delete را برای فهرستی که میخواهید حذف کنید، انتخاب کنید.
- روی Delete Index کلیک کنید.
gcloud CLI
برای پیدا کردن نام ایندکس، از دستور
gcloud firestore indexes composite list
استفاده کنید.gcloud firestore indexes composite list \ --database='DATABASE_ID'
DATABASE_ID با شناسه پایگاه داده جایگزین کنید.
برای حذف ایندکس، از دستور
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
در پاسخ تنظیم نشده باشد، عملیات تکمیل نشده است.