【问题标题】:What's the difference between Cloud Firestore and the Firebase Realtime Database?Cloud Firestore 和 Firebase 实时数据库有什么区别?
【发布时间】:2018-03-14 22:56:54
【问题描述】:

Google 刚刚发布了 Cloud Firestore,这是他们新的应用文档数据库。

我一直在阅读文档,但我没有发现 Firestore 和 Firebase DB 之间有很多区别。

主要的一点是,Firestore 使用文档和集合,与 Firebase 相比,它允许轻松使用查询,Firebase 是具有 JSON 基础的传统 noSQL 数据库。

我想了解更多关于它们的区别或用法,或者 Firestore 是否刚刚取代 Firebase DB?

【问题讨论】:

  • 在 Firestore 上读取速度更快,在 Firebase 实时数据库上写入速度更快

标签: firebase firebase-realtime-database google-cloud-platform google-cloud-firestore


【解决方案1】:

所以我就这个问题写了一个entire blog post,我建议您查看它(或official documentation)以获得更完整的答案。

但如果你想要快速(-ish)总结,这里是:

更好的查询和更结构化的数据 -- 虽然实时数据库只是一个巨大的 JSON 树,但 Cloud Firestore 的结构化程度更高。您的所有数据都由文档(基本上是键值存储)和集合(文档集合)组成。文档还会经常指向子集合,这些子集合包含其他文档,而这些子集合本身可以包含其他文档,等等。

这种结构化数据可以通过两种方式帮助您。首先,所有查询都是浅的,这意味着您可以请求一个文档,而无需抓取下面的所有数据。这意味着您可以以一种对您更有意义的方式分层存储数据,而不必担心保持数据库浅层。其次,您有更强大的查询。例如,您现在可以跨多个字段进行查询,而无需创建那些组合(和非规范化)来自数据库其他部分的数据的“组合”字段。在某些情况下,Cloud Firestore 会直接运行这些查询,而在其他情况下,它会自动为您创建和维护索引。

专为扩展而设计 -- Cloud Firestore 将能够比实时数据库更好地扩展。请务必注意,您的查询会根据结果集的大小而不是数据集的大小进行缩放。因此,无论您的数据集有多大,搜索都将保持快速。

更轻松地手动获取数据 -- 与实时数据库一样,您可以在 Cloud Firestore 中设置侦听器以实时流式传输更改。但是,如果您不想要这种行为,而只想要一个简单的“获取我的数据”调用,Cloud Firestore 也有,并且它是作为主要用例内置的。 (它们比实时数据库领域的once 调用要好得多)

多区域支持 -- 这基本上意味着更高的可靠性,因为您的数据同时在多个数据中心共享。但是您仍然具有很强的一致性,这意味着您始终可以进行查询并确保您获得的是最新版本的数据。

不同的定价模式 -- 虽然实时数据库主要根据存储或网络带宽收费,但 Cloud Firestore 主要根据您执行的操作次数收费。这会更好,还是更糟?这取决于您的应用。

对于为新闻应用程序、回合制多人游戏或类似您自己的 Stack Overflow 版本提供支持,从定价的角度来看,Cloud Firestore 可能看起来非常有利。对于像实时群组绘图应用程序这样的应用程序,您在一秒钟内向多人发送多个更新,它可能会比实时数据库更昂贵。

为什么您仍然希望使用实时数据库 -- 这归结为几个原因。

  1. 我之前提到的整个“对于频繁更新的应用来说可能会更便宜”,

  2. 它已经存在了很长时间,并且经过了数千个应用程序的实战测试,

  3. 它有更好的延迟,当您需要具有可靠低延迟的东西以获得实时感觉时,实时数据库可能会更好地工作。

对于大多数新应用,我们建议您查看 Cloud Firestore。但是,如果您的应用程序已经在实时数据库中,我真的不建议仅仅为了切换而切换,除非您有令人信服的理由这样做。

希望有帮助!

【讨论】:

  • 非常感谢托德!我看到了公告帖子,但没有看到这个!我完全爱上了 Firestore,可悲的是,现在我需要为这个 xD 重写我的整个 RxJava。
  • Google Cloud Datastore 如何适应?天真地,它似乎与 Cloud Firestore 有很多重叠。 @ToddKerpelman
  • 它确实与 Cloud Datastore 有很多共同点。最大的不同是与 Firebase 的集成,因此您可以访问移动和网络 SDK 以及原生离线模式,以及实时同步功能。 Cloud Datastore 非常适合大型服务器端开发,您可以在其中管理自己与应用的连接,例如在 App Engine 上或通过 Compute/Container Engine 运行自己的网站。
  • “强一致性”的真正含义是什么? CAP 定理指出您无法在分布式和可用环境中“确保您获得最新版本的数据”。一致性、可用性、分区容差 => 选择 2。
  • @ToddKerpelman 您有机会进行 Cloud Firestore / Cloud Datastore 比较。两者看起来非常相似。
【解决方案2】:

您可以在此处阅读整篇文章: https://medium.com/@beingrahul/firebase-cloud-firestore-v-s-firebase-realtime-database-931d4265d4b0

Firebase Realtime database 被构造为 JSON 树,而Cloud Firestore 将数据存储在文档(文档是一组键值对)和集合(文档集合)中。

更多结构数据

实时数据库将数据存储在 JSON 树中,而 Cloud Firestore 将数据存储在与 JSON 非常相似的文档中。

在 Cloud FireStore 中,文档可以包含子集合和嵌套对象(如上图中的“电话”),这两者都可以包含原始字段,如字符串(如上图中的“姓名”、“电子邮件”)或复杂的对象,如列表。

