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 di bagian Membangun Kehadiran di Cloud Firestore.
Pelajari lebih lanjut tentang perbedaan di antara database.
Memindahkan data ke Cloud Firestore
Jika Anda memutuskan untuk 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:
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.
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 baru Anda. Namun, jika menggunakan kedua database di aplikasi, Anda tidak perlu memindahkan data historis dari Realtime Database.
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.
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 di Realtime Database disusun sebagai satu hierarki, sedangkan 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 Anda memindahkan data dari hierarki Realtime Database yang ada ke dokumen dan koleksi Cloud Firestore, perhatikan perbedaan utama antara kedua database tersebut. Perbedaan berikut 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 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 dua 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 Cloud Firestore dalam membuat permintaan kueri tingkat lanjut mengurangi kebutuhan untuk
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 menyatakan daftar ibu kota berdasarkan urutan populasi sebagai kueri tunggal:
db.collection('cities')
.where('capital', '==', true)
.orderBy('population')
Baca selengkapnya tentang model data Cloud Firestore dan lihat berbagai Solusi kami untuk mendapatkan lebih banyak ide tentang cara menyusun database Cloud Firestore.
Melindungi data
Jika Anda menggunakan Cloud Firestore Security Rules untuk klien Android, Apple, atau Web, atau Identity Access Management (IAM) untuk server, pastikan Anda juga mengamankan data di Cloud Firestore maupun 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 Cloud Firestore Security Rules, sedangkan SDK server menggunakan Identity & Access Management (IAM) untuk mengamankan data.
- Cloud Firestore Security Rules tidak bersifat menurun, kecuali jika Anda menggunakan karakter pengganti. Dokumen dan koleksi juga tidak mewarisi aturan.
- Anda tidak perlu lagi memvalidasi data secara terpisah (seperti yang Anda lakukan 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 dapat melewati 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 berikut:
- Ekspor data Anda dari Realtime Database atau
gunakan cadangan terbaru.
- Buka bagian Realtime Database di konsol Firebase.
- Dari tab Data, pilih node level root dari database, lalu pilih Export JSON dari menu.
Buat database baru di Cloud Firestore, lalu tambahkan data Anda.
Pertimbangkan strategi berikut saat memindahkan sebagian data Anda 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 bagian Memulai.
- Untuk mempercepat migrasi data yang besar, gunakan batch operasi tulis dan kirimkan maksimal 500 operasi dalam satu permintaan jaringan.
- Agar tidak melebihi batas kapasitas 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 mengutamakan data baru yang berasal dari Cloud Functions daripada penulisan apa pun yang Anda buat dari migrasi data historis.
Buat fungsi untuk menulis data baru atau mengubah data ke Cloud Firestore setiap kali klien menulis data ke Realtime Database. Pelajari lebih lanjut pemicu Realtime Database untuk Cloud Functions.
Jadikan Cloud Firestore sebagai database utama Anda 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 Cloud Firestore Security Rules.
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.
Pastikan bahwa data Anda diamankan dengan baik. Validasi penyiapan Cloud Firestore Security Rules atau IAM Anda.