Firebase, rastgele bir alt anahtar kullanarak verilerinizde anlık sorgular yapmanıza olanak tanır. Dizinlerinizin ne olacağını önceden biliyorsanız sorgu performansını iyileştirmek için Firebase Realtime Database Güvenlik Kurallarınızdaki .indexOn
kuralıyla bunları tanımlayabilirsiniz.
Veri Dizinlerini Tanımlama
Firebase, Google Analytics 4'te sipariş verme ve verilerinizi sorgulama olanağı sunar. Spesifik olarak, Firebase bir düğüm koleksiyonu üzerinde anlık sorgular yapmanıza olanak tanır. ortak alt anahtardı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 en iyi uygulamaları görelim.
orderByChild ile dizine ekleme
Bunu açıklamanın en kolay yolu bir örnek vermektir. Firebase olarak hepimiz
dinozorlar da oldukça havalı. Dinozorlarla ilgili bilgilerin yer aldığı örnek bir veritabanından bir snippet'i burada bulabilirsiniz. Biz
bunu, .indexOn
ile orderByChild()
arasındaki işleyiş şeklini açıklamak için kullanır.
{ "lambeosaurus": { "height" : 2.1, "length" : 12.5, "weight": 5000 }, "stegosaurus": { "height" : 4, "length" : 9, "weight" : 2500 } }
Uygulamamızda genellikle dinozorları adları, boyları ve boyutlarına göre sıralamamız gerektiğini varsayalım.
ama asla ağırlığa göre yok. Firebase'e bu bilgileri bildirerek sorgularımızın performansını artırabiliriz. Dinozorların adları sadece anahtar olduğundan Firebase zaten
dinozor adına göre yapılan sorgular için optimizasyon yapar, çünkü bu, kaydın anahtarıdır.
.indexOn
kullanarak Firebase'e sorguları yükseklik ve uzunluğa göre optimize etmesini de bildirebiliriz:
{ "rules": { "dinosaurs": { ".indexOn": ["height", "length"] } } }
Diğer kurallar gibi, kurallarınızda herhangi bir düzeyde bir .indexOn
kuralı 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 verileri kullanarak dinozor maçlarının skorlarını içeren bir skor tablosu oluşturduğumuzu varsayalım:
{ "scores": { "bruhathkayosaurus" : 55, "lambeosaurus" : 21, "linhenykus" : 80, "pterodactyl" : 93, "stegosaurus" : 5, "triceratops" : 22 } }
Leaderboard'u 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" } } }