Menjalankan Emulator Datastore

Emulator Datastore menyediakan emulasi lokal lingkungan Datastore produksi. Anda dapat menggunakan emulator untuk mengembangkan dan menguji aplikasi secara lokal. Selain itu, emulator dapat membantu Anda membuat indeks untuk instance Datastore production dan menghapus indeks yang tidak diperlukan. Halaman ini akan memandu Anda dalam menginstal emulator, memulai emulator, dan menetapkan variabel lingkungan untuk menghubungkan aplikasi ke emulator.

Masalah umum

Secara default, emulator Datastore tidak mengemulasi fitur yang diperkenalkan oleh Firestore dalam mode Datastore. Perilaku emulator default berikut tidak cocok dengan mode Datastore:

  • Emulator menyimulasikan konsistensi tertunda, secara default. Firestore dalam mode Datastore sangat konsisten.
  • Emulator tidak mengizinkan kueri non-ancestor dalam transaksi. Firestore dalam mode Datastore tidak lagi memiliki batasan ini.
  • Emulator tidak mendukung kueri IN, !=, dan NOT-IN.
  • Emulator tidak mendukung kueri agregasi seperti COUNT(*).

Namun, flag --use-firestore-in-datastore-mode membantu melonggarkan beberapa batasan di atas untuk Firestore dalam Mode Datastore.

  • Emulator menyimulasikan kueri non-ancestor yang sangat konsisten.
  • Emulator memungkinkan kueri non-ancestor dalam transaksi.
  • Emulator menghapus batasan 25 grup entity dalam satu transaksi.

Untuk mengemulasi Firestore dalam mode Datastore, gunakan gcloud emulators firestore start --database-mode=datastore-mode.

Sebelum memulai

Untuk menggunakan emulator Datastore, Anda memerlukan:

Menginstal emulator

Emulator Datastore adalah komponen gcloud CLI. Gunakan perintah gcloud components install untuk menginstal emulator Datastore:

gcloud components install cloud-datastore-emulator

Direktori data emulator

Emulator menyimulasikan Datastore dengan membuat /WEB-INF/appengine-generated/local_db.bin dalam direktori data yang ditentukan dan menyimpan data dalam local_db.bin. Secara default, emulator menggunakan direktori data ~/.config/gcloud/emulators/datastore/. File local_db.bin akan dipertahankan di antara sesi emulator. Anda dapat menyiapkan beberapa direktori data dan menganggap masing-masing direktori sebagai instance mode Datastore lokal yang terpisah. Untuk menghapus konten file local_db.bin, hentikan emulator dan hapus file secara manual.

Memulai emulator

Mulai emulator dengan menjalankan datastore start dari command prompt:

gcloud emulators datastore start [flags]

dengan [flags] adalah argumen command line opsional yang diberikan ke gcloud CLI. Contoh:

  • --data-dir=[DATA_DIR] mengubah direktori data emulator. Emulator akan membuat file /WEB-INF/appengine-generated/local_db.bin di dalam [DATA_DIR] atau, jika tersedia, menggunakan file yang sudah ada.

  • --no-store-on-disk mengonfigurasi emulator agar tidak mempertahankan data apa pun ke disk untuk sesi emulator.

Lihat referensi gcloud beta emulators datastore start untuk mengetahui daftar lengkap flag opsional.

Setelah memulai emulator, Anda akan melihat pesan yang mirip seperti berikut:

...
[datastore] Dev App Server is now running.

Untuk menghentikan emulator, ketik Control-C di command prompt.

Menyetel variabel lingkungan

Setelah memulai emulator, Anda perlu menetapkan variabel lingkungan agar aplikasi Anda terhubung ke emulator, bukan database mode Datastore produksi. Tetapkan variabel lingkungan ini pada mesin yang sama dengan yang digunakan untuk menjalankan aplikasi Anda.

Anda perlu menetapkan variabel lingkungan setiap kali memulai emulator. Variabel lingkungan bergantung pada nomor port yang ditetapkan secara dinamis, yang dapat berubah saat Anda memulai ulang emulator.

