新的 Firebase Firestore DocumentDb 如何为大型子集合建模

How does the new Firebase Firestore DocumentDb model large subcollections

在 firebase 实时数据库中,您通常会将大型子集合移出到它自己的单独集合中。例如,如果用户可能有大量关注者,数据模型可能会在用户对象中保留关注数组,但将关注者移出到单独的集合中。

用户

关注者

您是否必须使用新的 Cloud Firestore 进行相同类型的建模,或者您是否可以在查询中使用投影,这样您就不会在每次扫描时都返回大型子集合。听起来子集合存储在它们自己的完整集合中,所以这可能会更有效地存储子集合?

我认为您根本不必这样做,因为获得 Document 不会 从子集合中下载其他内容。也就是说,它并没有像 Realtime Database.

那样的劣势

我无法在短时间内找到提及它的其他来源,因此请查看 this video. It is the "Getting Started" video for Android and about 40 seconds in (from the time stamp provided in my link) he mentions exactly what I said and Todd Kerpelman 的声明:"[...] 这很常见包含一堆文档的集合,然后指向包含其他文档等的子集合。,基本上意味着团队期望这种类型的数据存储。

Firestore 允许任一结构。对于大多数操作,一旦将网络延迟混入其中,两者都不会比另一个更有效。

与实时数据库不同,默认情况下,Firestore 中的查询很浅,因此如果您在用户中嵌套关注者,则查询用户不需要加载他们的所有关注者。这意味着您没有单独存储关注者。

在子集合结构中,您还可以使用 collection group queries 查询具有相同 ID 的所有子集合。