Verilerinizi Dizine Ekleme

Firebase, herhangi 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 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ı genellikle 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"
    }
  }
}