Belum lama ini, Google meluncurkan Cloud Firestore. Cloud Firestore adalah basis data NoSQL berbasis cloud yang Google posisikan sebagai pengganti untuk Realtime Database. Pada artikel ini saya ingin memberi tahu bagaimana cara menggunakannya.
Kemungkinan
Cloud Firestore memungkinkan Anda untuk menyimpan data di server jarak jauh, dengan mudah mengaksesnya dan memantau perubahan secara real time. Dokumentasi ini memiliki perbandingan Cloud Firestore dan Realtime Database yang sangat baik.
Membuat dan menghubungkan ke proyek
Di Firebase console, pilih Database dan klik Create database. Selanjutnya, pilih pengaturan akses. Untuk pengenalan, mode uji akan cukup bagi kita, tetapi pada prod lebih baik untuk mendekati masalah ini dengan lebih serius. Baca lebih lanjut tentang mode akses di sini .

Untuk mengkonfigurasi proyek, lakukan langkah-langkah berikut:
- Tambahkan Firebase ke proyek sesuai dengan instruksi dari sini.
- Tambahkan dependensi ke app / build.gradle
implementation 'com.google.firebase:firebase-firestore:18.1.0'
Sekarang semuanya sudah siap.
Untuk berkenalan dengan teknik dasar bekerja dengan Cloud Firestore, saya menulis sebuah aplikasi sederhana. Agar berhasil, Anda perlu membuat proyek di Firebase console dan menambahkan file google-services.json ke proyek di Android Studio.
Struktur penyimpanan data
Firestore menggunakan koleksi dan dokumen untuk menyimpan data. Dokumen adalah catatan yang berisi bidang apa pun. Dokumen digabungkan menjadi koleksi. Dokumen juga dapat berisi koleksi bersarang, tetapi ini tidak didukung di android. Jika kita menggambar analogi dengan database SQL, maka koleksi adalah tabel, dan dokumen adalah entri dalam tabel ini. Satu koleksi dapat berisi dokumen dengan kumpulan bidang yang berbeda.
Menerima dan merekam data
Untuk mendapatkan semua dokumen koleksi, kode berikut cukup
remoteDB.collection(βTasksβ) .get() .addOnSuccessListener { querySnapshot ->
Di sini kami meminta semua dokumen dari koleksi Tugas .
Perpustakaan memungkinkan Anda untuk menghasilkan kueri dengan parameter. Kode berikut menunjukkan cara mendapatkan dokumen dari koleksi berdasarkan kondisi
remoteDB.collection(βTasksβ) .whereEqualTo("title", "Task1") .get() .addOnSuccessListener { querySnapshot ->
Di sini kami meminta semua dokumen dari koleksi Tugas yang bidang judulnya sesuai dengan nilai Tugas1 .
Setelah menerima dokumen, mereka dapat segera dikonversi ke kelas data kami
remoteDB.collection(βTasksβ) .get() .addOnSuccessListener { querySnapshot ->
Untuk menulis, Anda perlu membuat Hashmap dengan data (di mana nama bidang bertindak sebagai kunci, dan nilai bidang ini sebagai nilai) dan mentransfernya ke perpustakaan. Kode berikut menunjukkan ini
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .add(taskData) .addOnSuccessListener {
Dalam contoh ini, dokumen baru akan dibuat dan Firestore akan menghasilkan id untuk itu. Untuk mengatur id Anda sendiri lakukan hal berikut
val taskData = HashMap<String, Any>() taskData["title"] = task.title taskData["created"] = Timestamp(task.created.time / 1000, 0) remoteDB.collection("Tasks") .document("New task") .set(taskData) .addOnSuccessListener {
Dalam hal ini, jika tidak ada dokumen dengan id sama dengan tugas baru , maka akan dibuat, dan jika ada, maka bidang yang ditentukan akan diperbarui.
Opsi lain untuk membuat / memperbarui dokumen
remoteDB.collection("Tasks") .document("New task") .set(mapToRemoteTask(task)) .addOnSuccessListener {
Berlangganan perubahan
Firestore memungkinkan Anda untuk berlangganan perubahan data. Anda dapat berlangganan perubahan pada koleksi serta perubahan pada dokumen tertentu
remoteDB.collection("Tasks") .addSnapshotListener { querySnapshot, error ->
querySnapshot.documents - berisi daftar terbaru dari semua dokumen
querySnapshot.documentChanges - berisi daftar perubahan. Setiap objek berisi dokumen yang dimodifikasi dan jenis perubahan. 3 jenis perubahan dimungkinkan
TAMBAH - dokumen ditambahkan,
DIUBAH - dokumen telah diubah,
DIHAPUS - dokumen dihapus
Memuat sejumlah besar data
Realtime Database menyediakan mekanisme yang kurang nyaman untuk mengunduh data dalam jumlah besar, yang terdiri dari pengeditan file json secara manual dan mengunduhnya. Di luar kotak, Firestore tidak menyediakan hal semacam itu. Sangat tidak nyaman untuk menambahkan dokumen baru sampai saya menemukan cara untuk dengan mudah memuat sejumlah besar informasi. Agar Anda tidak memiliki masalah seperti milik saya, di bawah ini saya akan melampirkan instruksi tentang cara mengunduh data dalam jumlah besar dengan cepat dan mudah. Instruksi ditemukan di Internet.
- Instal Node.js dan npm
- Instal paket firebase-admin dengan menjalankan perintah
npm install firebase-admin --save
- Hasilkan file json dengan data koleksi. Contohnya dapat ditemukan di file Tasks.json.
- Untuk mengunduh, kita memerlukan kunci akses. Cara mendapatkannya dijelaskan dengan baik di artikel ini .
- Dalam file export.js tuliskan data Anda
memerlukan ('./ firestore_key.json') - file dengan kunci akses. Saya berada di folder dengan skrip
<YOU_DATABASE> - nama basis firestore Anda
"./json/Tasks.json" - path ke file tempat data
['dibuat'] - daftar nama bidang dengan tipe Timestamp - Jalankan skrip
node export.js
Script menggunakan perkembangan dalenguyen
Kesimpulan
Saya menggunakan Cloud Firestore di salah satu proyek saya dan tidak mengalami masalah serius. Salah satu koleksi saya berisi sekitar 15.000 dokumen dan pertanyaan tentangnya cukup cepat dan ini tanpa menggunakan indeks. Menggunakan Cloud Firestore bersama dengan Room dan Remote Config, Anda dapat secara signifikan mengurangi jumlah panggilan ke basis data dan tidak melampaui batas bebas. Dengan tarif gratis per hari, Anda dapat membaca 50.000 dokumen, mencatat 20.000 dan menghapus 20.000.