Google Firestore 是 Google Cloud Datastore 的子集还是超集?
Posted
技术标签:
【中文标题】Google Firestore 是 Google Cloud Datastore 的子集还是超集?【英文标题】:Google Firestore a subset or superset of Google Cloud Datastore? 【发布时间】:2018-05-21 04:52:03 【问题描述】:Google 宣布推出 Firestore,这是区块上的新文档数据存储。
我已经使用 Google Cloud Datastore 开发应用程序超过六个月了,在阅读了blog 之后,我觉得 Firestore 似乎是一个更好的选择。
备用集合-文档-子集合的概念对我来说看起来很棒,因为在为数据存储设计架构时,我知道我将无法查询嵌套字段。现在有了 firestore 子集合,我获得了完整的查询功能,这对我来说改变了游戏规则(我可以用最少的查询获得最多的数据)。
作为反驳论点,flowchart 建议我使用数据存储,因为我没有任何移动客户端。
像使用 Datastore 一样使用 Firestore 是个好主意吗? (我会方便地忽略移动客户端/实时更新/同步功能!)
【问题讨论】:
【参考方案1】:更新 2 (01/31/19)
从今天开始,Cloud Firestore 不再处于 Beta 版,而是普遍可用: https://cloud.google.com/blog/products/databases/announcing-cloud-firestore-general-availability-and-updates
这意味着 Cloud Datastore 不再是新项目的选项(您可以继续在现有项目中使用它)。想要使用 Datastore API 的新项目可以在 Datastore 模式下使用 Cloud Firestore。
更新 1
正如您所注意到的,自发布此问题以来,我们已经扩展了 Cloud Firestore。
这意味着 Cloud Firestore 现在有 2 种模式:
-
最初的发布是“原生模式”
新版本增加了“数据存储模式”
“数据存储模式”是第三代 Cloud Datastore。第一个称为 Master/Slave Datastore,第二个是 High-Replication Datastore (HRD),在 2013 年更名为 Cloud Datastore。
以下答案仍然很重要,因为这两种模式目前是互斥的,因此您需要选择其中一种。
主要区别在于 Cloud Firestore 在 Datastore 模式下对 Cloud Datastore 的改进。最大的是:
现在每个实体组的写入吞吐量不受限制(原为 1 次写入/秒) 事务不再限于 25 个实体组 现在所有查询都高度一致。另请注意,无论模式如何,Cloud Firestore 都是测试版,因此新的Service-Level Agreement (SLA) 在产品达到General Availability (GA) 之前不会生效。
原答案
Cloud Datastore (CD) 和 Cloud Firestore (CF) 相似,但在显着方面不同。
CF 以移动设备为中心,具有 Firebase SDK 和规则功能的直接移动客户端功能。 CD 以服务器为中心,包含更广泛的服务器客户端库,以及一些基于 App Engine Standard 的成熟框架,这些框架捆绑了 memcache 功能。
CF 有一个更新的存储层,它与 Cloud Spanner 一样具有高度一致性,但是,它仍处于测试阶段,没有 SLA。 CD 的存储层仅在实体组内高度一致,并最终在实体组之间保持一致,但是,它是 GA,多区域位置的 SLA 为 99.95%。
CF 目前仅在美国多区域可用。 CD 可在包括美洲、欧洲、亚洲和澳大利亚在内的十几个地点使用云。
测试期间的 CF 有 2500 次写入/秒的指导限制,而我们在 GA 之前积累了监控和调整系统的经验,而 CD 将很乐意处理超过 100 万次写入/秒(不过请先联系您的客户代表)。
CF 和 CD 的一组查询功能重叠但不相同。总体而言,CD 具有我们尚未在 CF 中构建的更广泛的查询功能,因此您可以在 CD 中拥有更大的灵活性。
总的来说,我会考虑这个列表,看看是否有任何差异会影响或破坏您正在尝试构建的内容,然后选择最适合您需求的数据库。
【讨论】:
Firestore 是否被定位为 Cloud Datastore 的替代品? imgur.com/a/EWx5v @DimuDesigns 来自 Dan 的好回答:***.com/questions/48992325/… 这是一个过时的答案。见下面我的 内部缩写的使用让我很难理解这一点。什么是“GA”?什么是“SLA”? @trolkotze - 它们是过去几十年的标准软件术语,但您仍然是对的。我在第一次使用时扩展并链接到 GA 和 SLA 的详细信息。【参考方案2】:Firestore 是 Datastore 的第 3 代架构和替代品,基本上有 2 种模式可用:Native 模式和 Datastore 模式。
有关选择的文档:https://cloud.google.com/datastore/docs/firestore-or-datastore 视频概览:https://www.youtube.com/watch?v=SYG-BgXoJFQ【讨论】:
太棒了!我参加了 Next 18,但我想我错过了这次会议。谢谢你的更新。 那是视频中的@DanMcGrath(接受答案的同一个人)。谷歌似乎改变了立场,Firestore 现在即将取代 Datastore。【参考方案3】:我会说 Datastore 现在是 Firestore 的一个子集:
Cloud Firestore 是 Cloud Datastore 的下一个主要版本,也是该产品的品牌重塑。 See Choosing between Cloud Firestore and Cloud Datastore
Cloud Firestore 可以在“Datastore 模式”下运行,使其向后兼容 Cloud Datastore。在 Cloud Firestore 正式发布一段时间后,Google 将开始联系现有 Cloud Datastore 数据库的所有者,以安排在 Datastore 模式下自动升级到 Cloud Firestore。 See auto upgrade
【讨论】:
第一个近似值似乎是这样。但是还有一些额外的 Cloud Firestore 原生模式限制不适用于 Datastore 模式:“无集合组查询和投影查询”和“在任意数量的集合中每个事务最多 500 个文档”。 (相对于“事务可以访问任意数量的实体组”)并且没有命名空间。 cloud.google.com/datastore/docs/firestore-or-datastore 我也很想知道是否存在显着的延迟差异。【参考方案4】:我认为 cloud firestore 也有 nodejs 客户端,并且它不以移动为中心。实际上,这就是以移动为中心的 Firebase 实时数据库与以任何东西为中心的 Cloud Firestore 之间的区别。
【讨论】:
Firestore 和“旧版”Firebase RTDB 都有一个 Node.js SDK。因此,这里没有(而且从来没有,或者至少在我知道的情况下没有任何区别)。从这个意义上说,两者都是“以任何东西为中心”,而 Cloud Datastore(以及“Datastore 模式”下的 Firestore)是以服务器为中心的。【参考方案5】:Google documentation 说:
Firestore 是 Datastore 的新版本,删除了几个 数据存储限制。
【讨论】:
以上是关于Google Firestore 是 Google Cloud Datastore 的子集还是超集?的主要内容,如果未能解决你的问题,请参考以下文章
Firestore 是不是有 Dart 接口 - 使用 https://firebase.google.com/docs/firestore/quickstart 中的 API?
Firestore:如何设置 GOOGLE_APPLICATION_CREDENTIALS?
限制通过VPC网络访问Google Cloud Firestore。
导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?
如何让我的 Google-service.json 与 Google Cloud Platform 中的 Firestore 一起使用?