【问题标题】:Datamodel for chat in FirestoreFirestore 中聊天的数据模型
【发布时间】:2019-04-04 17:08:49
【问题描述】:

因此,我已阅读有关 Firestore 的所有官方文档,并且了解所有基础知识和大部分高级主题。但最后我想出了两个问题:

  • 与根级集合相比,使用子集合有什么优势吗?好吧,如果数据库在子集合中结构化,它可能会更有条理。但最后,就性能和可扩展性而言,根级集合似乎更胜一筹。官方文档中列出的所有优点也适用于根级集合,还是我误解了什么?

  • 让我们以著名的聊天为例,考虑很多聊天组(如 WhatsApp)。每当用户打开聊天时,用户都可以看到有关该聊天和该聊天成员的信息。但这是我的第二个问题出现的地方:不显示聊天成员是否意味着,每当有人打开聊天时,将加载另一个包含所述用户个人资料图像和名称的集合?如果您有一个包含 10 人的“WhatsApp”组,这意味着每当有人打开该组时,就有 11 次读取(组本身一个,成员的图像/名称为 10 个)。让我们扩展这个想法并让群组公开可用,这将导致疯狂的阅读量,只是为了查看群组的基本信息。由于 Firestore 对集合读取收费,这将很快爆发,不是吗?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    您最多可以深度链接 100 个子集合。根据有关usage and limits的官方文档。

    子集合的最大深度:100

    关于你的问题:

    与根级集合相比,使用子集合有什么优势吗?

    据我所知,Firestore 在级别 1 上查找节点的速度与在级别 100 上一样快。因此,对于常规数据库,深度不应该是影响技术级别速度的因素。恕我直言,最好将数据尽可能扁平化。

    关于您的第二个问题,您可以存储对象或仅存储引用,但在做出决定之前,我建议您了解一些细节,这些细节可以在我的回答中找到 post .

    【讨论】:

    • 感谢您的回答。如果我尝试尽可能平坦,那么子集合的最大深度无论如何都无关紧要,所以您认为根级集合更好?我可能想出的唯一缺点是它可能需要更多索引。关于第二个问题:这意味着这个用例可能会很昂贵,我可以选择是否希望它在性能或成本方面很昂贵?
    • 使用顶级集合时,可以更好地组织您的数据库。是的,我建议使用根级集合。即使您使用的是嵌套集合或顶级集合,Cloud Firestore 也会自动在文档的各个字段上创建索引。因此,您采用哪种方法并不重要。如果您需要跨多个字段的复杂索引,您可以在 Firebase 控制台中手动创建它们。关于你的第二个问题,是的,没错。
    • 我的意思是,在顶层我通常需要更多的索引。假设我想要每个组,一个用户都在。如果我使用顶级集合进行操作,我需要在我的“成员”根集合中索引 [userId,groupId]。如果我做一个“用户”的子集合,我最终会得到 reference.collection(“users”).document().collection(“memberships”)。在那种情况下,我不需要我在顶层拥有的复合索引。但正如我所说,这实际上是我能想到的唯一优势。
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2021-08-08
    • 2021-09-26
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多