Catch up on highlights from Firebase at Google I/O 2023. Learn more

選擇數據庫:Cloud Firestore 或實時數據庫

Firebase 提供兩種基於雲、客戶端可訪問的數據庫解決方案,支持實時數據同步:

  • Cloud Firestore是 Firebase 用於移動應用開發的最新數據庫。它以實時數據庫的成功為基礎,採用了新的、更直觀的數據模型。 Cloud Firestore 還具有比實時數據庫更豐富、更快的查詢和可擴展性。

  • 實時數據庫是 Firebase 的原始數據庫。對於需要跨客戶端實時同步狀態的移動應用程序來說,這是一種高效、低延遲的解決方案。

Firebase 推薦哪個數據庫?

您選擇的數據庫解決方案將取決於許多因素,但當涉及到某些功能時,我們可以就哪個數據庫適合您提出建議。

兩種解決方案都提供:

  • 客戶端優先的 SDK,無需部署和維護服務器
  • 實時更新
  • 免費套餐,然後按使用量付費

關鍵考慮因素

除了兩個數據庫共有的強大核心功能之外,請考慮下面列出的任何或所有註意事項將如何影響您的應用程序的成功。

數據庫的作用
我的應用程序使用數據庫...
主要是同步數據,以及基本的查詢。
如果您不需要高級查詢、排序和事務,我們推薦實時數據庫
高級查詢、排序和交易。
如果您需要與數據進行複雜的交互(例如在電子商務應用程序中),我們建議您使用Cloud Firestore
對數據的操作
我的應用程序的數據庫使用情況看起來像......
經常更改的幾 GB 或更少的數據。
如果您的應用程序將發送一系列微小更新(例如在數字白板應用程序中),我們建議使用實時數據庫
數百 GB 到 TB 的數據的讀取次數遠多於更改次數。
對於非常大的數據集,並且經常需要批量操作時,我們推薦Cloud Firestore
數據模型
我更喜歡將我的數據構建為......
一個簡單的 JSON 樹。
對於 JSON 非結構化數據,我們推薦Realtime Database
組織成集合的文檔。
對於結構化文檔和集合,我們建議Cloud Firestore
可用性
我的可用性需求是...
99.999% 的極高正常運行時間保證。
如果可用性至關重要(例如在電子商務應用程序中),我們建議Cloud Firestore
保證至少 99.95% 的正常運行時間。
當非常高但不是關鍵的可用性可以接受時,我們建議使用Cloud FirestoreRealtime Database
本地數據離線查詢
我的應用程序需要在連接有限或沒有連接的設備上執行查詢...
頻繁地。
對於用戶離線時對本地數據的複雜查詢功能,我們推薦Cloud Firestore
很少或從不。
如果您希望用戶始終在線,我們建議您使用Cloud FirestoreRealtime Database

還有哪些其他重要事項需要考慮?

考慮完前面的關鍵考慮因素後,您可能已經準備好選擇數據庫了。如果您仍在權衡利弊,本部分將介紹 Cloud Firestore 和實時數據庫之間的其他差異。

數據模型

實時數據庫和 Cloud Firestore 都是 NoSQL 數據庫。

實時數據庫雲Firestore
將數據存儲為一棵大型 JSON 樹。
  • 簡單的數據很容易存儲。
  • 複雜的分層數據更難大規模組織。

了解有關實時數據庫數據模型的更多信息。

將數據存儲為文檔集合。
  • 簡單的數據很容易存儲在文檔中,這與 JSON 非常相似。
  • 使用文檔中的子集合更容易大規模組織複雜的分層數據。
  • 需要較少的反規範化和數據扁平化。

詳細了解Cloud Firestore 數據模型

實時和離線支持

兩者都具有移動優先的實時 SDK,並且都支持離線就緒應用程序的本地數據存儲。

實時數據庫雲Firestore
離線支持蘋果和安卓客戶端。對 Apple、Android 和 Web 客戶端的離線支持。

在場

了解客戶端何時在線或離線非常有用。 Firebase 實時數據庫可以記錄客戶端連接狀態,並在每次客戶端連接狀態發生變化時提供更新。

