ไปที่คอนโซล

选择数据库:Cloud Firestore 或实时数据库

Firebase 提供了两种支持实时数据同步且可通过客户端访问的云数据库解决方案:

  • Cloud Firestore 是 Firebase 用于移动应用开发的最新数据库。它具备更直观的新数据模型,在实时数据库的成功基础上更上一层楼。与实时数据库相比,Cloud Firestore 还提供了更丰富、更快速的查询以及更好的扩缩功能。
  • 实时数据库是 Firebase 的原有数据库。对于需要在客户端之间实时同步状态的移动应用,这是一种高效、低延迟的解决方案。

哪个数据库适合您的项目?

我们建议大多数开发新项目的开发者使用 Cloud Firestore。Cloud Firestore 可提供更多的功能、更高的性能以及可扩缩性,它采用的基础架构旨在在未来支持更强大的功能。今后,我们将为 Cloud Firestore 推出新的查询类型、更可靠的安全规则以及其他高级功能,并改进其性能。

选择数据库解决方案时,请考虑 Cloud Firestore 和实时数据库之间的以下不同点。

数据模型

实时数据库和 Cloud Firestore 都是 NoSQL 数据库。

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

详细了解实时数据库数据模型

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

了解有关 Cloud Firestore 数据模型的更多信息。

实时和离线支持

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

实时数据库 Cloud Firestore
为 iOS 和 Android 客户端提供离线支持。 为 iOS、Android 和网页客户端提供离线支持。

查询

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

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

写入和事务

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

可靠性和性能

实时数据库 Cloud Firestore
实时数据库是一种单区域解决方案。
  • 数据库只能在单个区域中使用。
  • 极低的延迟,是频繁同步状态的理想选择。
如需详细了解实时数据库性能和可靠性特性,请参阅服务等级协议
Cloud Firestore 是一种可自动扩缩的多区域解决方案。
  • 将数据放在位于不同区域的多个数据中心,确保全球可扩缩性和强大的可靠性。
  • 可在全球用于区域配置或多区域配置。
如需详细了解 Cloud Firestore 性能和可靠性特性,请参阅服务等级协议

可扩缩性

实时数据库 Cloud Firestore
扩容需要分片。
  • 在单个数据库中扩容到约 100000 个并发连接和 1000 次写入/秒。如果超出此范围,需要将数据在多个数据库中分片。
  • 对各个数据的写入速率没有本地限制。
自动扩容。
  • 完全自动扩容。目前,扩容限制大约是 100 万个并发连接和 1 万次写入/秒。我们计划在未来提高这些限制。
  • 对各个文档或索引的写入速率有限制

安全

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

价格

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

实时数据库 Cloud Firestore
仅对带宽和存储收费,但费率较高。

请阅读有关实时数据库定价方案的更多信息。

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

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

请阅读有关 Cloud Firestore 定价方案的更多信息。

使用 Cloud Firestore 和实时数据库

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

详细了解实时数据库Cloud Firestore 提供的功能。