索引您的數據

Firebase 可讓您使用任意子鍵對資料進行暫時查詢。如果您事先知道索引是什麼,則可以透過 Firebase 即時資料庫安全性規則中的.indexOn規則定義它們,以提高查詢效能。

定義資料索引

Firebase 提供了用於排序查詢資料的強大工具。具體來說,Firebase 允許您使用任何公共子鍵對節點集合進行即席查詢。隨著應用程式的成長,此查詢的效能會降低。但是,如果您告訴 Firebase 您將要查詢的按鍵,Firebase 將在伺服器上為這些鍵建立索引,從而提高查詢效能。

使用 orderByChild 建立索引

解釋這一點的最簡單方法是透過一個例子。 Firebase 的所有人都認為恐龍非常酷。這是恐龍事實樣本資料庫的片段。我們將用它來解釋.indexOn如何與orderByChild()一起使用。

{
  "lambeosaurus": {
    "height" : 2.1,
    "length" : 12.5,
    "weight": 5000
  },
  "stegosaurus": {
    "height" : 4,
    "length" : 9,
    "weight" : 2500
  }
}

讓我們想像一下,在我們的應用程式中,我們經常需要按名稱、高度和長度對恐龍進行排序,而不是按重量排序。我們可以透過告訴 Firebase 這些資訊來提高查詢的效能。由於恐龍的名稱只是鍵,Firebase 已經針對恐龍名稱的查詢進行了最佳化,因為這是記錄的鍵。我們也可以使用.indexOn告訴 Firebase 優化高度和長度的查詢:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

與其他規則一樣,您可以在規則中的任何層級指定.indexOn規則。對於上面的範例,我們將其放置在根級別,因為所有恐龍資料都儲存在資料庫的根目錄中。

使用 orderByValue 建立索引

在此範例中,我們將示範.indexOn如何與orderByValue()搭配使用。假設我們正在使用以下數據製作恐龍運動得分排行榜:

{
  "scores": {
    "bruhathkayosaurus" : 55,
    "lambeosaurus" : 21,
    "linhenykus" : 80,
    "pterodactyl" : 93,
    "stegosaurus" : 5,
    "triceratops" : 22
  }
}

由於我們使用 orderByValue() 來建立排行榜,因此我們可以透過在/scores節點中新增.value規則來最佳化查詢:

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