"Datastore mode" 中的 Firestore 有什么优势吗 "Native mode"
Does Firestore in "Datastore mode" have any advantages "Native mode"
Google Cloud Firestore 即将取代旧版 Google Cloud Datastore。然后可以选择在 "native mode" 或 "datastore mode" 中使用 Cloud Firestore。前者允许通过通常的 Firestore SDK 访问 Firestore,而后者允许使用旧的 Cloud Datastore SDK(没有 Web/Mobile APIs)。
我还不熟悉 Firestore。我的问题是:除了将东西移植到新的 API 之外,实际上还有什么东西是 "native mode" 中的 Firestore 不能用旧的 Cloud Datastore(或其替代品:Firestore)做的吗?在 "datastore mode")?或者使用 "datastore mode" 的任何其他优势(例如成本)?
如果不是,那么似乎在 "datastore mode" 中使用 Firestore 实际上没有任何优势,除了使用旧云数据存储对旧代码的兼容性。
我的假设是否正确,即 Firestore "datastore mode" 除了能够使用旧版 Datastore API 之外绝对没有任何优势(代价是 not 能够使用更新且功能可能更丰富的 Firestore APIs,包括移动和网络 APIs)?
根据 official documentation,尽管 Cloud Firestore 向后兼容 Cloud Datastore,但新的数据模型、实时更新以及移动和 Web 客户端库功能并非如此。
Datastore 模式下的 Cloud Firestore 使用 Cloud Datastore 系统行为但访问 Cloud Firestore 的存储层,从而消除了以下 Cloud Datastore 限制:
- 最终一致性,所有 Cloud Datastore 查询都变得强
持续的。
- 交易不再局限于 25 个实体组。
- 对实体组的写入不再限于每秒 1 次。
Datastore 模式禁用与 Cloud Datastore 不兼容的 Cloud Firestore 功能:
- 该项目将接受 Cloud Datastore API 请求并拒绝 Cloud Firestore API 请求。
- 该项目将使用 Cloud Datastore 索引而不是 Cloud Firestore 索引。
- 您可以在此项目中使用 Cloud Datastore 客户端库,但不能使用 Cloud Firestore 客户端库。
- Cloud Firestore 实时功能将不可用。
- 在 GCP 控制台中,数据库将使用 Cloud Datastore 查看器。
即使是新项目,使用 "datastore mode" 也有好处。
我正在为来自 MySQL 的迁移项目评估 firestore "Datastore mode" 和 "Native mode" 的两种模式。
一方面,我考虑将 "Datastore mode" 用于一个后端全局存储库,因为:
- 仅限服务器端
- 对所有实体的搜索查询的性能期望很高
- 对多个属性进行查询和排序
- 具有一种根类和少量二级类的结构化数据模型
- 事务需求有限的大量写入,实体组内投影的大量读取
另一方面,"Native mode" 似乎符合面向特定应用程序的用户的一些要求,因为:
- Web,iOS,Android,API 双向同步界面
- 几个偶尔连接的用例
- 几乎没有大型多态对象需要同步和保存
- 主要是对一个属性(父对象)的简单查询
不过,第二个项目提倡数据存储模式是有原因的
- 带命名空间的多租户
两种模式都满足了共同的需求,支持迁移到 NoSQL 技术的决定
- 可扩展性
- 没有管理员
- 可用性
- 发展速度
第 2 项到第 5 项和第 10 项基于数据存储模式的特定功能,在本机模式下是不可能的。项目 6 到 9 特定于本机模式。
更新:2019 年 3 月 21 日
在我的第一个答案中描述的评估六个月后,我的团队正在使用 Firestore(本机)模式和 Datastore 模式。
2 个基于 Firestore 的项目。我们使用了很多集合、子集合和文档的概念,以及数据的潜在隔离。
我们还在 iOS 和 Android 应用中为根据强大的业务和安全规则选择的子集合实现了侦听器,这在数据存储中是不可能的。
9 个基于 Datastore 的项目。对于其中的三个 3,我们使用了很多命名空间和种类的概念。我们还使用种类属性的全局索引和属性服务器端的投影,这在 Firestore 中是不可能的。
PS:我们正在考虑开源我们的 python 库,以便在 Firestore 和 Datastore 上快速开发一个通用的 API 运行。
费用。
Datastore 模式下的 Firestore 与原始数据存储区一样支持仅键查询和投影查询。这意味着这些查询的结果集计入免费的 "Cloud Firestore Small Operations"。
我们每天积累数十亿次这样的小操作,如果没有投影查询,实际上我们的数据存储成本将增加 10 倍,这是无法承受的。
由于此功能在 Firestore 本机模式下不可用 - 并且添加了强一致性 - 我们预计它的性能会低于原始数据存储区,但在我们的测试中情况并非如此。对于我们的应用程序,在所有类型的操作中,数据存储模式下的 Firestore 始终以两倍的速度执行。
Because Firestore in Datastore mode is optimized for server use cases and for App Engine, we recommend using Firestore in Datastore mode for databases that will be used primarily by App Engine apps. Firestore in Native mode is most useful for mobile and real-time notification use cases.
https://cloud.google.com/appengine/docs/flexible/go/using-cloud-datastore
阅读这篇 post 后进一步查看文档时,我看到了这个官方 GCP 页面。它用简单的英语解释了 Firestore“数据存储模式”主要推荐用于 server-side 用例。
这完美地回答了我的问题,因为我的用例只有 server-side。注意:我还没有任何关于 Firestore 的第一手经验,但我很感激你的回答。
Google Cloud Firestore 即将取代旧版 Google Cloud Datastore。然后可以选择在 "native mode" 或 "datastore mode" 中使用 Cloud Firestore。前者允许通过通常的 Firestore SDK 访问 Firestore,而后者允许使用旧的 Cloud Datastore SDK(没有 Web/Mobile APIs)。
我还不熟悉 Firestore。我的问题是:除了将东西移植到新的 API 之外,实际上还有什么东西是 "native mode" 中的 Firestore 不能用旧的 Cloud Datastore(或其替代品:Firestore)做的吗?在 "datastore mode")?或者使用 "datastore mode" 的任何其他优势(例如成本)?
如果不是,那么似乎在 "datastore mode" 中使用 Firestore 实际上没有任何优势,除了使用旧云数据存储对旧代码的兼容性。
我的假设是否正确,即 Firestore "datastore mode" 除了能够使用旧版 Datastore API 之外绝对没有任何优势(代价是 not 能够使用更新且功能可能更丰富的 Firestore APIs,包括移动和网络 APIs)?
根据 official documentation,尽管 Cloud Firestore 向后兼容 Cloud Datastore,但新的数据模型、实时更新以及移动和 Web 客户端库功能并非如此。
Datastore 模式下的 Cloud Firestore 使用 Cloud Datastore 系统行为但访问 Cloud Firestore 的存储层,从而消除了以下 Cloud Datastore 限制:
- 最终一致性,所有 Cloud Datastore 查询都变得强 持续的。
- 交易不再局限于 25 个实体组。
- 对实体组的写入不再限于每秒 1 次。
Datastore 模式禁用与 Cloud Datastore 不兼容的 Cloud Firestore 功能:
- 该项目将接受 Cloud Datastore API 请求并拒绝 Cloud Firestore API 请求。
- 该项目将使用 Cloud Datastore 索引而不是 Cloud Firestore 索引。
- 您可以在此项目中使用 Cloud Datastore 客户端库,但不能使用 Cloud Firestore 客户端库。
- Cloud Firestore 实时功能将不可用。
- 在 GCP 控制台中,数据库将使用 Cloud Datastore 查看器。
即使是新项目,使用 "datastore mode" 也有好处。
我正在为来自 MySQL 的迁移项目评估 firestore "Datastore mode" 和 "Native mode" 的两种模式。
一方面,我考虑将 "Datastore mode" 用于一个后端全局存储库,因为:
- 仅限服务器端
- 对所有实体的搜索查询的性能期望很高
- 对多个属性进行查询和排序
- 具有一种根类和少量二级类的结构化数据模型
- 事务需求有限的大量写入,实体组内投影的大量读取
另一方面,"Native mode" 似乎符合面向特定应用程序的用户的一些要求,因为:
- Web,iOS,Android,API 双向同步界面
- 几个偶尔连接的用例
- 几乎没有大型多态对象需要同步和保存
- 主要是对一个属性(父对象)的简单查询
不过,第二个项目提倡数据存储模式是有原因的
- 带命名空间的多租户
两种模式都满足了共同的需求,支持迁移到 NoSQL 技术的决定
- 可扩展性
- 没有管理员
- 可用性
- 发展速度
第 2 项到第 5 项和第 10 项基于数据存储模式的特定功能,在本机模式下是不可能的。项目 6 到 9 特定于本机模式。
更新:2019 年 3 月 21 日
在我的第一个答案中描述的评估六个月后,我的团队正在使用 Firestore(本机)模式和 Datastore 模式。
2 个基于 Firestore 的项目。我们使用了很多集合、子集合和文档的概念,以及数据的潜在隔离。 我们还在 iOS 和 Android 应用中为根据强大的业务和安全规则选择的子集合实现了侦听器,这在数据存储中是不可能的。
9 个基于 Datastore 的项目。对于其中的三个 3,我们使用了很多命名空间和种类的概念。我们还使用种类属性的全局索引和属性服务器端的投影,这在 Firestore 中是不可能的。
PS:我们正在考虑开源我们的 python 库,以便在 Firestore 和 Datastore 上快速开发一个通用的 API 运行。
费用。
Datastore 模式下的 Firestore 与原始数据存储区一样支持仅键查询和投影查询。这意味着这些查询的结果集计入免费的 "Cloud Firestore Small Operations"。 我们每天积累数十亿次这样的小操作,如果没有投影查询,实际上我们的数据存储成本将增加 10 倍,这是无法承受的。
由于此功能在 Firestore 本机模式下不可用 - 并且添加了强一致性 - 我们预计它的性能会低于原始数据存储区,但在我们的测试中情况并非如此。对于我们的应用程序,在所有类型的操作中,数据存储模式下的 Firestore 始终以两倍的速度执行。
Because Firestore in Datastore mode is optimized for server use cases and for App Engine, we recommend using Firestore in Datastore mode for databases that will be used primarily by App Engine apps. Firestore in Native mode is most useful for mobile and real-time notification use cases.
https://cloud.google.com/appengine/docs/flexible/go/using-cloud-datastore
阅读这篇 post 后进一步查看文档时,我看到了这个官方 GCP 页面。它用简单的英语解释了 Firestore“数据存储模式”主要推荐用于 server-side 用例。
这完美地回答了我的问题,因为我的用例只有 server-side。注意:我还没有任何关于 Firestore 的第一手经验,但我很感激你的回答。