Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

索引您的數據

Firebase 允許您使用任意子鍵對數據進行臨時查詢。如果你事先知道你的指標將是什麼,你可以通過定義它們.indexOn在火力地堡實時數據庫安全規則來提高查詢性能的規則。

定義數據索引

火力地堡提供了強大的工具訂貨查詢您的數據。具體來說,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告訴火力地堡,為高度和長度,以及優化查詢:

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

像其他的規則,你可以指定一個.indexOn在規則中的任何級別規則。對於上面的示例,我們將其放置在根級別,因為所有恐龍數據都存儲在數據庫的根目錄中。

使用 orderByValue 進行索引

在這個例子中,我們將演示如何.indexOn可與orderByValue()假設我們正在使用以下數據製作恐龍運動得分排行榜:

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

由於我們使用orderByValue()創建排行榜,我們可以通過添加一個優化我們的查詢.value在我們的規則/scores節點:

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