Verilerinizi İndeksleyin

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()'yu kullandığımızdan, /scores düğümümüze bir .value kuralı ekleyerek sorgularımızı optimize edebiliriz:

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