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