Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

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

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

  • Cloud Firestore是Firebase用於移動應用程序開發的最新數據庫。它以新的,更直觀的數據模型為基礎,建立在實時數據庫的成功之上。與實時數據庫相比,Cloud Firestore還具有更豐富,更快速的查詢,並且可以進一步擴展。

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

Firebase建議使用哪個數據庫?

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

兩種解決方案均提供:

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

重要注意事項

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

數據庫的作用
我的應用程序將數據庫用於...
主要通過基本查詢來同步數據。
如果您不需要高級查詢,排序和事務處理,我們建議您使用Realtime Database
高級查詢,排序和事務。
如果您需要與數據進行複雜的交互(例如在電子商務應用程序中),我們建議使用Cloud Firestore
數據操作
我的應用程序的數據庫使用情況看起來像...
幾GB或更少的經常更改的數據。
如果您的應用程序將發送少量更新,例如在數字白板應用程序中,則建議使用Realtime Database
數以百計的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數據庫。

實時數據庫 Cloud Firestore
將數據存儲為一棵大JSON樹。
  • 簡單數據非常易於存儲。
  • 複雜的分層數據更難以大規模組織。

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

將數據存儲為文檔集合。
  • 簡單數據易於存儲在與JSON非常相似的文檔中。
  • 使用文檔中的子集合,可以更輕鬆地按比例組織複雜的分層數據。
  • 要求較少的非規範化和數據展平。

了解有關Cloud Firestore數據模型的更多信息。

實時和離線支持

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

實時數據庫 Cloud Firestore
離線支持iOS和Android客戶端。 離線支持iOS,Android和Web客戶端。

存在

了解客戶端何時在線或離線可能很有用。 Firebase Realtime Database可以記錄客戶端連接狀態,並在每次客戶端連接狀態更改時提供更新。

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

查詢方式

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

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

寫和交易

實時數據庫 Cloud Firestore
基本的寫和事務操作。 高級寫入和事務操作。
  • 通過設置和更新操作以及諸如數組和數字運算符之類的高級轉換來編寫數據操作
  • 事務可以原子地從數據庫的任何部分讀取和寫入數據。

可靠性和性能

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

可擴展性

實時數據庫 Cloud Firestore
擴展需要分片。
  • 在單個數據庫中,擴展到大約200,000個並發連接和1000次寫入/秒。擴展規模還需要在多個數據庫之間共享數據。
  • 對單個數據的寫入速率沒有本地限制。
縮放是自動的。
  • 完全自動縮放。當前,擴展限制約為100萬個並發連接和10,000次寫入/秒。我們計劃在將來增加這些限制。
  • 對單個文檔或索引的寫入率有限制

安全

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

價錢

兩種解決方案均可在Spark和Blaze定價計劃中獲得

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

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

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

Cloud Firestore支持Google App Engine項目的每日支出限額 ,以確保您不會超出自己滿意的成本。

了解有關Cloud Firestore定價計劃的更多信息。

使用Cloud Firestore和實時數據庫

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

了解有關實時數據庫Cloud Firestore中可用功能的更多信息。

準備選擇數據庫了嗎?

希望這種比較可以幫助您選擇Firebase數據庫解決方案。現在,您可以學習如何將數據庫添加到Firebase項目中。