Cloud Firestore + Android adil

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:


  1. Tambahkan Firebase ke proyek sesuai dengan instruksi dari sini.
  2. 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 -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

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 -> //   .   querySnapshot.documents } .addOnFailureListener { exception -> //      } } 

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 -> //   .   querySnapshot.documents val taskList: List<RemoteTask> = querySnapshot.toObjects(RemoteTask::class.java) } .addOnFailureListener { exception -> //      } } 

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 { //   } .addOnFailureListener { //     } 

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 { //   } .addOnFailureListener { //     } 

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 { //   } .addOnFailureListener { //     } 

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 -   // 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.


  1. Instal Node.js dan npm
  2. Instal paket firebase-admin dengan menjalankan perintah
    npm install firebase-admin --save
  3. Hasilkan file json dengan data koleksi. Contohnya dapat ditemukan di file Tasks.json.
  4. Untuk mengunduh, kita memerlukan kunci akses. Cara mendapatkannya dijelaskan dengan baik di artikel ini .
  5. 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
  6. 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.


Kinerja aplikasi

Source: https://habr.com/ru/post/id447640/


All Articles