了解 Firestore 查询

Posted

技术标签:

【中文标题】了解 Firestore 查询【英文标题】:Understanding Firestore queries 【发布时间】:2020-07-20 09:33:16 【问题描述】:

我一直在挑选一些 Firestore。有几个关于谨慎使用读写的问题。

对于名为 places 的集合中有 1000 条记录的示例:db.collection("places")

我想了解代码本身的时间/查询复杂度

let doc_ID = `key`
db.collection("places").doc(doc_ID).get();

相比

let doc_ID = `key`
db.collection("places").where("key_to_find", "==", doc_ID).get();

它是否遍历 1000 条记录来查找密钥?在第一种情况下,我不太确定。但是,如果我的收藏有 1,000,000 条记录,肯定应该有更好的方法吗?当我开始在大型集合中进行查询时,时间复杂度会不会很大?

如果这是一个初学者问题,我深表歉意。想知道这两个示例之间是否存在差异,以及是否更快或更有效。还将感谢有关 Firestore 中最佳查询技术的文章和资源的任何指导。

提前非常感谢!

编辑:另一个问题是查询与 READ 数量之间的关系,因为我们在 Firestore 中为每天的读取付费。

【问题讨论】:

【参考方案1】:

Firestore 使用分布式索引根据您在查询中提供的过滤器来查找集合中的文档。这个索引没有什么慢的,集合的大小在性能方面根本不重要。 Firestore 可大规模扩展。 1000 个文档的每个查询与 1000 个文档的每个其他查询执行相同。在这方面,我们说 Firestore 查询随结果集的大小而不是集合的大小而扩展。

一开始可能很难相信,但这就是它的设计方式,以及您期望它的性能。 Firestore 根本不会执行由其索引提供支持的以这种方式扩展的查询。它会告诉您不支持该查询的原因,或者它会为您提供一个链接以创建一个索引,以大规模地为查询提供服务。

【讨论】:

太棒了,这真的很有趣!我也想知道读取次数,因为我们是根据读取次数付费的。您知道在为 Firestore 编写代码时这是否可以计算/考虑吗? 您需要为从查询中获得的每份文档支付一次阅读费用。我不确定你还需要知道什么。 Firebase 控制台会向您显示一段时间内的累积读取数。 对,我的误会。我认为由于对查询的搜索被计为“阅读”

以上是关于了解 Firestore 查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Firestore 中自动创建集合

如何从firestore的路径中获取布尔值

如何为 Firestore 创建大量示例数据?

Cloud Firestore 事务的限制

如何在 Firestore 中一次创建/更新多个文档

解析器无法使用 Angular Firestore 解析