【发布时间】:2023-03-16 20:19:02
【问题描述】:
随着集合组查询的出现,我不清楚使用根集合有什么好处。在 Firestore 团队的this article 中,我唯一能看到的是存在名称冲突的可能性,安全规则稍微复杂一些,并且您必须手动创建任何查询索引。还有其他理由使用根集合而不是子集合/集合组查询吗?
【问题讨论】:
标签: firebase google-cloud-firestore
随着集合组查询的出现,我不清楚使用根集合有什么好处。在 Firestore 团队的this article 中,我唯一能看到的是存在名称冲突的可能性,安全规则稍微复杂一些,并且您必须手动创建任何查询索引。还有其他理由使用根集合而不是子集合/集合组查询吗?
【问题讨论】:
标签: firebase google-cloud-firestore
在决定使用哪个更好时,顶级集合还是子集合,请注意两者在速度或计费方面都不比另一个更好。但是,有一些细微的差别可以让您选择使用顶级集合而不是子集合。因此,唯一的区别可能来自我们构建数据库的方式,而不是性能。这是因为 Firestore 与 1 级时一样快,在 100 级时也是如此。
假设我们使用子集合具有以下结构:
Firestore-root
|
--- shops (collection)
|
--- $shopId (document)
|
--- products (sub-collection)
|
--- productId (document)
这个架构也可以设计成:
Firestore-root
|
--- shops (collection)
| |
| --- $shopId (document)
|
--- products (collection)
|
--- $productId (document)
|
--- shopId: $shopId
对于 NoSQL 数据库,推荐的做法是将数据库扁平化。为什么?因为它看起来更有条理,而且每个顶级集合仅包含与集合本身相关联的文档。
说到子集合,当我们看上面的例子时,每个产品都与“products”子集合、$shopId 和“shops”集合相关联。
关于安全规则,复杂性与您需要使用的过滤器的数量和多样性有关。但是,对于顶级集合,它会更容易一些。
最后,请记住,当我们谈论架构时,我们总是根据我们打算执行的查询来构建 Firestore 数据库。因此,您可以在这两个选项之间做出选择,看看其中哪一个可以让您的生活更轻松。
编辑:
还有关于结构 Firestore 数据的 docs state:
根级集合适用于多对多关系,并在每个集合内提供强大的查询。
【讨论】:
这完全取决于您的应用程序结构,也取决于您在子集合中查询或查询整个集合或使用private/public fields 构造数据以授予特定用户访问权限的频率。然而,这两种方法都有自己的权衡,例如每个文档每秒写入 1 次或文档大小为 1mb 等。我的建议是首先考虑您的查询并设计您的数据库以最好地处理您需要执行的查询。我建议在Data structure 和Data model 上查看以下文档。如果您想了解更多关于安全的信息,我建议您查看documentation on security.
【讨论】: