Hanya relevan dengan edisi Cloud Firestore Enterprise. |
Halaman ini menjelaskan pengindeksan untuk Cloud Firestore dengan kompatibilitas MongoDB. Cloud Firestore dengan kompatibilitas MongoDB tidak membuat indeks apa pun secara default. Untuk meningkatkan performa database, buat indeks untuk kueri yang paling sering Anda gunakan.
Indeks memiliki dampak besar pada performa database. Jika indeks ada untuk kueri, database dapat menampilkan hasil secara efisien dengan mengurangi jumlah data yang perlu dipindai dan mengurangi pekerjaan yang diperlukan untuk mengurutkan hasil. Namun, entri indeks meningkatkan biaya penyimpanan dan jumlah pekerjaan yang dilakukan selama operasi tulis pada kolom yang diindeks.
Definisi dan struktur indeks
Indeks terdiri dari hal-hal berikut:
- ID koleksi
- daftar kolom dalam koleksi tertentu
- urutan, baik menaik atau menurun, untuk setiap kolom
Indeks juga dapat mengaktifkan opsi sparse, multikey, atau unique.
Pengurutan indeks
Urutan dan arah pengurutan setiap kolom menentukan indeks secara unik. Misalnya, indeks berikut adalah dua indeks yang berbeda dan tidak dapat dipertukarkan:
Koleksi | Kolom |
---|---|
cities | negara (menaik), populasi (menurun) |
cities | population (descending), country (ascending), |
Saat membuat indeks untuk mendukung kueri, sertakan kolom dalam urutan yang sama dengan kueri Anda.
Kepadatan indeks
Secara default, entri indeks menyimpan data dari semua dokumen dalam koleksi. Hal ini dikenal sebagai indeks non-sparse. Entri indeks akan ditambahkan untuk dokumen, terlepas dari apakah dokumen berisi kolom yang ditentukan dalam indeks atau tidak. Kolom yang tidak ada diperlakukan sebagai memiliki nilai NULL saat membuat entri indeks. Untuk mengubah perilaku ini, Anda dapat menentukan indeks sebagai indeks jarang.
Indeks renggang
Indeks jarang mengindeks hanya dokumen dalam koleksi yang berisi nilai (termasuk null) untuk setidaknya salah satu kolom terindeks. Indeks jarang mengurangi biaya penyimpanan dan dapat meningkatkan performa.
Indeks multikunci untuk nilai array
Jika Anda membuat indeks pada kolom yang berisi nilai array, Anda harus membuat indeks multikunci. Indeks reguler tidak dapat mengindeks nilai array. Indeks multikey mendukung hingga satu kolom array dalam definisi indeks dan dapat digunakan untuk operasi yang melintasi nilai array.
Gunakan indeks multikey hanya jika Anda tahu bahwa Anda perlu mengindeks nilai array. Indeks reguler memiliki keunggulan saat memproses kueri. Misalnya, indeks reguler dapat memfilter nilai dalam rentang secara lebih efisien.
Situasi berikut menyebabkan error saat bekerja dengan nilai array dan indeks multikunci:
- Operasi mencoba menambahkan nilai array ke kolom yang diindeks oleh indeks reguler. Untuk menambahkan nilai array, Anda harus menghapus indeks reguler yang ada di kolom tersebut, dan membuatnya ulang sebagai indeks multikey.
- Anda mencoba membuat indeks reguler pada kolom yang berisi nilai array. Anda harus membuat indeks multikunci atau menghapus nilai array.
- Operasi mencoba mengindeks beberapa kolom dengan nilai array. Anda tidak dapat memiliki lebih dari satu kolom dengan nilai array dalam indeks multikunci. Untuk melanjutkan, ubah model data atau definisi indeks Anda.
- Anda mencoba membuat indeks multikey dengan dua jalur kolom yang memiliki awalan
yang sama seperti
users.posts
danusers.zip
.
Indeks unik
Tetapkan opsi indeks unik untuk menerapkan nilai unik untuk kolom yang diindeks. Untuk indeks pada beberapa kolom, setiap kombinasi nilai harus unik di seluruh indeks. Database menolak semua operasi update dan penyisipan yang mencoba membuat entri indeks dengan nilai duplikat. Jika data kolom yang diindeks berisi nilai duplikat dan Anda mencoba membuat indeks unik, pembuatan indeks akan gagal dengan pesan error dalam detail operasi.
Kolom yang tidak ada dalam indeks unik
Jika Anda menyisipkan dokumen dengan kolom yang tidak ada untuk indeks unik, indeks
akan menetapkan nilai null
untuk kolom yang tidak ada. Entri indeks yang dihasilkan harus unik atau operasi gagal.
Misalnya, dengan indeks ini:
db.cities.createIndex( { "name": 1 }, { unique: true } )
Jika Anda menambahkan dokumen {"abbreviation": "LA"}
ke koleksi, indeks unik akan membuat entri dengan name
disetel ke null
. Jika Anda kemudian mencoba menambahkan
dokumen {"abbreviation": "NYC"}
, operasi akan gagal karena entri
yang dihasilkan untuk indeks unik sama.
Perilaku yang sama berlaku untuk indeks unik dengan beberapa kolom.
Saat membuat atau memperbarui dokumen, kolom
yang diindeks yang tidak ada akan ditetapkan ke null
dan entri indeks yang dihasilkan harus
unik dalam indeks.
Memecahkan masalah error pembuatan indeks
Anda mungkin mengalami error dalam pembuatan indeks saat mengelola indeks. Operasi pengindeksan dapat gagal jika database mengalami masalah dengan data. Operasi pengindeksan dapat gagal karena alasan berikut:
- Anda telah mencapai batas indeks. Misalnya, operasi mungkin telah mencapai jumlah entri indeks maksimum per dokumen. Jika pembuatan indeks gagal, Anda akan melihat pesan error. Jika Anda belum mencapai batas indeks, coba lagi operasi indeks.
- Indeks multikunci diperlukan. Setidaknya salah satu kolom yang diindeks berisi nilai array. Untuk melanjutkan, Anda harus menggunakan indeks multikey atau menghapus nilai array.
- Operasi mencoba mengindeks beberapa kolom dengan nilai array. Anda tidak dapat memiliki lebih dari satu kolom dengan nilai array dalam indeks multikunci. Untuk melanjutkan, ubah model data atau definisi indeks Anda.
- Anda menetapkan opsi indeks unik dan data kolom yang diindeks akan membuat entri indeks duplikat. Untuk melanjutkan, hapus kombinasi nilai duplikat dari data.
Langkah berikutnya
- Pelajari cara membuat dan mengelola indeks