选择数据库:Cloud Firestore 或 Realtime Database

Firebase 提供了两种可通过客户端访问的云端文档数据库。我们建议新客户先从 Cloud Firestore 开始:

  • Cloud Firestore与 JSON 兼容的企业级文档数据库(推荐),深受 25 万多名开发者的信赖。它适用于具有丰富数据模型且需要可查询性、可伸缩性和高可用性的应用。它还提供低延迟客户端同步和离线数据访问功能。

  • Realtime Database 是经典的 Firebase JSON 数据库。它适用于具有简单数据模型的应用,这些模型需要简单的查询和低延迟同步,而可伸缩性有限。

还有哪些其他需要注意的重要事项?

在考虑了上述重要因素后,您可能已准备好选择数据库。如果您仍在权衡优缺点,请参阅本部分,其中介绍了 Cloud FirestoreRealtime Database 之间的其他区别。

数据模型

Realtime DatabaseCloud Firestore 都是 NoSQL 数据库。

Cloud Firestore [首选] Realtime Database
将数据存储为文档集合。
  • 简单数据很容易存储在文档中,这点与 JSON 非常相似。
  • 通过在文档中使用子集合,比较容易大规模地组织复杂的分层数据。
  • 反规范化和数据平展方面的需求更少。

详细了解 Cloud Firestore 数据模型

将数据存储为一个大型 JSON 树。
  • 简单数据极易存储。
  • 复杂的分层数据较难大规模组织。

详细了解 Realtime Database 数据模型

实时和离线支持

两者都具有移动优先的实时 SDK,并且都支持离线就绪应用的本地数据存储。

Cloud Firestore [首选] Realtime Database
为 Apple、Android 和 Web 客户端提供离线支持。 为 Apple 和 Android 客户端提供离线支持。

状态

了解客户端处于在线还是离线状态非常有用。Firebase Realtime Database 可以记录客户端连接状态,并在客户端连接状态发生变化时提供更新。

Cloud Firestore [首选] Realtime Database
不提供原生支持。您可以使用 Cloud Functions 同步 Cloud FirestoreRealtime Database,从而在 Realtime Database 对在线状态系统的支持的基础上进一步构建。请参阅Cloud Firestore 中构建在线状态系统 支持在线状态检测。

查询

通过查询从数据库检索、排序和过滤数据。

Cloud Firestore [首选] Realtime Database
索引式查询,提供复合排序和过滤功能。
  • 在单个查询中,您可以串连多个过滤条件,并对属性同时进行过滤和排序操作。
  • 进行浅层查询:查询只返回特定集合或集合组中的文档,不返回子集合数据。
  • 查询必须始终返回整个文档。
  • 默认情况下查询已编入索引:查询性能与结果集的大小(而不是与数据集的大小)成正比。
深度查询,提供有限的排序和过滤功能
  • 查询可以对属性进行排序或过滤,但两者不能同时进行。
  • 默认情况下进行深入查询:查询始终返回整个子树。
  • 查询可以任何粒度访问数据,粒度可细化到 JSON 树中的各个叶节点值。
  • 查询不需要索引;但是随着数据集的不断增长,某些查询的性能会下降。

写入和事务

Cloud Firestore [首选] Realtime Database
高级写入和事务操作。
  • 通过设置和更新操作以及数组和数字运算符等高级转换进行写入数据操作
  • 事务可以原子方式从数据库的任何部分读取和写入数据。
基本写入和事务操作。
  • 通过设置和更新操作写入数据
  • 事务在特定数据子树上属于原子操作。

可靠性和性能

Cloud Firestore [首选] Realtime Database
Cloud Firestore 是一种可自动扩容的单区域和多区域解决方案。
  • 一种低延迟解决方案,典型响应时间不超过 30 毫秒。
  • 将数据放在位于不同区域的多个数据中心,确保全球可伸缩性和高可靠性。
  • 可在全球用于单区域或多区域配置。
如需详细了解 Cloud Firestore 性能和可靠性特性,请参阅服务等级协议
Realtime Database 是一种单区域级解决方案。
  • 在单区域配置中可用。数据库仅适用于单个区域内的可用区。
  • 延迟时间极短,通常响应时间不超过 10 毫秒,是适合频繁同步状态的理想方案。
如需详细了解 Realtime Database 性能和可靠性特性,请参阅服务等级协议

正常运行时间

Cloud Firestore [首选] Realtime Database
极高的正常运行时间性能。
  • 典型正常运行时间性能为 99.999%。
  • 如果可用性至关重要(例如在电子商务应用中),请使用 Cloud Firestore
较高的正常运行时间性能。
  • 典型正常运行时间性能为 99.95%。

可伸缩性

Cloud Firestore [首选] Realtime Database
自动扩容。
  • 完全自动扩容。扩容限制大约是 100 万个并发连接和 1 万次写入/秒。我们计划在未来提高这些限制。
  • 对各个文档或索引的写入速率有限制
扩容需要进行分片。
  • 在单个数据库中可扩容到约 200,000 个并发连接和 1,000 次写入/秒。如果超出此范围,需要将数据分片到多个数据库。
  • 对每部分数据的写入速率没有本地限制。

安全

Cloud Firestore [首选] Realtime Database
采用将授权与验证合并的非级联规则。
  • 通过受 Cloud Firestore Security Rules保护的移动 SDK 进行读取和写入。
  • 通过受 Identity and Access Management (IAM) 保护的服务器 SDK 进行读取和写入。
  • 规则不会进行级联,除非您使用通配符。
  • 规则可以限制查询:如果某个查询返回的结果可能包含用户无权访问的数据,则整个查询都会失败。
采用将授权与验证分开的级联规则语言。

价格

这两种解决方案都可在 Spark 和 Blaze 定价方案中获得。

Cloud Firestore [首选] Realtime Database
主要针对在数据库中执行的操作(读取、写入、删除)收费,并以较低的费率对带宽和存储收费。

Cloud Firestore 支持对 App Engine 项目设置每日支出限额,确保不会超出您能接受的费用水平。

详细了解 Cloud Firestore 定价方案

仅对带宽和存储收费,但费率较高。

详细了解 Realtime Database 定价方案

使用 Cloud FirestoreRealtime Database

您可以在同一个 Firebase 应用或项目中同时使用这两种数据库。这两种 NoSQL 数据库可以存储相同类型的数据,客户端库的工作方式也相似。如果您决定在应用中同时使用这两种数据库,请注意数据库之间的上述差异。

详细了解 Realtime DatabaseCloud Firestore 中提供的功能。

准备好选择数据库了吗?

希望此比较能够帮助您决定采用哪个 Firebase 数据库解决方案。现在,您可以了解如何将数据库添加到 Firebase 项目中。