Tip Mengoptimalkan Performa Database

JS NEWS – Ada beberapa cara berbeda untuk meningkatkan performa Firebase Realtime Database di aplikasi Anda. Guna mengetahui hal yang dapat Anda lakukan untuk mengoptimalkan performa Realtime Database Anda, kumpulkan data melalui berbagai fitur pemantauan Realtime Database, kemudian buat perubahan pada penggunaan aplikasi atau Realtime Database Anda.

Memantau performa Realtime Database

Anda dapat mengumpulkan data mengenai performa Realtime Database melalui sejumlah alat yang berbeda, bergantung pada tingkat perincian yang Anda perlukan:

  • Ringkasan tingkat tinggi: Gunakan fitur profiler untuk melihat daftar kueri yang tidak diindeks dan ringkasan real-time operasi baca/tulis.
  • Estimasi penggunaan yang ditagihkan: Gunakan metrik penggunaan yang tersedia di Firebase console untuk melihat metrik performa tingkat tinggi dan penggunaan yang ditagihkan.
  • Tampilan data terperinci: Gunakan Cloud Monitoring untuk melihat tampilan yang lebih terperinci mengenai performa database Anda dari waktu ke waktu.

Periksa bug: Sebelum mulai mengimplementasikan perubahan apa pun ke aplikasi Anda, pastikan aplikasi tersebut melakukan sinkronisasi data seperti yang seharusnya. Untuk menunjukkan masalah dengan tepat, aktifkan logging debug di SDK AndroidiOS, dan Web. Periksa proses latar belakang dan sinkronisasi di aplikasi untuk memastikan bahwa aplikasi mendownload data dengan frekuensi dan volume yang Anda inginkan.

Meningkatkan performa berdasarkan metrik

Setelah mengumpulkan data, cobalah tips berikut berdasarkan area performa yang ingin Anda tingkatkan.

Sekilas tentang strategi peningkatan performa
MetrikDeskripsiPraktik terbaik
Beban/PenggunaanOptimalkan jumlah kapasitas database yang digunakan dalam pemrosesan permintaan, kapan pun hal itu dilakukan (tergambar dalam metrik **Load** atau **io/database_load**).Mengoptimalkan struktur data Anda
Melakukan sharding data di seluruh database
Meningkatkan efisiensi pemroses
Membatasi download dengan aturan berbasis kueri
Mengoptimalkan koneksi
Koneksi aktifSeimbangkan jumlah koneksi simultan aktif dengan database Anda agar tetap berada di bawah batas 200.000 koneksi.Melakukan sharding data di seluruh database
Mengurangi koneksi baru
Bandwidth keluarJika download dari database Anda sepertinya lebih tinggi daripada seharusnya, Anda dapat meningkatkan efisiensi operasi baca dan mengurangi jumlah overhead enkripsi.Mengoptimalkan koneksi
Mengoptimalkan struktur data Anda
Membatasi download dengan aturan berbasis kueri
Menggunakan kembali sesi SSL
Meningkatkan efisiensi pemroses
Membatasi akses ke data
PenyimpananPastikan Anda tidak menyimpan data yang tidak digunakan, atau seimbangkan data yang Anda simpan di semua database dan/atau produk Firebase agar tetap berada di bawah kuota.Membersihkan data yang tidak digunakan
Mengoptimalkan struktur data Anda
Melakukan sharding data di seluruh database
Menggunakan Firebase Storage
Mengoptimalkan koneksi

Permintaan RESTful, seperti GET dan PUT, masih memerlukan koneksi, meskipun koneksi tersebut tidak bertahan lama. Koneksi yang sering dan tidak lama ini dapat meningkatkan biaya koneksi, beban database, dan bandwidth keluar secara signifikan dibandingkan dengan koneksi real-time aktif ke database Anda.

Kapan pun memungkinkan, gunakan SDK native untuk platform aplikasi Anda, bukan REST API. SDK akan mempertahankan penggunaan koneksi bebas, sehingga akan mengurangi biaya enkripsi SSL dan beban database yang dapat bertambah di REST API.

Jika Anda menggunakan REST API, pertimbangkan untuk menggunakan HTTP keep-alive agar tetap dapat menggunakan koneksi terbuka atau menggunakan peristiwa terkirim ke server yang dapat mengurangi biaya handshake SSL.

Melakukan sharding data di lebih dari satu database

Membagi data di lebih dari satu instance Realtime Database, atau yang dikenal dengan sharding database, memiliki tiga keuntungan:

  1. Meningkatkan total koneksi simultan aktif yang diizinkan di aplikasi Anda dengan membaginya di semua instance database.
  2. Menyimbangkan beban di semua instance database.
  3. Jika Anda memiliki kelompok pengguna independen yang hanya perlu mengakses set data terpisah, gunakan instance database berbeda untuk throughput yang lebih tinggi dan latensi yang lebih rendah.

Jika Anda menggunakan paket harga Blaze, Anda dapat membuat beberapa instance database di project Firebase yang sama menggunakan metode autentikasi pengguna umum di semua instance database.

