firebase 查询的大小与结果集的大小有关,而不是与数据集的大小有关

q7solyqu  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(109)

这是一个关于最新的Firebase Cloud Firestore的问题。在这个文档中,它是这样说的:
它还允许表达性查询。查询的规模与结果集的大小有关,而不是与数据集的大小有关,因此从100或100,000,000个结果中提取1个结果将获得相同的性能。
这个说法我不清楚。你能详细解释一下这个用例吗?

2lpgd968

2lpgd9681#

  • 燃烧器在这里 *

在大多数数据库(包括Firebase自己的实时数据库)中,查询性能取决于您请求的项目数量和您请求项目的集合大小的组合。
在大多数数据库中:
1.如果您请求100万个项目中的10个项目,这将比您请求1000个项目中的1000个项目更快。
1.如果您请求100万个项目中的10个项目,这将比您请求1亿个项目中的10个项目更快。

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

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

  • 如果您请求100万个项目中的10个项目,则需要的时间与请求1亿个项目中的10个项目相同。

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

lqfhib0f

lqfhib0f2#

这可能写得有点混乱。它不是经典意义上的用例,它只是关于Firestore性能的声明。
它基本上是说,无论您请求100个项目中的1个项目还是100.000.000个项目中的1个项目,它都同样快。这里1是你的 * 结果集 *,100/100.000.000是你的 * 数据集 *。因此,请求100.000.000项中的1项将比请求100项中的50项更快。
我希望这能让它更清晰一点!

相关问题