Firebase, isteğe bağlı bir alt anahtar kullanarak verileriniz üzerinde anlık sorgular yapmanıza olanak tanır. Dizinlerinizin ne olacağını önceden biliyorsanız, sorgu performansını artırmak için bunları Firebase Gerçek Zamanlı Veritabanı 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 sağlar. Özellikle Firebase, herhangi bir ortak alt anahtarı kullanarak bir düğüm koleksiyonu üzerinde anlık sorgular yapmanıza olanak tanır. Uygulamanız büyüdükçe bu sorgunun performansı düşer. Ancak sorgulayacağınız anahtarları Firebase'e bildirirseniz Firebase bu anahtarları sunucularda dizine ekleyerek sorgularınızın performansını artırır.
OrderByChild ile indeksleme
Bunu açıklamanın en kolay yolu bir örnek vermektir. Firebase'de hepimiz dinozorların oldukça havalı olduğu konusunda hemfikiriz. İşte dinozorlarla ilgili gerçekleri içeren örnek bir veritabanından bir parça. .indexOn
orderByChild()
ile nasıl çalıştığını açıklamak için bunu kullanacağız.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Uygulamamızda dinozorları genellikle ismine, boyuna ve boyuna göre sıralamamız gerektiğini, ancak asla ağırlığa göre sıralamamamız gerektiğini hayal edelim. Bu bilgiyi Firebase'e bildirerek sorgularımızın performansını iyileştirebiliriz. Dinozorların adı yalnızca anahtar olduğundan Firebase, kaydın anahtarı olduğundan sorguları zaten dinozor adına göre optimize ediyor. Firebase'e sorguları yükseklik ve uzunluk açısından da optimize etmesini söylemek için .indexOn
kullanabiliriz:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Diğer kurallar gibi, kurallarınızda herhangi bir düzeyde bir .indexOn
kuralı belirtebilirsiniz. Yukarıdaki örnekte bunu kök seviyesine yerleştirdik çünkü tüm dinozor verileri veritabanının kökünde saklanıyor.
orderByValue ile indeksleme
Bu örnekte, .indexOn
orderByValue()
ile nasıl çalıştığını göstereceğiz. Aşağıdaki verilerle dino spor skorlarından oluşan bir skor tablosu oluşturduğumuzu varsayalım:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Skor 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" } } }