angular - 查询根据结果集的大小而不是数据集的大小进行缩放

标签 angular firebase ionic3 google-cloud-firestore

这是关于最新Firebase Cloud Firestore的问题.In this doc它是这样说的:

It also allows for expressive queries. Queries scale with the size of your result set, not the size of your data set, so you'll get the same performance fetching 1 result from a set of 100, or 100,000,000.

这个说法我不是很清楚。您能稍微解释一下这个用例吗?

最佳答案

这里是 firebaser

在大多数数据库(包括 Firebase 自己的实时数据库)中,查询性能取决于您请求的项目数量和您从中请求项目的集合大小的组合。

所以在大多数数据库上:

  1. 如果您请求 100 万个项目中的 10 个项目,这将比您请求 100 万个项目中的 1000 个项目更快。
  2. 如果您请求 100 万个项目中的 10 个项目,这将比您请求 1 亿个项目中的 10 个项目更快。

#1 的性能差异在意料之中,单是数据传输就让人难以忘怀。由于#2 依赖于服务器端处理,开发人员有时会忘记#2。许多关系型 DBMS 优化得非常好,这意味着性能差异通常是对数性能差异。但是如果集合大小足够大,即使是 log(n) 性能也会很明显。

Cloud Firestore 水平扩展,这意味着上面的规则 #2 不适用:

  • 如果您请求 100 万个项目中的 10 个项目,与请求 1 亿个项目中的 10 个项目所花费的时间相同。

这是因为 Firestore 的查询系统的设计方式。虽然您可能无法将每个查询直接从关系数据模型建模到 Firestore 数据模型,但如果您可以根据 Firestore 查询定义您的用例,则可以保证在与数量相关的时间内执行您请求的结果。 (在这里转述吉尔的评论)

关于angular - 查询根据结果集的大小而不是数据集的大小进行缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46603205/

相关文章:

firebase - 坚持为我的Firebase数据库设计架构

windows - Win32/64 应用程序是否可以从 Firebase 接收推送通知消息?

android - ionic - 读取 android Assets 文件

javascript - 功能策略已在本文档中禁用地理定位

angular - 需要取消订阅 Firestore/Angularfire2 订阅

javascript - PrimeNg 编辑器未显示 - Angular

javascript - 响应式(Reactive)形式的 Angular2 通用异步验证器

Angular2错误: Unexpected value 'AuthGuard' exported by the module 'AppModule'

angular - 如何在不循环所有内容的情况下获取 Angular2 模板中数组的最后一个元素?

android - Google 在 Firebase 身份验证上测试用户