gpt4 book ai didi

firebase - 如何处理 Firebase 中的分层数据?

转载 作者:行者123 更新时间:2023-12-05 05:22:35 25 4
gpt4 key购买 nike

我正在使用 Firebase 构建一个应用程序,但在为我的应用程序所需的层次结构构建数据时遇到了问题。

概念

我的应用程序由组成。每个项目可以有 n - 许多 子项目。对于任何给定的项目,数据库中将有成千上万的项目。我想统计所有子项(即:直系子女、孙子女、曾孙子女等)。

当前结构示例

items: { 
1: {
name: 'neat item 1'
},
2: {
name: 'neat item 2',
parentId: 1
},
3: {
name: 'neat item 3',
parentId: 2
}
}

问题

在 Firebase 中,跟踪一个项目的子项数量的最佳方法是什么?所以在上面的例子中,item #1 总共有 2 个 child ,item #2 总共有 1 个 child 。

是否最好在每个项目上维护一个 childCount,并且每当添加一个新项目时,为所有父级增加该数字?或者在需要时递归地计算 child 数量会更好吗?

请记住,数据库中将有 500,000 多个项目,有些项目总共有 10,000 多个 child 。

非常感谢您的宝贵时间!

最佳答案

在 Firebase 中(与在大多数 NoSQL 数据库中一样),您应该根据应用程序使用数据的方式对数据进行建模(我强烈建议阅读 NoSQL data modeling 上的这篇文章以获得更多智慧)。

需要认识到的重要一点是,Firebase 总是加载整个节点,包括该节点下的所有数据。无法(在 SDK 中)加载所谓的浅层数据。

因此,如果您的应用始终显示整棵树,那么您绝对可以将数据建模为树。

但考虑到树的大小,您更有可能一次显示一个级别,然后允许用户单击以展开该级别。如果您将数据建模为层次结构,您最终会加载一个节点的所有子节点,即使用户从未展开该节点也是如此。那太浪费了。

更常见的是将层次结构存储为列表,这与您将其存储在关系数据库中的方式非常相似。然后,您将保留每个节点的子节点的单独列表。请注意,这是一个列表,而不是一棵树。

nodes
nodeKey1
name: "Node 1"
childrenCount: 2
nodeKey2
name: "Node 2"
childrenCount: 1
parentKey: "nodeKey1"
nodeKey3
name: "Node 3"
childrenCount: 0
parentKey: "nodeKey1"
nodeKey4
name: "Node 4"
childrenCount: 0
parentKey: "nodeKey2"
nodeChildren
nodeKey1
nodeKey2
nodeKey3
nodeKey2
nodeKey4

这允许高效读取/查询:

  • 顶级节点列表(ref.orderByChild('parentNode').equalTo(null))
  • 特定节点的元数据
  • 特定节点的父节点
  • 特定节点的子节点

如果您有更多用例,您可能需要扩展数据模型。

关于firebase - 如何处理 Firebase 中的分层数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40036647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com