Firebase, herhangi bir alt anahtar kullanarak verilerinizle anlık sorgular yapmanıza olanak tanır. Dizinlerinizin ne olacağını önceden biliyorsanız sorgu performansını artırmak için Firebase Realtime Database Güvenlik Kurallarınızdaki .indexOn
kuralı aracılığıyla bunları tanımlayabilirsiniz.
Veri Dizinlerini Tanımlama
Firebase, verilerinizi sıralama ve sorgulama için güçlü araçlar sağlar. Daha açık belirtmek gerekirse Firebase, herhangi bir ortak alt anahtar kullanarak bir düğüm koleksiyonunda anlık sorgular yapmanıza olanak tanır. Uygulamanız büyüdükçe bu sorgunun performansı düşer. Ancak Firebase'e sorgulayacağınız anahtarları söylerseniz Firebase bu anahtarları sunucularda dizine ekleyerek sorgularınızın performansını iyileştirir.
orderByChild ile dizine ekleme
Bunu açıklamanın en kolay yolu bir örnek vermektir. Firebase'deki hepimiz dinozorların çok havalı olduğunu düşünüyoruz. Aşağıda, dinozorlarla ilgili bilgiler içeren örnek bir veritabanından bir snippet verilmiştir. Bu örneği, .indexOn
'ün orderByChild()
ile 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ı sık sık isme, boya ve uzunluğa göre sıralamamız gerektiğini ancak hiçbir zaman ağırlığa göre sıralamamız gerekmediğini varsayalım. Firebase'e bu bilgileri bildirerek sorgularımızın performansını artırabiliriz. Dinozorların adı yalnızca anahtar olduğundan Firebase, kayda göre anahtar olan dinozor adına göre sorguları zaten optimize eder.
Firebase'e sorguları yükseklik ve uzunluk için de optimize etmesini söylemek üzere .indexOn
kullanabiliriz:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Diğer kurallar gibi, kurallarınızda herhangi bir düzeyde .indexOn
kuralı da belirtebilirsiniz.
Tüm dinozor verileri veritabanının kökünde depolandığından, yukarıdaki örnekte bu tabloyu kök düzeyine yerleştirdik.
orderByValue ile dizine ekleme
Bu örnekte, .indexOn
'ün orderByValue()
ile nasıl çalıştığını göstereceğiz.
Aşağıdaki verilerle dinozor spor puanları için bir lider tablosu oluşturduğumuzu varsayalım:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Lider tablosunu oluşturmak için orderByValue() işlevini kullandığımızdan, /scores
düğümümüze bir .value
kuralı ekleyerek sorgularımızı optimize edebiliriz:
{ "rules": { "scores": { ".indexOn": ".value" } } }