Hanya relevan dengan edisi Cloud Firestore Enterprise. |
Halaman ini menjelaskan cara mengelola indeks Anda. Untuk mempelajari indeks lebih lanjut, lihat Ringkasan indeks.
Sebelum memulai
Sebelum dapat membuat indeks di Cloud Firestore dengan kompatibilitas MongoDB, pastikan Anda diberi salah satu peran berikut:
roles/datastore.owner
roles/datastore.indexAdmin
roles/editor
roles/owner
Untuk memberikan peran, lihat Memberikan satu peran. Untuk mengetahui informasi selengkapnya tentang peran Cloud Firestore dan izin terkait, lihat Peran yang telah ditetapkan.
Jika Anda telah menentukan peran khusus, tetapkan semua izin berikut untuk membuat indeks:
datastore.indexes.create
datastore.indexes.delete
datastore.indexes.get
datastore.indexes.list
datastore.indexes.update
Membuat indeks
Untuk membuat indeks, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode createIndex()
untuk membuat indeks. Contoh:
-
db.restaurants.createIndex({"cuisine" : 1})
-
db.restaurants.createIndex({"cuisine" : 1}, {sparse: true})
-
Pembuatan indeks dengan
db.runCommand()
juga didukung dengan maksimal satu indeks.db.runCommand({"createIndexes":"restaurant", "index": [{"key": {"cuisine":1}, {"name": "cuisine_index"}]})
Perhatikan batasan berikut:
- Anda hanya dapat membuat satu indeks per permintaan.
db.collection.createIndexes()
tidak didukung. - Log audit untuk pembuatan indeks dengan MongoDB API menggunakan nama metode
google.firestore.admin.v1.FirestoreAdmin.CreateIndex
. - Untuk opsi indeks yang didukung, lihat indeks dan properti indeks.
Firebase console
-
Di Firebase console, buka halaman Database Firestore.
- Pilih database dari daftar database.
- Di tab Indexes, klik Create Index.
- Masukkan ID Koleksi.
- Tambahkan satu atau beberapa jalur kolom dan pilih opsi indeks untuk setiap jalur.
- Pilih opsi kehadiran kolom, baik tidak jarang maupun jarang.
- Secara opsional, Anda dapat menetapkan opsi indeks multikey.
- Klik Buat.
- Indeks baru Anda ditampilkan dalam daftar indeks dan Cloud Firestore dengan kompatibilitas MongoDB mulai membuat indeks Anda. Setelah indeks dibuat, Anda akan melihat tanda centang hijau di samping indeks. Jika indeks tidak dibuat, lihat Error dalam mem-build indeks untuk mengetahui kemungkinan penyebabnya.
gcloud CLI
Untuk membuat indeks, gunakan perintah
gcloud firestore indexes composite create
. Tetapkan api-scope
ke 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
Ganti kode berikut:
- DATABASE_ID: ID database.
- COLLECTION: nama koleksi.
- FIELD_CONFIGURATION: konfigurasi kolom. Untuk setiap kolom,
tambahkan
--field-config=field-path=
. Contoh:--field-config=field-path=user-id,order=descending \ --field-config=field-path=score,order=descending
Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi kolom ini, lihat
--field-config
.
Untuk membuat indeks jarang, tetapkan --density=sparse-any
.
Untuk membuat indeks multikunci, tambahkan tanda --multikey
.
Untuk membuat indeks unik, tambahkan tanda --unique
.
Terraform
Gunakan resource
google_firestore_index
dan tetapkan api_scope
ke MONGODB_COMPATIBLE_API
serta query_scope
ke 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" }
Ganti kode berikut:
- DATABASE_ID: ID database untuk database yang Anda pilih
- COLLECTION: Nama koleksi yang akan diindeks
- FIELD_PATH: Nama kolom yang akan diindeks
- ORDER: Salah satu dari
ASCENDING
atauDESCENDING
- DENSITY: Salah satu dari
SPARSE_ANY
atauDENSE
Menghapus indeks
Untuk menghapus indeks, selesaikan langkah-langkah berikut:
MongoDB API
Gunakan metode dropIndex()
untuk menghapus indeks. Contoh:
Menghapus indeks menggunakan nama indeks
db.restaurants.dropIndex("cuisine_index")
Menghapus indeks menggunakan definisi indeks
db.restaurants.dropIndex({"cuisine" : 1})
Firebase console
-
Di Firebase console, buka halaman Database Firestore.
- Pilih database dari daftar database.
- Klik tab Indeks.
- Dalam daftar indeks, pilih Hapus dari tombol Lainnya untuk indeks yang ingin Anda hapus.
- Klik Hapus Indeks.
gcloud CLI
Untuk menemukan nama indeks, gunakan perintah
gcloud firestore indexes composite list
.gcloud firestore indexes composite list \ --database='DATABASE_ID'
Ganti DATABASE_ID dengan ID database.
-
Untuk menghapus indeks, gunakan perintah
gcloud firestore indexes composite delete
.gcloud firestore indexes composite delete INDEX_NAME \ --database='DATABASE_ID'
Ganti kode berikut:
- INDEX_NAME: nama indeks
- DATABASE_ID: ID database
Waktu build indeks
Untuk membuat indeks, Cloud Firestore dengan kompatibilitas MongoDB harus membuat indeks, lalu mengisi ulang entri indeks dengan data yang ada. Waktu yang diperlukan untuk membuat indeks ditentukan oleh hal berikut:
Waktu build minimum untuk indeks adalah beberapa menit, meskipun untuk database yang kosong.
Waktu yang diperlukan untuk mengisi ulang entri indeks bergantung pada jumlah data yang ada dalam indeks baru. Semakin banyak nilai kolom yang cocok dengan definisi indeks, semakin lama waktu yang diperlukan untuk mengisi ulang entri indeks.
Mengelola operasi yang berjalan lama
Pembuatan indeks merupakan operasi yang berjalan lama. Bagian berikut menjelaskan cara menggunakan operasi yang berjalan lama untuk indeks.
Setelah Anda mulai membuat indeks, Cloud Firestore dengan kompatibilitas MongoDB akan menetapkan nama unik untuk operasi tersebut. Nama operasi diawali dengan projects/PROJECT_ID/databases/DATABASE_ID/operations/
, misalnya:
projects/PROJECT_ID/databases/DATABASE_ID/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Anda dapat tidak menyertakan awalan saat menentukan nama operasi untuk perintah describe
.
Mencantumkan semua operasi yang berjalan lama
Untuk mencantumkan operasi yang berjalan lama, gunakan perintah
gcloud firestore operations list
. Perintah ini mencantumkan operasi yang sedang berlangsung dan yang baru saja selesai.
Operasi tercantum selama beberapa hari setelah selesai:
gcloud firestore operations list
Memeriksa status operasi
Alih-alih mencantumkan semua operasi yang berjalan lama, Anda dapat mencantumkan detail satu operasi:
gcloud firestore operations describe operation-name
Memperkirakan waktu penyelesaian
Saat operasi berjalan, lihat nilai kolom state
untuk mengetahui status operasi secara keseluruhan.
Permintaan untuk status operasi yang berjalan lama juga menampilkan metrik workEstimated
dan workCompleted
. workEstimated
menunjukkan perkiraan jumlah total dokumen yang akan diproses dalam operasi. workCompleted
menunjukkan jumlah dokumen yang diproses sejauh ini. Setelah operasi selesai, workCompleted
mencerminkan jumlah total dokumen yang sebenarnya diproses yang mungkin berbeda dari nilai workEstimated
.
Untuk memperkirakan progres operasi, bagi workCompleted
dengan workEstimated
.
Berikut adalah contoh progres pembuatan indeks:
{ "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" } }, }, ...
Saat operasi selesai, deskripsi operasi akan berisi
"done": true
. Lihat nilai kolom state
untuk menemukan hasil operasi. Jika kolom done
tidak ditetapkan dalam respons,
maka operasi belum selesai.