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/

相关文章:

angular - Http 提供商错误 Ionic 3

angular - 在应用程序组件以外的组件中使用 <router-outlet>?

angular - 在 Angular 6 中添加 http header

Firebase:INVALID_TOKEN:无法验证 MAC

javascript - 如何恢复根据从 Firebase 获取的数字生成的列表的顺序?

ionic-framework - 在 Ionic 3 中显示由 Native Camera 拍摄的 FILE_URI 图像

javascript - 在编辑模式下执行 CRUD 操作时选择 ionic 选择选项

angular2 - 用户活跃和空闲

Angular 2 - 异步管道中的无限循环

ios - 如何使用 FIRebase 将带有对象的字典追加到数组中