Mengelola indeks

Halaman ini menjelaskan cara mengelola indeks Anda. Untuk mempelajari indeks lebih lanjut, lihat Ringkasan indeks.

Sebelum memulai

Sebelum dapat membuat indeks di Firestore dengan kompatibilitas MongoDB, pastikan Anda ditunjuk untuk 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 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:

Google Cloud console
  1. Di Google Cloud console, buka halaman Databases.

    Buka Databases

  2. Pilih database dari daftar database.
  3. Di menu navigasi, klik Indexes.
  4. Klik Buat Indeks.
  5. Masukkan ID Koleksi.
  6. Tambahkan satu atau beberapa jalur kolom dan pilih opsi indeks untuk setiap kolom.
  7. Pilih opsi kehadiran kolom, baik non-renggang maupun renggang.
  8. Secara opsional, tetapkan opsi multikey index.
  9. Klik Buat.
  10. Indeks baru Anda akan ditampilkan dalam daftar indeks dan Firestore dengan kompatibilitas MongoDB akan mulai membuat indeks Anda. Saat 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 informasi selengkapnya tentang cara mengonfigurasi kolom ini, lihat --field-config.

Untuk membuat indeks jarang, tetapkan --density=sparse-any.

Untuk membuat indeks multikunci, tambahkan flag --multikey.

Terraform

Gunakan resource google_firestore_index dan tetapkan api_scope ke MONGODB_COMPATIBLE_API dan 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 atau DESCENDING
  • DENSITY: Salah satu dari SPARSE_ALL atau dense

Menghapus indeks

Untuk menghapus indeks, selesaikan langkah-langkah berikut:

Google Cloud console
  1. Di Google Cloud console, buka halaman Databases.

    Buka Databases

  2. Dari daftar database, pilih database.
  3. Di menu navigasi, klik Indexes.
  4. Dalam daftar indeks, pilih Hapus dari tombol Lainnya untuk indeks yang ingin Anda hapus.
  5. Klik Hapus Indeks.
gcloud CLI
  1. 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.

  2. 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 mem-build indeks, 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 pembuatan 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, 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 menghilangkan 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, operasi belum selesai.