最佳化資料庫效能

你可以透過幾種不同方式來改善 Firebase 即時資料庫 應用程式內的廣告成效瞭解如何提高您的 即時資料庫效能,透過不同的即時資料庫收集資料 然後據此調整應用程式或即時資料庫的使用方式。

監控即時資料庫效能

您可以透過下列幾種方式收集即時資料庫的成效資料 按照您需要的精細程度提供不同工具:

  • 概要總覽:使用分析器工具 以取得未建立索引的查詢清單,以及讀取/寫入的即時總覽 operations.
  • 預估用量:使用用量指標 可在 Firebase 控制台查看 可查看計費用量和高階成效指標。
  • 詳細深入分析:使用 Cloud Monitoring ,以更精細地瞭解資料庫在一段時間內的成效。

依指標改善成效

資料收集完成後,請參考下列最佳做法和策略 選擇想要改善的成效領域

成效改善策略一覽
指標 說明 最佳做法
載入/使用率 將資料庫的處理容量最佳化 要求 (反映在「載入」或「載入」中) **io/database_load** 指標)。 最佳化資料結構
跨資料庫分割資料
提升事件監聽器的效率
使用查詢式規則限制下載次數
最佳化連線
有效連線數 平均分配和多個有效連線的數量 即可維持在 200,000 個連線數量上限 跨資料庫分割資料
減少新連結
連出頻寬 如果從資料庫的下載次數看起來比預期高 即可提高讀取作業的效率 加密負擔 連線最佳化
最佳化資料結構
使用查詢規則限制下載作業
重複使用 SSL 工作階段
提升事件監聽器的效率
限制資料存取權
儲存空間 確認沒有儲存未使用的資料,也未平衡 其他資料庫和/或 Firebase 產品儲存的資料 配額。 清除未使用的資料
最佳化資料結構
跨資料庫分割資料
使用 Cloud Storage for Firebase

最佳化連線

符合 REST 樣式的要求 (例如 GETPUT) 仍需連線 需要有短期連線時間這些頻繁的短期連線 事實上,連線費用和資料庫負載 比即時且有效連線連至資料庫的連出頻寬。

請盡可能使用應用程式平台的原生 SDK,不要使用 REST API 使用。這些 SDK 會維護開放連線,降低 SSL 加密成本 以及可由 REST API 產生的資料庫負載

如果您使用 REST API,請考慮使用 HTTP 保持運作 開啟連線或使用 來降低 SSL 握手的成本。

分割多個資料庫的資料

將資料拆分至多個即時資料庫執行個體 (也就是 擁有三個好處:

  1. 如何增加應用程式同時允許的有效連線總數,做法如下: 並分割到各個資料庫執行個體
  2. 平衡資料庫執行個體的負載。
  3. 如果有獨立的使用者群組,只需要存取個別的使用者群組 多個資料集,使用不同的資料庫執行個體,可提高處理量,同時降低費用 適合延遲時間僅毫秒的 即時高處理量應用程式

如果您使用 Blaze 定價方案,可以建立多個 同一個 Firebase 專案中的資料庫執行個體,同時使用通用使用者 驗證方式

進一步瞭解分割資料的方式和時機。

建立高效率的資料結構

因為即時資料庫會從路徑的子節點 因此建議您盡可能採用平坦的資料結構。 如此一來,您就可以選擇性地擷取需要的資料,不需要同時 並下載不需要的資料給用戶端

建構資料時,請特別考慮寫入和刪除。 舉例來說,刪除有數千葉的路徑可能會耗用大量資源。 將它們分割成包含多個子樹狀結構且每個節點葉數較少的路徑 進而加快刪除速度

此外,每次寫入作業最多可能需要 0.1% 的資料庫總使用率。 以批次方式將資料彙整為單一 將作業視為多路徑update() SDK 或符合 REST 樣式的 PATCH 要求。

如要最佳化資料結構並提升效能,請依循下列 資料結構的最佳做法

防範未經授權的存取行為

運用以下功能,避免資料庫發生未經授權的作業: 即時資料庫安全性規則。舉例來說,使用規則即可避免 惡意使用者重複下載整個資料庫。

進一步瞭解如何使用 Firebase 即時資料庫規則

使用查詢規則來限制下載作業

即時資料庫安全性規則限制對資料庫資料的存取權,但也能 可做為讀取作業所傳回資料量的限制。使用方法 查詢型規則,如 query.limitToFirst 這類 query. 運算式所定義。 查詢只會擷取符合規則條件的資料。

舉例來說,下列規則會將讀取權限限制於前 1000 個 查詢結果,按優先順序排序:

messages: {
  ".read": "query.orderByKey &&
            query.limitToFirst <= 1000"
}

// Example query:
db.ref("messages").limitToFirst(1000)
                  .orderByKey("value")

進一步瞭解即時資料庫安全性規則

索引查詢

建立資料索引會降低 頻寬用量。

重複使用 SSL 工作階段

發送要求,降低重新啟用連線的 SSL 加密負擔成本 傳輸層安全標準 (TLS) 工作階段票券。這在 如果確實需要頻繁且安全的資料庫連線,這個功能會很有幫助。

提高事件監聽器效率

盡可能將事件監聽器放在路徑較下方,限制資料量 執行同步處理作業事件監聽器應靠近您想取得的資料。 不要從資料庫根目錄監聽,因為這樣會導致 整個資料庫

新增查詢,限制監聽作業傳回及使用的資料 只會下載資料更新的事件監聽器,例如 on() once()。請將 .once() 保留給真正不需要更新資料的動作。 此外,請盡可能使用 orderByKey() 排序查詢, 效能最佳。使用 orderByChild() 排序可能減慢 6 到 8 倍,且 對於大型資料集,使用 orderByValue() 排序可能非常緩慢 需要從永久層讀取整個位置。

務必以動態方式新增事件監聽器,並移除不需要的事件監聽器 可能更久

清除未使用的資料

定期移除資料庫中任何未使用或重複的資料。你可以 執行備份來手動檢查資料,或是 並定期備份至 Google Cloud Storage 值區其他 建議您透過 Cloud Storage for Firebase 來託管儲存的資料。

寄送可更新的可擴充程式碼

內建於 IoT 裝置的應用程式應具備可擴充的程式碼,您可以提供 更新。務必將各種情境納入考量,對用途進行完整測試 可能大幅拓展客群 部署更新到程式碼請仔細思考您可能需要的重大變更