Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

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

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

Firebase 推薦哪個數據庫?

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

兩種解決方案都提供:

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

主要考慮因素

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

數據庫的作用
我的應用程序使用數據庫...
主要同步數據,基本查詢。
如果您不需要高級查詢、排序和事務,我們推薦Realtime Database
高級查詢、排序和事務。
如果您需要與數據進行複雜的交互,例如在電子商務應用中,我們建議使用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
數據庫實例數
在我的個人項目中,我需要使用...
許多數據庫,例如每個主要客戶的數據庫。
由於它允許您將多個數據庫添加到單個 Firebase 項目,因此我們推薦Realtime Database
只是一個數據庫。
如果您需要單個數據庫,我們建議使用Cloud FirestoreRealtime Database

還有哪些重要的事情需要考慮?

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

數據模型

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

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

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

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

詳細了解Cloud Firestore 數據模型

實時和離線支持

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

實時數據庫雲防火牆
對 Apple Android 客戶端的離線支持。對 Apple、Android 和 Web 客戶端的離線支持。

在場

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

實時數據庫雲防火牆
支持存在。本機不支持。您可以通過使用 Cloud Functions 同步 Cloud Firestore 和實時數據庫來利用實時數據庫對在線狀態的支持。請參閱在 Cloud Firestore 中建立存在

查詢

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

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

寫入和事務

實時數據庫雲防火牆
基本的寫入和事務操作。高級寫入和事務操作。
  • 通過設置和更新操作以及數組和數值運算符等高級轉換來編寫數據操作
  • 事務可以從數據庫的任何部分原子地讀取和寫入數據。

可靠性和性能

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

可擴展性

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

安全

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

價錢

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

實時數據庫雲防火牆
僅對帶寬和存儲收費,但費率更高。

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

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

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

閱讀有關Cloud Firestore 定價計劃的更多信息。

使用 Cloud Firestore 和實時數據庫

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

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

準備好選擇數據庫了嗎?

希望這個比較可以幫助您確定 Firebase 數據庫解決方案。現在您可以了解如何將數據庫添加到您的 Firebase 項目。