Firebase 會針對您儲存在資料庫中的資料,以及 OSI 模型工作階段層級 (第 5 層) 的所有外連網路流量收費。儲存空間的費用是以每月每 GB $5 美元計算,每日評估時間。帳單不會受到資料庫位置的影響。傳出流量包括所有資料庫作業的連線和加密負荷,以及透過資料庫讀取而下載的資料。資料庫的讀取和寫入作業都可能導致連線費用在帳單上產生。所有資料庫的進出流量 (包括安全性規則拒絕的作業) 都會產生可計費的費用。
常見的計費流量範例如下:
- 下載資料:當用戶端從資料庫取得資料時,Firebase 會針對下載的資料收費。這通常是頻寬費用的主要部分,但不是帳單中的唯一因素。
- 協定額外負擔:建立及維持工作階段時,伺服器和用戶端之間需要額外的流量。視底層通訊協定而定,這類流量可能包括:Firebase 即時資料庫的即時通訊協定額外負擔、WebSocket 額外負擔,以及 HTTP 標頭額外負擔。每次建立連線時,這項開銷加上任何 SSL 加密開銷,都會增加連線成本。雖然這對單一要求的頻寬並沒有太大影響,但如果酬載很小,或是您經常進行短暫連線,這可能會成為帳單的一大支出。
- SSL 加密負擔:安全連線必要的 SSL 加密負擔需要相關費用。平均而言,初始握手程序的成本約為 3.5 KB,每則傳出訊息的 TLS 記錄標頭約為數十個位元組。對於大多數應用程式來說,這筆費用只占帳單的一小部分。但是,如果特定案例需要大量的 SSL 握手,這可能會變得很高。舉例來說,不支援 TLS 工作階段票證的裝置可能需要大量 SSL 連線握手。
- Firebase 主控台資料:雖然這通常不會耗用大量的 Realtime Database 費用,但 Firebase 會針對您從 Firebase 控制台讀取及寫入的資料收費。
估算計費用量
如要查看目前的 Realtime Database 連線和數據用量,請查看 Firebase 控制台的「Usage」分頁。您可以查看目前帳單週期、最近 30 天或最近 24 小時的用量。
Firebase 會顯示下列指標的使用統計資料:
- 連線:與您的資料庫同時開啟的即時連線數量。這包括下列即時連線:WebSocket、長時間輪詢和 HTML 伺服器傳送的事件。但不包含 RESTful 要求。
- 儲存空間:資料庫儲存的資料量。這不包括 Firebase 託管或透過其他 Firebase 產品儲存的資料。
- 下載量:從資料庫下載的所有位元組,包括通訊協定和加密負荷。
- 負載:這張圖表會顯示在特定 1 分鐘間隔內,有多少資料庫正在使用中,處理要求。當資料庫接近 100% 時,可能會發生效能問題。
最佳化用量
您可以採用一些最佳做法,盡可能降低資料庫使用量和頻寬成本。
- 使用原生 SDK:請盡可能使用與應用程式平台對應的 SDK,不要使用 REST API。SDK 會維持開放連線,降低 SSL 加密機制成本,這類成本通常會隨著 REST API 而增加。
- 檢查錯誤:如果頻寬成本異常高,請確認應用程式不會同步處理比您原本預期更多的資料,或同步處理的頻率過高。如要找出問題,請使用分析器工具測量讀取作業,並在 Android、Objective-C 和網頁 SDK 中開啟偵錯記錄功能。檢查應用程式中的背景和同步處理程序,確保一切運作正常。
- 減少連線:盡可能改善連線頻寬。頻繁的 REST 小型要求,比起使用原生 SDK 的單一連線,成本可能更高。如果您使用 REST API,建議您使用 HTTP 持續保留或伺服器傳送事件,這樣可以降低 SSL 握手的成本。
- 使用 TLS 工作階段票證:透過發出 TLS 工作階段票證,減少 SSL 加密在接續連線時的額外成本。如果您需要頻繁且安全地連線至資料庫,這項功能就特別實用。
- 索引查詢: 為資料建立索引可減少查詢的總頻寬,因此在降低成本並提高資料庫效能的雙倍優勢。使用分析器工具,在資料庫中尋找未建立索引的查詢。
- 最佳化事件監聽器:新增查詢以限制事件監聽作業傳回的資料,並使用只會下載資料更新的事件監聽器,例如
on()
而非once()
。此外,請盡可能將事件監聽器放在路徑的盡頭,以限制其同步處理的資料量。 - 降低儲存空間成本:定期執行清理工作,並減少資料庫中的重複資料。
- 使用規則:防止資料庫中任何可能費用高昂的未經授權作業。舉例來說,使用 Firebase Realtime Database Security Rules 可避免惡意使用者重複下載整個資料庫的情況。進一步瞭解如何使用 Firebase 即時資料庫規則。
根據您的特定用途,最適合的應用程式最佳化計畫會有所不同。雖然這份清單並未列舉所有最佳做法,但您可以前往 Slack 管道或 Stack Overflow,向 Firebase 專家尋求更多建議和訣竅。