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 didistribusikan secara merata

Jika peta panas menunjukkan campuran warna gelap dan terang yang terperinci, operasi tulis/hapus untuk kunci indeks 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 terang dapat menunjukkan indeks yang berada pada kunci yang meningkat atau menurun secara ketat, seperti stempel waktu. Indeks pada kunci berurutan tidak direkomendasikan dan dapat membuat hotspot. Saat menggunakan hotspot, Anda mungkin melihat peningkatan latensi yang sesuai.

Beberapa contoh hotspot umum di indeks adalah sebagai berikut:

Hotspot karena stempel waktu yang meningkat

Peta panas yang menampilkan hotspot karena peningkatan stempel waktu

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.

Hotspot karena nama kolom yang bertambah

Peta panas yang menampilkan hotspot karena peningkatan kolom

Dalam contoh ini, peta panas dengan satu garis diagonal terang dapat menunjukkan database yang menggunakan operasi operasi tulis/hapus indeks yang meningkat atau menurun secara ketat 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:

  • COLLECTION: lokasi koleksi di database Anda. Berdasarkan cakupan, ini dapat berupa jalur koleksi untuk cakupan koleksi atau nama koleksi untuk cakupan grup koleksi.
  • PROPERTIES: 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 PROPERTIES untuk menemukan indeks yang terpengaruh.

Untuk menemukan indeks, selesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Databases.

    Buka Databases

  2. Pilih database yang diperlukan dari daftar database.

  3. Di menu navigasi, klik Indexes.

  4. Buka tab Gabungan atau Kolom Tunggal.

    Anda dapat mengidentifikasi jenis indeks dengan menganalisis kolom PROPERTIES. 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 indeks komposit.

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

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

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

Contoh entri kunci indeks pada peta panas

Jenis Deskripsi Contoh
Indeks kolom tunggal cakupan koleksi 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 mode array-contains yang akan dibuat saat kolom Country: [USA, Japan] ditambahkan ke dokumen. Perhatikan bahwa indeks ASC,DESC juga akan dibuat secara default untuk kolom 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 pada 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 gabungan 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 gabungan cakupan grup koleksi dengan properti ASC, ASC Entri indeks untuk indeks komposit pada 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 gabungan cakupan koleksi dengan properti ASC dan __name__ Entri indeks untuk Indeks komposit di kolom Timestamp dalam urutan menaik dan dengan pengurutan __name__ dalam urutan menurun untuk dokumen Users/5000000000000001. Anda dapat menggunakan __name__ sebagai kolom terakhir dalam definisi indeks untuk mengubah urutan default hasil. 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