Mengonfigurasi Indeks Datastore dengan index.yaml

Anda dapat menggunakan Firestore dalam mode Datastore (Datastore) untuk menyimpan data bagi aplikasi yang berjalan di lingkungan standar. Datastore menggunakan indeks untuk setiap kueri yang dibuat aplikasi Anda. Indeks ini diupdate setiap kali entity berubah, sehingga hasilnya dapat ditampilkan dengan cepat saat aplikasi membuat kueri. Untuk melakukan ini, Datastore perlu mengetahui terlebih dahulu kueri mana yang akan dibuat oleh aplikasi. Anda menentukan indeks yang diperlukan aplikasi Anda di file konfigurasi index.yaml. Anda dapat menggunakan emulator Datastore untuk membuat file secara otomatis saat menguji aplikasi, atau menulis file Anda sendiri. File index.yaml harus diupload saat Anda men-deploy aplikasi.

Tentang index.yaml

Setiap kueri Datastore yang dibuat oleh aplikasi memerlukan indeks yang sesuai. Indeks untuk kueri sederhana, seperti kueri atas satu properti, dibuat secara otomatis. Indeks untuk kueri kompleks harus ditentukan dalam file konfigurasi bernama index.yaml. File ini diupload dengan aplikasi untuk membuat indeks di Datastore.

Berikut adalah contoh file index.yaml:

indexes:

- kind: Cat
  ancestor: no
  properties:
  - name: name
  - name: age
    direction: desc

- kind: Cat
  properties:
  - name: name
    direction: asc
  - name: whiskers
    direction: desc

- kind: Store
  ancestor: yes
  properties:
  - name: business
    direction: asc
  - name: owner
    direction: asc

Sintaksis index.yaml adalah format YAML. Untuk mengetahui informasi lebih lanjut tentang sintaksis ini, lihat situs YAML untuk mengetahui informasi selengkapnya.

Definisi indeks

index.yaml memiliki satu elemen daftar yang disebut indexes. Setiap elemen dalam daftar mewakili indeks untuk aplikasi.

Elemen indeks dapat memiliki elemen berikut:

kind
Jenis entity untuk kueri. Ini harus berupa argumen kind yang ditentukan ke datastore.NewKey saat membuat entity. Elemen ini bersifat wajib.
properties

Daftar properti yang akan disertakan sebagai kolom indeks, yang akan diurutkan: properti yang digunakan dalam filter kesetaraan terlebih dahulu, diikuti dengan properti yang digunakan dalam filter ketidaksetaraan, lalu tata urutan dan arahnya.

Setiap elemen dalam daftar ini memiliki elemen berikut:

name
Nama datastore properti.
direction
Arah dalam mengurutkan, asc untuk menaik atau desc untuk menurun. Ini hanya diperlukan untuk properti yang digunakan dalam tata urutan kueri, dan harus sesuai dengan arah yang digunakan oleh kueri. Defaultnya adalah asc.
ancestor

yes jika kueri memiliki klausa ancestor (Query.Ancestor). Defaultnya adalah no.

Membuat file indeks

Anda dapat membuat file indeks secara manual, menggunakan editor teks dan mengikuti tata letak file yang dijelaskan di atas. Pendekatan yang lebih efisien adalah membuat file secara otomatis saat Anda menguji aplikasi secara lokal. Anda dapat menggabungkan kedua metode ini.

Saat melakukan pengujian di lingkungan lokal, Anda dapat menggunakan perintah emulator gcloud untuk memulai layanan yang mengemulasi Datastore sebelum menjalankan aplikasi:

gcloud beta emulators datastore start --data-dir DATA-DIR

Gunakan flag --data-dir untuk menentukan direktori yang akan memunculkan file index.yaml yang dihasilkan secara otomatis.

Saat menguji aplikasi, setiap kali Anda membuat kueri Datastore, emulator akan menambahkan definisi indeks yang dihasilkan ke index.yaml. Semua definisi indeks yang dibuat secara otomatis akan muncul dalam file di bawah baris berikut:

# AUTOGENERATED

Semua definisi indeks di atas baris ini dianggap berada di bawah kontrol manual, dan tidak diupdate oleh server web pengembangan aplikasi. Server web hanya akan membuat perubahan di bawah baris, dan hanya akan melakukannya jika file index.yaml lengkap tidak mendeskripsikan indeks yang memperhitungkan kueri yang dijalankan oleh aplikasi. Untuk mengontrol definisi indeks otomatis, pindahkan ke atas baris ini.

Emulator dapat memperbarui definisi yang ada di bawah baris ini saat aplikasi membuat kueri. Jika aplikasi menghasilkan setiap kueri yang akan dibuat saat Anda mengujinya, entri yang dihasilkan di index.yaml akan lengkap. Anda mungkin perlu mengedit file secara manual untuk menghapus indeks yang tidak digunakan dalam produksi, atau untuk menentukan indeks yang tidak dibuat saat pengujian.

Men-deploy file konfigurasi indeks

Untuk men-deploy file konfigurasi index.yaml, jalankan perintah berikut:

gcloud app deploy index.yaml

Menghapus indeks yang tidak digunakan

Saat Anda mengubah atau menghapus indeks dari konfigurasi indeks, indeks asli tidak akan otomatis dihapus dari App Engine. Hal ini memberi Anda kesempatan untuk membiarkan aplikasi versi lama tetap berjalan saat indeks baru sedang dibuat, atau segera kembali ke versi lama jika ada masalah pada versi yang lebih baru.

Setelah yakin bahwa indeks lama tidak lagi diperlukan, Anda dapat menghapusnya dari App Engine dengan cara berikut:

gcloud datastore indexes cleanup index.yaml