Menetapkan variabel secara otomatis

Jika aplikasi dan emulator berjalan pada mesin yang sama, Anda dapat menetapkan variabel lingkungan secara otomatis:

Linux / Mac

Jalankan env-init menggunakan substitusi perintah:

$(gcloud beta emulators datastore env-init)

Windows

Buat dan jalankan file batch menggunakan output dari env-init:

gcloud beta emulators datastore env-init > set_vars.cmd && set_vars.cmd

Sekarang aplikasi Anda akan terhubung ke emulator Datastore.

Menetapkan variabel secara manual

Jika aplikasi dan emulator Anda berjalan pada mesin yang berbeda, tetapkan variabel lingkungan secara manual:

  1. Jalankan perintah env-init:

    gcloud beta emulators datastore env-init
  2. Pada mesin yang menjalankan aplikasi Anda, tetapkan variabel dan nilai lingkungan seperti yang diarahkan oleh output perintah env-init. Contoh:

    Linux / macOS
    export DATASTORE_DATASET=my-project-id
    export DATASTORE_EMULATOR_HOST=::1:8432
    export DATASTORE_EMULATOR_HOST_PATH=::1:8432/datastore
    export DATASTORE_HOST=http://::1:8432
    export DATASTORE_PROJECT_ID=my-project-id
    Windows
    set DATASTORE_DATASET=my-project-id
    set DATASTORE_EMULATOR_HOST=::1:8432
    set DATASTORE_EMULATOR_HOST_PATH=::1:8432/datastore
    set DATASTORE_HOST=http://::1:8432
    set DATASTORE_PROJECT_ID=my-project-id

Sekarang aplikasi Anda akan terhubung ke emulator Datastore. Perhatikan bahwa project ID dan port yang diberikan oleh perintah akan berbeda dengan contoh di atas.

Memperbarui dan menghapus indeks

Dengan menjalankan aplikasi menggunakan emulator, Anda dapat membuat indeks untuk database mode Datastore produksi, serta menghapus indeks yang tidak diperlukan. Pelajari lebih lanjut di artikel Menggunakan gcloud CLI.

Menghapus variabel lingkungan

Setelah selesai menggunakan emulator, hentikan emulator (Control-C) dan hapus variabel lingkungan sehingga aplikasi Anda akan terhubung ke database mode Datastore produksi.

Menghapus variabel secara otomatis

Jika aplikasi dan emulator berjalan pada mesin yang sama, Anda dapat menghapus variabel lingkungan secara otomatis:

Linux / Mac

Jalankan env-unset menggunakan substitusi perintah:

$(gcloud beta emulators datastore env-unset)

Windows

Buat dan jalankan file batch menggunakan output dari env-unset:

gcloud beta emulators datastore env-unset > remove_vars.cmd && remove_vars.cmd

Aplikasi Anda kini akan terhubung ke database mode Datastore produksi.

Menghapus variabel secara manual

Jika aplikasi dan emulator Anda berjalan pada komputer yang berbeda, hapus variabel lingkungan secara manual:

  1. Jalankan perintah env-unset:

    gcloud beta emulators datastore env-unset
  2. Di mesin yang menjalankan aplikasi Anda, hapus variabel lingkungan seperti yang diarahkan oleh output perintah env-unset. Contoh:

    Linux / macOS
    unset DATASTORE_DATASET
    unset DATASTORE_EMULATOR_HOST
    unset DATASTORE_EMULATOR_HOST_PATH
    unset DATASTORE_HOST
    unset DATASTORE_PROJECT_ID
    Windows
    set DATASTORE_DATASET=
    set DATASTORE_EMULATOR_HOST=
    set DATASTORE_EMULATOR_HOST_PATH=
    set DATASTORE_HOST=
    set DATASTORE_PROJECT_ID=

Aplikasi Anda kini akan terhubung ke database mode Datastore produksi.