Menggunakan Cloud Firestore dengan Firebase Realtime Database

Anda dapat menggunakan Firebase Realtime Database dan Cloud Firestore di aplikasi Anda, serta memanfaatkan semua keuntungan solusi database yang sesuai dengan kebutuhan Anda. Misalnya, Anda mungkin ingin memanfaatkan dukungan Realtime Database untuk kehadiran, seperti yang diuraikan dalam bagian Membangun Kehadiran di Cloud Firestore.

Pelajari lebih lanjut tentang perbedaan di antara database.

Memindahkan data ke Cloud Firestore

Jika Anda memutuskan ingin memigrasikan beberapa data dari Realtime Database ke Cloud Firestore, pertimbangkan alur berikut. Karena setiap database memiliki kebutuhan yang unik dan pertimbangan secara struktural, lokasi migrasi otomatis tidak tersedia. Sebagai gantinya, Anda bisa mengikuti perkembangan umum ini:

  1. Petakan struktur data dan aturan keamanan dari Realtime Database ke Cloud Firestore. Realtime Database dan Cloud Firestore mengandalkan Firebase Authentication, sehingga Anda tidak perlu mengubah autentikasi pengguna untuk aplikasi Anda. Namun, aturan keamanan dan model data itu berbeda dan Anda harus memperhitungkan perbedaan tersebut dengan cermat sebelum mulai memindahkan data ke Cloud Firestore.

  2. Pindahkan data historis. Selagi menyiapkan struktur data baru di Cloud Firestore, Anda dapat memetakan dan memindahkan data yang ada dari Realtime Database ke instance Cloud Firestore yang baru. Namun, jika menggunakan kedua database di aplikasi, Anda tidak perlu memindahkan data historis dari Realtime Database.

  3. Duplikasikan data baru ke Firestore secara realtime. Gunakan Cloud Functions untuk menulis data baru ke database Cloud Firestore baru Anda selagi data ditambahkan ke Realtime Database.

  4. Jadikan Cloud Firestore sebagai database utama Anda untuk data yang dimigrasikan. Setelah memigrasikan beberapa data, gunakan Cloud Firestore sebagai database utama dan kurangi penggunaan Realtime Database untuk data yang dimigrasikan. Pertimbangkan versi aplikasi yang masih terhubung dengan Realtime Database untuk data tersebut, serta rencana Anda untuk terus mendukungnya.

Pastikan Anda memperhitungkan biaya penagihan, baik untuk Realtime Database maupun Cloud Firestore.

Memetakan data Anda

Data dalam Realtime Database disusun sebagai 1 pohon, sementara Cloud Firestore mendukung hierarki data yang lebih eksplisit melalui dokumen, koleksi, dan subkoleksi. Jika memindahkan beberapa data dari Realtime Database ke Cloud Firestore, sebaiknya pertimbangkan arsitektur yang berbeda untuk data Anda.

Perbedaan utama yang perlu diperhatikan

Jika memindahkan data dari pohon Realtime Database yang ada ke dokumen dan koleksi Cloud Firestore, perhatikan perbedaan utama antara kedua database tersebut. Perbedaan tersebut dapat memengaruhi metode penyusunan data di Cloud Firestore:

  • Permintaan kueri dangkal menjadikan struktur data hierarkis lebih fleksibel.
  • Permintaan kueri kompleks menghadirkan lebih banyak perincian dan mengurangi kebutuhan akan data duplikat.
  • Query cursor memiliki penomoran halaman yang lebih canggih.
  • Transaksi menjadi lebih efisien dan tidak lagi memerlukan root yang sama untuk semua data Anda.
  • Biaya penagihan berbeda antara Realtime Database dan Cloud Firestore. Dalam banyak kasus, Cloud Firestore mungkin lebih mahal daripada Realtime Database, terutama jika Anda mengandalkan banyak operasi kecil. Sebaiknya kurangi jumlah operasi pada database Anda dan hindari penulisan yang tidak perlu. Pelajari lebih lanjut tentang perbedaan penagihan antara Realtime Database dan Cloud Firestore.

Pelaksanaan praktik terbaik

Contoh berikut mencerminkan beberapa pertimbangan yang bisa Anda ambil saat memindahkan data antar database. Anda dapat memanfaatkan pembacaan dangkal dan kemampuan permintaan kueri yang lebih baik guna membuat struktur data yang lebih alami dibanding struktur data yang Anda gunakan dengan Realtime Database.

Ambil contoh sebuah aplikasi panduan kota yang membantu pengguna menemukan bangunan terkenal di kota-kota di seluruh dunia. Karena Realtime Database kekurangan pembacaan dangkal, Anda mungkin harus menyusun data ke dalam 2 node tingkat atas berikut ini:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore memiliki pembacaan dangkal, jadi permintaan kueri untuk dokumen dalam koleksi tidak mengambil data dari subkoleksi. Akibatnya, Anda dapat menyimpan informasi bangunan terkenal ke dalam subkoleksi:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

Dokumen memiliki ukuran maksimal 1 MB. Oleh karena itu, sebaiknya simpan informasi bangunan terkenal sebagai subkoleksi dan buat setiap dokumen kota dengan ukuran lebih kecil, bukan dokumen berukuran besar dengan daftar bertingkat.

Kemampuan membuat permintaan kueri tingkat lanjut Cloud Firestore mengurangi kebutuhan menduplikat data untuk pola akses umum. Misalnya, pikirkan layar di aplikasi pemandu kota yang menunjukkan semua ibu kota yang diurutkan berdasarkan populasi penduduk. Di Realtime Database, cara yang paling efisien untuk melakukannya adalah dengan mempertahankan daftar ibu kota terpisah yang menduplikasi data dari daftar cities, sebagai berikut:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

