5

这是一个关于最新Firebase Cloud Firestore的问题。在这个文档中它是这样说的:

它还允许表达查询。查询随结果集的大小而不是数据集的大小而扩展,因此从 100 个或 100,000,000 个集合中获取 1 个结果时,您将获得相同的性能。

这个声明对我来说不是很清楚。你能解释一下这个用例吗?

4

2 回答 2

22

火力基地在这里

在大多数数据库(包括 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 查询定义用例,则可以保证在仅相对于您要求的结果。(在这里转述吉尔的评论)

于 2017-10-06T14:29:51.203 回答
11

这可能写得有点混乱。它不是经典意义上的用例,它只是关于 Firestore 性能的陈述。

它基本上说,如果您请求 100 件中的 1 件或 100.000.000 件中的 1 件,它都一样快。这里 1 是您的结果集,100/100.000.000 是您的数据集。因此,请求 100.000.000 中的 1 项将比请求 100 中的 50 项更快。

我希望这能让它更清楚一点!

于 2017-10-06T12:18:07.880 回答