更好的查询

  • 在实时数据库中,我们只能对单个查询中的单个属性进行排序或过滤,而不能同时对属性进行排序和过滤。在里面 Cloud FireStore,您可以链接过滤器并组合过滤器和 在单个查询中对属性进行排序。
  • 如果您想按降序获取数据,则 Cloud FireStore 是 对你很有用。对于实时数据库,没有查询 可用的功能。
  • 您还可以链接多个“where”方法来创建更具体的 Cloud FireStore 中的查询(逻辑与)。

可扩展性

Cloud Firestore 将能够比实时数据库更好地扩展。请务必注意,您的查询性能与结果集的大小成正比,而不是与数据集的大小成正比。因此,无论您的数据集有多大,搜索都将保持快速。

手动获取数据

我们可以像在实时数据库中一样在 Cloud FireStore 中实时收听数据,但在 Cloud FireStore 中,我们还可以手动获取数据(如果您只想一次获取任何数据)。

安全

在实时数据库中,我们需要使用验证规则单独验证数据,但在 Cloud FireStore 中,数据验证会自动进行。

写入数据

我们可以使用set()update()delete() 方法的任意组合将多个操作作为一个批处理执行并以原子方式完成它们。

定价

在实时数据库中,仅对带宽和存储收费,但费率更高。在 Cloud FireStore 中,主要对在数据库中执行的操作(读取、写入、删除)收费,并以较低的速率对带宽和存储进行收费。

【讨论】:

  • 能把原文链接一下就好了:medium.com/@beingrahul/…
  • 您能更详细地解释一下“自动进行数据验证”是什么意思吗?
【解决方案3】:

选择 Cloud Firestore 而不是实时数据库的原因

这是一个改进版

Firebase 数据库对于基本应用程序来说已经足够了。但它还不足以处理复杂的需求。这就是引入 Cloud Firestore 的原因。以下是一些重大变化。

  • 改进了基本文件结构。
  • 对 Web 客户端的离线支持。
  • 支持更高级的查询。
  • 写入和事务操作是原子的。
  • 可靠性和性能改进
  • 缩放将是自动的。
  • 会更安全。

定价

在 Cloud Firestore 中,费率已经降低,尽管它主要根据在您的数据库中执行的操作以及带宽和存储来收费。您也可以设置每日支出限额。 Here 是有关计费的完整详细信息。

Google 的未来计划

当他们发现实时数据库的缺陷时,他们创建了另一种产品,而不是改进旧产品。尽管没有可靠的细节显示他们目前在实时数据库上的排名,但现在是时候开始考虑它可能会被放弃了。



【讨论】:

  • “是时候开始考虑它可能会被放弃了。”这真的可以说吗?至少对于简单的用例和定价问题来说,它似乎更理想。
【解决方案4】:

也建议来自谷歌的链接: Firebase Real-time Database vs FireStore

摘自谷歌文档,这里有一个小总结:

FireBase 实时数据库是基于 JSON 的 NO SQL 数据库,适用于区域性移动应用,通常用于在用户/设备之间实时存储和同步数据/极低延迟。

FireStore 是类似于 JSON 的 NOSQL DB,旨在实现高并发、全局、易于自动扩展的持久性,专为具有典型用例(如资产跟踪、真实时间分析、建立零售产品目录、社交用户资料、游戏排行榜、基于聊天的应用程序等。

【讨论】:

    【解决方案5】:

    虽然大部分答案基本上是正确的,但 Firebase 文档表明,说 Firestore 是新方法并不是一件简单的事情。这取决于你想对数据库做什么! Firebase 在下面的链接中向您提出了许多问题,请仔细考虑,因为围绕一个编写应用程序然后发现您需要使用另一个并不是那么容易!

    例如: 数据库实例数: 您需要很多数据库,每个主要客户 1 个,还是只需要 1 个大型数据库? 如果是前者,则使用 Firebase 实时数据库,如果后者则使用 Firestore。

    rtdb-vs-firestore

    【讨论】:

      【解决方案6】:

      Cloud Firestore 基本上是为简单但大数据而设计的 并且实时数据库是为复杂的数据存储而设计的(它看起来像 JSON)

      基本介绍。对两者:-

      • Cloud Firestore 是 Firebase 用于移动应用开发的最新数据库。它以实时数据库的成功为基础,采用一种新的、更直观的数据模型。 Cloud Firestore 还具有比实时数据库更丰富、更快速的查询和扩展能力。
      • 实时数据库是 Firebase 的原始数据库。对于需要跨客户端实时同步状态的移动应用来说,这是一种高效、低延迟的解决方案。

      主要区别:- 实时数据库:::

      • 简单的数据很容易存储。
      • 复杂的分层数据难以大规模组织。 云火库
      • 简单数据易于存储在文档中,与 JSON 非常相似。
      • 使用文档中的子集合更易于大规模组织复杂的分层数据。
      • 需要较少的非规范化和数据扁平化。

      来源(更多信息..由谷歌):- https://firebase.google.com/docs/database/rtdb-vs-firestore#key_considerations

      【讨论】:

        【解决方案7】:
        • Cloud Firestore 是 Firebase 的移动应用数据库 发展。它建立在实时数据库的成功之上 一种新的、更直观的数据模型。 Cloud Firestore 还具有 比实时数据库更丰富、更快速的查询和扩展。

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

        【讨论】:

          猜你喜欢
          • 2020-08-30
          • 2018-03-14
          • 2019-06-22
          • 2019-08-07
          • 1970-01-01
          • 2021-03-01
          • 2018-03-27
          相关资源
          最近更新 更多