Catch up on everthing we announced at this year's Firebase Summit. Learn more

索引您的數據

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"
    }
  }
}