Firebase dapat digunakan untuk melakukan kueri ad-hoc data Anda menggunakan kunci turunan arbitrer. Jika sudah mengetahui akan seperti apa indeksnya, Anda dapat menentukannya melalui aturan .indexOn
dalam Aturan Keamanan Firebase Realtime Database untuk meningkatkan performa kueri.
Menentukan Indeks Data
Firebase menyediakan berbagai alat canggih untuk mengurutkan dan membuat kueri atas data Anda. Secara khusus, Firebase dapat digunakan untuk membuat kueri ad-hoc pada koleksi node menggunakan kunci turunan umum. Seiring pertumbuhan aplikasi Anda, performa kueri ini akan mengalami penurunan. Namun, jika Anda memberi tahu Firebase mengenai kunci yang akan dibuat kuerinya, Firebase akan mengindeks kunci tersebut pada server, sehingga akan meningkatkan performa kueri.
Pengindeksan dengan orderByChild
Cara termudah untuk menjelaskan ini adalah melalui contoh. Kami semua di Firebase setuju bahwa dinosaurus itu cukup keren. Berikut adalah cuplikan dari database contoh mengenai fakta dinosaurus. Kami akan menggunakannya untuk menjelaskan cara .indexOn
berfungsi dengan orderByChild()
.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Bayangkan bahwa dalam aplikasi, Anda sering kali perlu mengurutkan dinosaurus berdasarkan nama, tinggi, dan panjang, tetapi tidak pernah beratnya. Anda dapat meningkatkan performa kueri dengan menyampaikan informasi ini ke Firebase. Karena nama dinosaurus hanyalah kunci, Firebase sudah mengoptimalkan kueri berdasarkan nama dinosaurus, karena inilah kunci record-nya.
Kita dapat menggunakan .indexOn
untuk memberi tahu Firebase agar mengoptimalkan kueri untuk tinggi dan panjang juga:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Seperti aturan lainnya, Anda dapat menentukan aturan .indexOn
di berbagai tingkat aturan.
Kami menempatkannya di tingkat root untuk contoh di atas karena semua data dinosaurus disimpan pada root database.
Pengindeksan dengan orderByValue
Dalam contoh ini, kami akan menunjukkan cara .indexOn
berfungsi dengan orderByValue()
.
Misalnya Anda sedang membuat papan peringkat skor olahraga dino dengan data berikut:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Karena kita menggunakan orderByValue() untuk membuat papan peringkat, kita dapat mengoptimalkan kueri dengan menambahkan aturan .value
pada node /scores
:
{ "rules": { "scores": { ".indexOn": ".value" } } }