Firebase, rastgele bir alt anahtar kullanarak verilerinizde geçici sorgular yapmanıza olanak tanır. Dizinlerinizin ne olacağını önceden biliyorsanız sorgu performansını artırmak için bunları Firebase Realtime Database güvenlik kurallarınızdaki .indexOn
kuralı aracılığıyla tanımlayabilirsiniz.
Veri Dizinlerini Tanımlama
Firebase, verilerinizi sıralamak ve sorgulamak için güçlü araçlar sunar. Firebase, özellikle ortak bir alt anahtar kullanarak bir düğüm koleksiyonunda geçici sorgular yapmanıza olanak tanır. Uygulamanız büyüdükçe bu sorgunun performansı düşer. Ancak sorgulayacağınız anahtarlar hakkında Firebase'e bilgi verirseniz Firebase bu anahtarları sunucularda dizine ekleyerek sorgularınızın performansını artırır.
orderByChild ile dizine ekleme
Bunu açıklamanın en kolay yolu bir örnek vermektir. Firebase'deki herkes dinozorların çok havalı olduğunu düşünüyor. Dinozorlarla ilgili bilgilerin yer aldığı örnek bir veritabanından bir snippet aşağıda verilmiştir. Bu özelliği, .indexOn
ile orderByChild()
'nin birlikte nasıl çalıştığını açıklamak için kullanacağız.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Uygulamamızda dinozorları genellikle ada, yüksekliğe ve uzunluğa göre sıralamamız gerektiğini ancak ağırlığa göre sıralamamız gerekmediğini varsayalım. Firebase'e bu bilgileri vererek sorgularımızın performansını artırabiliriz. Dinozorların adları yalnızca anahtarlar olduğundan Firebase, kaydın anahtarı olduğu için dinozor adına göre sorgular için optimizasyon yapar.
Firebase'e sorguları yükseklik ve uzunluk için de optimize etmesini söylemek üzere .indexOn
kullanabiliriz:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Diğer kurallarda olduğu gibi, .indexOn
kuralını kurallarınızın herhangi bir düzeyinde belirtebilirsiniz.
Tüm dinozor verileri veritabanının kök dizininde depolandığı için yukarıdaki örnekte kök düzeyine yerleştirdik.
orderByValue ile dizine ekleme
Bu örnekte, .indexOn
ile orderByValue()
'nin birlikte nasıl çalıştığı gösterilmektedir.
Aşağıdaki verileri kullanarak dinozor spor puanlarının yer aldığı bir skor tablosu oluşturduğumuzu varsayalım:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Liderlik tablosunu oluşturmak için orderByValue() kullandığımızdan /scores
düğümümüze bir .value
kuralı ekleyerek sorgularımızı optimize edebiliriz:
{ "rules": { "scores": { ".indexOn": ".value" } } }