Di Cloud Firestore, Anda dapat mengekspresikan daftar ibu kota berdasarkan urutan populasi sebagai 1 kueri tunggal:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Baca model data Cloud Firestore lebih lanjut dan lihat berbagai Solusi yang kami sediakan untuk mendapatkan lebih banyak ide tentang cara membuat struktur database Cloud Firestore.

Melindungi data

Jika Anda menggunakan Aturan Keamanan Cloud Firestore untuk klien Android, Apple, atau Web, atau Identity and Access Management (IAM) untuk server, pastikan Anda mengamankan data yang berada di Cloud Firestore dan juga Realtime Database. Autentikasi pengguna untuk kedua database ditangani oleh Authentication, sehingga Anda tidak perlu mengubah implementasi Authentication saat mulai menggunakan Cloud Firestore.

Perbedaan utama yang perlu diperhatikan

  • SDK seluler dan web menggunakan Aturan Keamanan Cloud Firestore, sedangkan SDK server menggunakan Pengelolaan Akses dan Identitas (IAM) untuk mengamankan data.
  • Aturan Keamanan Cloud Firestore tidak menurun, kecuali Anda menggunakan karakter pengganti. Dokumen dan koleksi juga tidak mewarisi aturan.
  • Anda tidak perlu lagi memvalidasi data secara terpisah (seperti yang dilakukan di Realtime Database).
  • Cloud Firestore memeriksa aturan sebelum menjalankan kueri guna memastikan pengguna memiliki akses yang sesuai untuk semua data yang ditampilkan oleh kueri.

Memindahkan data historis ke Cloud Firestore

Setelah memetakan struktur data dan keamanan ke model data dan keamanan Cloud Firestore, Anda dapat mulai menambahkan data. Jika Anda berencana untuk meminta data historis setelah memindahkan aplikasi dari Realtime Database ke Cloud Firestore, tambahkan ekspor data lama Anda ke database Cloud Firestore yang baru. Jika Anda berencana menggunakan Realtime Database dan Cloud Firestore di aplikasi Anda, lewati langkah ini.

Untuk menghindari penimpaan data baru dengan data yang lama, sebaiknya tambahkan data historis terlebih dahulu. Jika Anda menambahkan data baru ke kedua database secara bersamaan, seperti yang dibahas pada langkah berikutnya, pastikan untuk memberi prioritas kepada data baru yang ditambahkan ke Cloud Firestore oleh Cloud Functions.

Untuk memigrasikan data historis ke Cloud Firestore, ikuti langkah-langkah ini:

  1. Ekspor data Anda dari Realtime Database atau gunakan cadangan terbaru.
    1. Buka bagian Realtime Database di Firebase console.
    2. Dari tab Data, pilih node level root dari database, lalu pilih Export JSON dari menu.
  2. Buat database baru di Cloud Firestore, lalu tambahkan data Anda.

    Pertimbangkan strategi berikut saat memindahkan beberapa data ke Cloud Firestore:

    • Tulis skrip khusus yang membawakan data kepada Anda. Meskipun kami tidak dapat menawarkan template untuk skrip ini karena setiap database memiliki kebutuhan yang unik, pakar Cloud Firestore di saluran Slack atau Stack Overflow dapat meninjau skrip Anda atau menawarkan saran untuk situasi spesifik Anda.
    • Gunakan SDK server (Node.js, Java, Python, atau Go) untuk menulis data secara langsung ke Cloud Firestore. Untuk mendapatkan petunjuk tentang cara menyiapkan SDK server, lihat Mulai.
    • Untuk mempercepat migrasi data yang besar, gunakan batch operasi tulis dan kirimkan maksimal 500 operasi dalam 1 permintaan jaringan.
    • Agar tidak melebihi batas tarif Cloud Firestore, batasi operasi hingga 500 penulisan/detik untuk setiap koleksi.

Menambahkan data baru ke Cloud Firestore

Untuk menjaga persamaan antar database, tambahkan data baru ke kedua database secara realtime. Gunakan Cloud Functions untuk memicu penulisan ke Cloud Firestore setiap kali klien menulis ke Realtime Database. Pastikan Cloud Firestore memprioritaskan data baru yang berasal dari Cloud Functions melebihi setiap penulisan lain yang Anda buat dari migrasi data historis.

Buat fungsi untuk menulis data baru atau untuk mengubah data ke Cloud Firestore setiap kali klien menulis data ke Realtime Database. Pelajari lebih lanjut tentang pemicu Realtime Database untuk Cloud Functions.

Menjadikan Cloud Firestore sebagai database utama untuk data yang dimigrasikan

Jika Anda memutuskan untuk menggunakan Cloud Firestore sebagai database utama untuk beberapa data, pastikan Anda memperhitungkan fungsi pencerminan data yang telah disiapkan dan memvalidasi Aturan Keamanan Cloud Firestore.

  1. Jika Anda menggunakan Cloud Functions untuk menjaga persamaan antar database, pastikan Anda tidak menduplikat operasi tulis di kedua database secara berulang. Alihkan fungsi menulis ke satu database atau hapus fungsi sepenuhnya, dan mulai hentikan fungsi penulisan untuk data yang dimigrasi di aplikasi yang masih terhubung dengan Realtime Database. Cara penanganan hal ini untuk aplikasi bergantung pada kebutuhan dan pengguna Anda.

  2. Pastikan bahwa data Anda diamankan dengan baik. Validasikan Aturan Keamanan Cloud Firestore atau penyiapan IAM Anda.