Firebase 提供了两种支持实时数据同步且可通过客户端访问的云数据库解决方案:
Cloud Firestore 是 Firebase 用于移动应用开发的最新数据库。它具备更直观的新数据模型,在 Realtime Database 的成功基础上更上一层楼。与 Realtime Database 相比,Cloud Firestore 还提供了更丰富、更快速的查询以及更好的扩容功能。
Realtime Database 是 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 Firestore 或 Realtime Database 都可以。
|
对本地数据执行离线查询 |
我的应用在连接受限或没有连接的设备上执行查询的频率为…
频繁。
如需在用户离线时对本地数据执行复杂查询的功能,建议使用 Cloud Firestore。
极少或从不。
如果您预期用户会始终在线,使用 Cloud Firestore 或 Realtime Database 都可以。
|
还有哪些其他需要注意的重要事项?
在考虑了上述重要因素后,您可能已准备好选择数据库。如果您仍然在权衡利弊,请参阅此部分,详细了解 Cloud Firestore 与 Realtime Database 之间的其他差异。
数据模型
Realtime Database 和 Cloud Firestore 都是 NoSQL 数据库。
Realtime Database | Cloud Firestore |
---|---|
将数据存储为一个大型 JSON 树。
详细了解 Realtime Database 数据模型。 |
将数据存储为文档集合。
详细了解 Cloud Firestore 数据模型。 |
实时和离线支持
两者都具有移动优先的实时 SDK,并且都支持离线就绪应用的本地数据存储。
Realtime Database | Cloud Firestore |
---|---|
为 Apple 和 Android 客户端提供离线支持。 | 为 Apple、Android 和 Web 客户端提供离线支持。 |
在线状态
了解客户端处于在线还是离线状态非常有用。Firebase Realtime Database 可以记录客户端连接状态,并在客户端连接状态发生变化时提供更新。
Realtime Database | Cloud Firestore |
---|---|
支持在线状态检测。 | 不提供原生支持。您可以使用 Cloud Functions 同步 Cloud Firestore 和 Realtime Database,从而利用 Realtime Database 对在线状态检测的支持。请参阅在 Cloud Firestore 中构建在线状态系统。 |
查询
通过查询从数据库检索、排序和过滤数据。
Realtime Database | Cloud Firestore |
---|---|
深度查询,提供有限的排序和过滤功能。
|
索引式查询,提供复合排序和过滤功能。
|
写入和事务
Realtime Database | Cloud Firestore |
---|---|
基本写入和事务操作。 | 高级写入和事务操作。 |
可靠性和性能
Realtime Database | Cloud Firestore |
---|---|
Realtime Database 是一种单区域解决方案。
|
Cloud Firestore 是一种可自动扩容的单区域和多区域解决方案。
|
可伸缩性
Realtime Database | Cloud Firestore |
---|---|
扩容需要进行分片。
|
自动扩容。
|
安全
Realtime Database | Cloud Firestore |
---|---|
采用将授权与验证分开的级联规则语言。
|
采用将授权与验证合并的非级联规则。
|
价格
这两种解决方案都可在 Spark 和 Blaze 定价方案中获得。
Realtime Database | Cloud Firestore |
---|---|
仅对带宽和存储收费,但费率较高。 详细了解 Realtime Database 定价方案。 |
主要针对在数据库中执行的操作(读取、写入、删除)收费,并以较低的费率对带宽和存储收费。
Cloud Firestore 支持对 App Engine 项目设置每日支出限额,确保不会超出您能接受的费用水平。 详细了解 Cloud Firestore 定价方案。 |
使用 Cloud Firestore 和 Realtime Database
您可以在同一个 Firebase 应用或项目中同时使用这两种数据库。这两种 NoSQL 数据库可以存储相同类型的数据,客户端库的工作方式也相似。如果您决定在应用中同时使用这两种数据库,请注意数据库之间的上述差异。
详细了解 Realtime Database 和 Cloud Firestore 提供的功能。
准备好选择数据库了吗?
希望此比较能够帮助您决定采用哪个 Firebase 数据库解决方案。现在,您可以了解如何将数据库添加到 Firebase 项目中。
- 如需了解 Cloud Firestore,请查看 Cloud Firestore 使用入门。
- 如需了解 Realtime Database,请参阅适用于您的平台的使用入门主题:Apple、Android、C++、Unity、Web 或 REST。