Pola peta panas untuk kunci indeks

Halaman ini menampilkan contoh pola yang mungkin Anda lihat di peta panas Key Visualizer. Pola ini dapat membantu Anda memecahkan masalah performa tertentu.

Penggunaan yang didistribusikan secara merata

Peta panas yang menampilkan operasi baca dan tulis yang terdistribusi secara merata

Jika peta panas menampilkan perpaduan halus antara warna gelap dan cerah, maka operasi tulis/hapus untuk kunci indeks akan didistribusikan secara merata di seluruh database. Peta panas ini kemungkinan mewakili pola penggunaan yang efektif untuk Firestore.

Indeks pada kunci berurutan

Peta panas dengan satu garis diagonal yang terang dapat menunjukkan indeks yang ada di kunci yang meningkat atau menurun secara ketat, seperti stempel waktu. Indeks pada kunci berurutan tidak direkomendasikan dan dapat menimbulkan hotspot. Saat melakukan hotspotting, Anda mungkin mengamati latensi peningkatan yang terkait.

Beberapa contoh hotspot umum pada indeks adalah sebagai berikut:

Penggunaan hotspot karena stempel waktu yang meningkat

Peta panas yang menampilkan hotspotting karena stempel waktu yang meningkat

Dalam contoh ini, peta panas dengan satu garis diagonal terang dapat menunjukkan database yang menggunakan operasi tulis/hapus indeks yang meningkat atau menurun secara ketat pada nama kolom stempel waktu.

{i>Hotspotting<i} karena meningkatnya nama kolom

Peta panas yang menampilkan hotspotting karena kolom yang bertambah

Dalam contoh ini, peta panas dengan satu garis diagonal terang dapat menunjukkan database yang menggunakan operasi tulis/hapus indeks yang benar-benar meningkat atau menurun pada kolom inkremental, seperti nomor invoice yang dibuat secara otomatis.

Untuk mengidentifikasi masalah hotspotting, gunakan alat Key Visualizer dan pahami struktur kunci indeks untuk menentukan indeks mana yang menyebabkan masalah dan mengecualikan indeks tersebut dengan praktik terbaik.

Memahami struktur kunci indeks

Sebelum memahami struktur kunci indeks yang Anda lihat di alat Key Visualizer, pelajari indeks di Firestore.

Kode berikut menunjukkan contoh format kunci indeks yang Anda lihat saat mengarahkan kursor ke rentang kunci yang terpengaruh pada peta panas.

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC)
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Dengan keterangan:

  • KOLEKSI: lokasi koleksi di database Anda. Berdasarkan cakupan, lokasi ini dapat berupa jalur koleksi untuk cakupan koleksi atau nama koleksi untuk cakupan grup koleksi.
  • PROPERTI: kolom yang digunakan untuk membuat indeks. Properti pengurutan __name__ hanya ditampilkan untuk definisi indeks yang mengubah pengurutan default.
  • VALUES: nilai setiap properti.
  • DOCUMENT: ID dokumen yang diperbarui dalam operasi.

Dari contoh sebelumnya, identifikasi kolom dari nilai PROPERTI untuk menemukan indeks yang terpengaruh.

Untuk menemukan indeks, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Databases.

    BUka Database

  2. Pilih database yang diperlukan dari daftar database.

  3. Pada menu navigasi, klik Indeks.

  4. Buka tab Gabungan atau Kolom Tunggal.

    Anda dapat mengidentifikasi jenis indeks dengan menganalisis kolom PROPERTI. Lihat contoh kunci indeks untuk informasi selengkapnya.

  5. Klik Filter, pilih Kolom, lalu masukkan nama kolom.

    Gunakan operator OR untuk menambahkan lebih banyak kolom jika menggunakan indeks komposit.

Setelah mengidentifikasi indeks yang menyebabkan masalah, Anda dapat menggunakan solusi berikut:

  • Indeks komposit: Ubah indeks untuk memastikan kolom yang nilainya meningkat atau menurun secara monoton tidak dipilih sebagai kolom pertama untuk pengindeksan, atau menghapus indeks.

  • Indeks kolom tunggal: Tambahkan pengecualian untuk kolom tersebut dan urutan pengurutan yang ingin Anda kecualikan. Lihat Menambahkan pengecualian satu kolom untuk informasi selengkapnya.

Contoh entri kunci indeks pada peta panas

Jenis Deskripsi Contoh
Cakupan koleksi Indeks kolom tunggal ASC, DESC Firestore membuat indeks dengan cakupan koleksi secara default.

Entri indeks untuk Indeks kolom tunggal di kolom Timestamp, dalam urutan menurun untuk dokumen Users/5000000000000001.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Indeks kolom tunggal cakupan koleksi untuk kolom array Untuk setiap kolom array dalam dokumen, Firestore membuat dan mempertahankan indeks array-contains dengan cakupan koleksi.

Entri indeks untuk indeks kolom tunggal dalam mode array-contains yang akan dibuat saat kolom Country: [USA, Japan] ditambahkan ke dokumen. Perhatikan bahwa indeks ASC,DESC juga akan dibuat secara {i>default<i} untuk bidang ini. Contoh ini menunjukkan indeks ASC untuk kolom Country.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Indeks kolom tunggal grup koleksi ASC, DESC, ARRAY Grup koleksi mencakup semua koleksi dengan ID koleksi yang sama.
Entri indeks untuk Indeks kolom tunggal grup koleksi di kolom Timestamp, dalam urutan menurun.
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Indeks kolom tunggal grup koleksi ASC, DESC, ARRAY Entri indeks untuk Indeks kolom tunggal grup koleksi di kolom Country dalam mode array-contains COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
Entri indeks komposit koleksi dengan properti ASC, ASC, ARRAY Entri indeks komposit dengan induk dibuat saat dokumen bertingkat dibuat dengan definisi indeks cakupan koleksi.

Entri indeks untuk indeks komposit dengan kolom Timestamp dan Name dalam urutan menaik, dan Country dalam mode array-contains.
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entri indeks komposit cakupan grup koleksi dengan properti ASC dan ASC Entri indeks untuk indeks komposit di kolom Timestamp, dalam urutan menaik dan kolom Name dalam urutan menaik COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
Entri Indeks komposit cakupan koleksi dengan properti ASC dan __name__ Entri indeks untuk Indeks komposit di kolom Timestamp dalam urutan menaik dan dengan __name__ mengurutkan dalam urutan menurun untuk dokumen Users/5000000000000001. Anda dapat menggunakan __name__ sebagai kolom terakhir dalam definisi indeks untuk mengubah urutan hasil default. COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

Langkah selanjutnya