فقط مربوط به 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 : The database ID for your chosen database
- COLLECTION : نام مجموعه ای که باید نمایه شود
- FIELD_PATH : نام فیلدی که باید نمایه شود
- ORDER : یکی از
ASCENDING
یاDESCENDING
- DENSITY : یکی از
SPARSE_ANY
یاDENSE
یک فهرست را حذف کنید
برای حذف ایندکس مراحل زیر را انجام دهید:
MongoDB API
از متد dropIndex()
برای حذف ایندکس استفاده کنید. به عنوان مثال:
یک فهرست را با استفاده از نام فهرست حذف کنید
db.restaurants.dropIndex("cuisine_index")
با استفاده از تعریف شاخص، یک فهرست را حذف کنید
db.restaurants.dropIndex({"cuisine" : 1})
کنسول Firebase
In the Firebase console, go to the Firestore Database page.
- یک پایگاه داده را از لیست پایگاه های داده انتخاب کنید.
- روی تب Indexes کلیک کنید.
- In the list of indexes, choose Delete from the More button for the index you want to delete.
- روی Delete Index کلیک کنید.
gcloud CLI
برای پیدا کردن نام ایندکس، از دستور
gcloud firestore indexes composite list
استفاده کنید.gcloud firestore indexes composite list \ --database='DATABASE_ID'
DATABASE_ID با شناسه پایگاه داده جایگزین کنید.
To delete the index, use the
gcloud firestore indexes composite delete
command.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
موارد زیر را جایگزین کنید:
- INDEX_NAME : نام یک نمایه
- DATABASE_ID : شناسه پایگاه داده
زمان ساخت ایندکس
برای ایجاد یک فهرست، Cloud Firestore با سازگاری MongoDB باید ایندکس را ایجاد کند و سپس ورودی های فهرست را با داده های موجود پر کند. The time required to create an index is determined by the following:
حداقل زمان ساخت ایندکس، حتی برای یک پایگاه داده خالی، چند دقیقه است.
زمان مورد نیاز برای پر کردن ورودیهای فهرست بستگی به مقدار دادههای موجود در فهرست جدید دارد. The more field values that match the index definition, the longer it takes to backfill the index entries.
مدیریت عملیات طولانی مدت
ساخت های شاخص عملیات طولانی مدت هستند. بخش های زیر نحوه کار با عملیات طولانی مدت برای شاخص ها را شرح می دهد.
پس از شروع به ایجاد یک فهرست، Cloud Firestore با سازگاری MongoDB به عملیات یک نام منحصر به فرد اختصاص می دهد. نام عملیات با projects/ PROJECT_ID /databases/ DATABASE_ID /operations/
پیشوند است، برای مثال:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
هنگام تعیین نام عملیات برای دستور describe
، می توانید پیشوند را حذف کنید.
لیست تمام عملیات طولانی مدت
To list long-running operations, use the gcloud firestore operations list
command. این دستور عملیات در حال انجام و اخیراً تکمیل شده را فهرست می کند. Operations are listed for a few days after completion:
gcloud firestore operations list
وضعیت عملکرد را بررسی کنید
Instead of listing all long-running operations, you can list the details of a single operation:
gcloud firestore operations describe operation-name
تخمین زمان تکمیل
همانطور که عملیات شما اجرا می شود، مقدار فیلد state
برای وضعیت کلی عملیات ببینید.
A request for the status of a long-running operation also returns the metrics workEstimated
and workCompleted
. workEstimated
تعداد کل تخمینی اسنادی را که یک عملیات پردازش خواهد کرد را نشان می دهد. workCompleted
shows the number of documents processed so far. پس از اتمام عملیات، workCompleted
تعداد کل اسنادی را که واقعاً پردازش شدهاند را نشان میدهد که ممکن است با مقدار workEstimated
متفاوت باشد.
To estimate an operation's progress, divide workCompleted
by workEstimated
.
The following is an example of the progress of creating an index:
{ "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
. See the value of the state
field for the result of the operation. اگر قسمت done
در پاسخ تنظیم نشده باشد، عملیات تکمیل نشده است.