Verilerinizi Dizine Ekleme

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 de herhangi bir ortak 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 Firebase'e sorgulayacağınız anahtarlar hakkında 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 kurallar gibi, kurallarınızda herhangi bir düzeyde .indexOn kuralı belirtebilirsiniz. Yukarıdaki örnekte, tüm dinozor verileri veritabanının kök dizininde depolandığı için bu öğeyi kök düzeyine yerleştirdik.

orderByValue ile dizine ekleme

Bu örnekte, .indexOn ile orderByValue() arasındaki etkileşim gösterilecektir. Aşağıdaki verileri kullanarak dinozor sporları 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
  }
}

Puan tablosunu oluşturmak için orderByValue() kullandığımızdan .value düğümümüze /scores kuralı ekleyerek sorgularımızı optimize edebiliriz:

{
  "rules": {
    "scores": {
      ".indexOn": ".value"
    }
  }
}