實時數據庫雲Firestore
支持存在。原生不支持。您可以通過使用 Cloud Functions 同步 Cloud Firestore 和實時數據庫,利用實時數據庫對狀態的支持。請參閱在 Cloud Firestore 中建立狀態

查詢

通過查詢從任一數據庫中檢索、排序和過濾數據。

實時數據庫雲Firestore
具有有限排序和過濾功能的深度查詢。
  • 查詢可以對屬性進行排序篩選,但不能同時對兩者進行排序或篩選。
  • 默認情況下,查詢是深度的:它們總是返回整個子樹。
  • 查詢可以以任何粒度訪問數據,細至 JSON 樹中的各個葉節點值。
  • 查詢不需要索引;然而,某些查詢的性能會隨著數據集的增長而降低。
具有復合排序和過濾功能的索引查詢。
  • 您可以在單個查詢中鏈接過濾器並組合對屬性進行過濾和排序。
  • 查詢是淺層的:它們僅返回特定集合或集合組中的文檔,而不返回子集合數據。
  • 查詢必須始終返回整個文檔。
  • 默認情況下會對查詢建立索引:查詢性能與結果集的大小成正比,而不是與數據集的大小成正比。

寫入和事務

實時數據庫雲Firestore
基本的寫入和事務操作。高級寫入和事務操作。
  • 通過設置和更新操作以及高級轉換(例如數組和數字運算符)寫入數據操作
  • 事務可以自動地從數據庫的任何部分讀取和寫入數據。

可靠性和性能

實時數據庫雲Firestore
實時數據庫是一個區域解決方案。
  • 提供區域配置。數據庫僅限於一個區域內的區域可用性。
  • 極低的延遲,是頻繁狀態同步的理想選擇。
請閱讀服務級別協議中有關實時數據庫性能和可靠性特徵的更多信息。
Cloud Firestore 是一種可自動擴展的區域和多區域解決方案。
  • 將您的數據存儲在不同區域的多個數據中心,確保全球可擴展性和強大的可靠性。
  • 在全球範圍內提供區域或多區域配置。
服務級別協議中詳細了解 Cloud Firestore 性能和可靠性特徵。

可擴展性

實時數據庫雲Firestore
擴展需要分片。
  • 在單個數據庫中可擴展到約 200,000 個並發連接和每秒 1,000 次寫入。超出這一範圍需要將數據分片到多個數據庫。
  • 對單個數據的寫入速率沒有本地限制。
縮放是自動的。
  • 完全自動縮放。目前,擴展限制約為 100 萬個並發連接和每秒 10,000 次寫入。我們計劃將來增加這些限制。
  • 對單個文檔或索引的寫入速率有限制

安全

實時數據庫雲Firestore
將授權和驗證分開的級聯規則語言。結合授權和驗證的非級聯規則。
  • 從受Cloud Firestore 安全規則保護的移動 SDK 進行讀取和寫入。
  • 從受身份和訪問管理 (IAM)保護的服務器 SDK 進行讀取和寫入。
  • 除非使用通配符,否則規則不會級聯。
  • 規則可以限制查詢:如果查詢的結果可能包含用戶無權訪問的數據,則整個查詢將失敗。

價錢

Spark 和 Blaze 定價計劃中提供了這兩種解決方案。

實時數據庫雲Firestore
僅對帶寬和存儲收費,但費率較高。

了解有關實時數據庫定價計劃的更多信息。

主要對數據庫中執行的操作(讀、寫、刪除)收費,並以較低的費率對帶寬和存儲收費。

Cloud Firestore 支持 App Engine 項目的每日支出限制,以確保您不會超出您可以承受的成本。

詳細了解Cloud Firestore 定價計劃

使用 Cloud Firestore 和實時數據庫

您可以在同一 Firebase 應用或項目中使用這兩個數據庫。兩種 NoSQL 數據庫都可以存儲相同類型的數據,並且客戶端庫以類似的方式工作。如果您決定在應用程序中使用這兩個數據庫,請記住上面概述的差異。

詳細了解實時數據庫Cloud Firestore中提供的功能。

準備好選擇數據庫了嗎?

希望這種比較能夠幫助您選擇 Firebase 數據庫解決方案。現在您可以了解如何向 Firebase 項目添加數據庫。