Pelajari lebih lanjut cara dan kapan sharding data sebaiknya dilakukan.

Membuat struktur data yang efisien

Karena Realtime Database mengambil data dari node turunan suatu lokasi dan dari lokasi itu sendiri, pastikan struktur data Anda serata mungkin. Dengan demikian, Anda dapat mengambil data yang Anda perlukan secara selektif, tanpa perlu mendownload data yang tidak diperlukan oleh klien.

Khususnya, pertimbangkan untuk menulis dan menghapus saat Anda sedang membuat struktur data. Misalnya, lokasi yang memiliki ribuan cabang berpotensi memerlukan biaya yang tinggi jika dihapus. Membaginya ke dalam beberapa jalur yang memiliki sub-hierarki dan lebih sedikit cabang per node bisa mempercepat penghapusan.

Selain itu, setiap penulisan bisa menggunakan hingga 0,1% dari total penggunaan database Anda. Atur struktur data Anda dengan cara yang membuat Anda dapat mengelompokkan operasi tulis ke dalam satu operasi sebagai update multi-jalur melalui metode update() dalam permintaan PATCH RESTful atau SDK.

Untuk mengoptimalkan struktur data dan meningkatkan performa, ikuti praktik terbaik seputar struktur data.

Mencegah akses tanpa izin

Cegah operasi tanpa izin di database Anda dengan Aturan Realtime Database. Misalnya, penggunaan aturan dapat mencegah skenario saat pengguna yang berbahaya mampu mendownload seluruh database Anda berulang kali.

Menggunakan aturan berbasis kueri untuk membatasi download

Aturan Realtime Database membatasi akses ke data di database Anda, tetapi dapat pula berfungsi sebagai pembatas untuk data yang ditampilkan melalui operasi baca. Jika Anda menggunakan aturan berbasis kueri, seperti yang ditetapkan oleh ekspresi query. seperti query.limitToFirst, kueri hanya akan mengambil data yang dibatasi oleh aturan.

Misalnya, aturan berikut membatasi akses baca hanya untuk 1.000 hasil kueri pertama, yang diurutkan berdasarkan prioritas:

messages: {  ".read": "query.orderByKey &&            query.limitToFirst <= 1000"}// Example query:db.ref("messages").limitToFirst(1000)                  .orderByKey("value")
Mengindeks kueri

Dengan mengindeks data, jumlah total bandwidth yang digunakan setiap kueri yang dijalankan oleh aplikasi Anda akan berkurang.

Menggunakan kembali sesi SSL

Kurangi biaya overhead enkripsi SSL pada koneksi yang dilanjutkan dengan membuat tiket sesi TLS. Hal ini sangat membantu jika Anda memerlukan koneksi rutin dan aman ke database.

Meningkatkan efisiensi listener

Letakkan pemroses Anda pada jalur sebawah mungkin agar Anda dapat membatasi jumlah data yang disinkronkan. Pemroses Anda harus dekat dengan data yang ingin didapatkan. Jangan letakkan pemroses di root database karena akan menyebabkan seluruh database Anda terdownload.

Baca Juga : Tutorial Membangun SMS Gateway dengan Android, SMSGateway.me, dan Laravel

Tambahkan kueri untuk membatasi data yang dihasilkan oleh operasi pemrosesan, dan gunakan pemroses yang hanya mendownload update ke data — misalnya, on() bukan once(). Pesan .once() untuk tindakan yang benar-benar tidak memerlukan update data. Selain itu, urutkan kueri Anda menggunakan orderByKey() kapan pun memungkinkan demi mendapatkan performa terbaik. Pengurutan menggunakan orderByChild() bisa 6-8 kali lebih lambat, dan pengurutan dengan orderByValue() bisa sangat lambat untuk set data berukuran besar, karena memerlukan pembacaan seluruh lokasi dari lapisan persistensi.

Pastikan juga Anda menambahkan pemroses secara dinamis dan menghapusnya jika sudah tidak diperlukan.

Menghapus data yang tidak digunakan

Hapus setiap data duplikat atau yang tidak terpakai lagi secara berkala di database Anda. Anda dapat menjalankan backup untuk memeriksa data secara manual atau melakukan backup secara berkala ke bucket Google Cloud Storage. Pertimbangkan juga untuk menghosting data yang disimpan melalui Firebase Storage.

Mengirimkan kode yang dapat diskalakan dan diupdate

Aplikasi yang terpasang di perangkat IoT harus menyertakan kode yang dapat Anda skalakan dan update dengan mudah. Pastikan Anda menguji kasus penggunaan secara menyeluruh, mempertimbangkan skenario yang dapat mengembangkan basis pengguna Anda secara eksponensial, dan menyediakan kemampuan untuk menerapkan update ke kode Anda. Pertimbangkan perubahan penting yang mungkin perlu Anda lakukan nanti, seandainya Anda memutuskan untuk melakukan sharding data.

SUMBER

Share Is Cool