選擇資料庫: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 專案中新增資料庫。