获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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

Firebase 提供两种基于云、客户端可访问的数据库解决方案,支持实时数据同步:

  • Cloud Firestore是 Firebase 用于移动应用程序开发的最新数据库。它以 Realtime Database 的成功经验为基础,采用全新、更直观的数据模型。 Cloud Firestore 还具有比实时数据库更丰富、更快的查询和扩展性。

  • Realtime Database是 Firebase 的原始数据库。对于需要跨客户端实时同步状态的移动应用程序,这是一种高效、低延迟的解决方案。

Firebase 推荐哪个数据库?

您对数据库解决方案的选择将取决于许多因素,但当涉及到某些功能时,我们可以就哪个数据库适合您提出建议。

两种解决方案都提供:

  • 客户端优先的 SDK,无需部署和维护服务器
  • 实时更新
  • 免费套餐,然后按使用量付费

关键考虑因素

除了两个数据库共有的重要核心功能外,请考虑下面列出的任何或所有注意事项将如何影响您的应用程序的成功。

数据库的作用
我的应用程序使用数据库来...
主要是同步数据,有基本的查询。
如果您不需要高级查询、排序和交易,我们推荐实时数据库
高级查询、排序和交易。
如果您需要与数据进行复杂的交互,例如在电子商务应用程序中,我们建议使用Cloud Firestore
数据操作
我的应用程序的数据库使用情况看起来像......
几 GB 或更少的频繁更改的数据。
如果您的应用程序将发送微小更新流,例如在数字白板应用程序中,我们建议使用实时数据库
数百 GB 到 TB 的数据被读取的次数远远多于更改的次数。
对于非常大的数据集,并且经常需要批量操作时,我们推荐Cloud Firestore
数据模型
我更喜欢将我的数据结构化为...
一个简单的 JSON 树。
对于 JSON 非结构化数据,我们推荐实时数据库
文档组织成集合。
对于结构化文档和集合,我们推荐Cloud Firestore
可用性
我的可用性需求是...
99.999% 的极高正常运行时间保证。
如果可用性至关重要,例如在电子商务应用程序中,我们建议使用Cloud Firestore
保证至少 99.95% 的正常运行时间。
如果可接受非常高但不是关键的可用性,我们建议使用Cloud FirestoreRealtime Database
离线查询本地数据
我的应用程序需要在连接受限或没有连接的设备上执行查询......
频繁地。
对于用户离线时对本地数据的复杂查询功能,我们推荐Cloud Firestore
很少或从不。
如果您希望您的用户始终在线,我们建议使用Cloud FirestoreRealtime Database
数据库实例数
在我的个人项目中,我需要使用...
许多数据库,例如每个主要客户的数据库。
由于它允许您将多个数据库添加到单个 Firebase 项目,因此我们建议使用实时数据库
只是一个数据库。
如果您需要单个数据库,我们建议使用Cloud FirestoreRealtime Database

还有哪些其他重要事项需要考虑?

在考虑了前面的关键考虑因素之后,您可能已准备好选择数据库。如果您仍在权衡利弊,本部分将介绍 Cloud Firestore 和实时数据库之间的其他差异。

数据模型

Realtime Database 和 Cloud Firestore 都是 NoSQL 数据库。

实时数据库云端 Firestore
将数据存储为一棵大型 JSON 树。
  • 简单的数据很容易存储。
  • 复杂的分层数据更难大规模组织。

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

将数据存储为文档集合。
  • 简单的数据很容易存储在文档中,这与 JSON 非常相似。
  • 使用文档中的子集合可以更轻松地大规模组织复杂的分层数据。
  • 需要较少的反规范化和数据扁平化。

详细了解Cloud Firestore 数据模型

实时和离线支持

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

实时数据库云端 Firestore
离线支持 Apple 和 Android 客户端。对 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 项目中。