Firebase 性能:每个节点有多少个子节点?
Posted
技术标签:
【中文标题】Firebase 性能:每个节点有多少个子节点?【英文标题】:Firebase Performance: How many children per node? 【发布时间】:2016-09-26 21:37:57 【问题描述】:如果一个节点有 1 亿个子节点,如果我:
a) 查询,但限制为 10 个结果
b) 只看其中一个孩子
我可以将数据分成多个父母,但在我的情况下,我将引用孩子,因此可以直接查找它(这降低了复杂性)。如果有影响,在性能下降之前每个场景的最大数量是多少?
【问题讨论】:
你应该阅读这个firebase.google.com/docs/database/web/structure-data 还有firebase.google.com/docs/database/web/retrieve-data 我遇到了类似的问题(在 RecyclerView 中显示一个大列表),请参见此处:***.com/questions/36401332/… 您可以在此处找到我的解决方案:***.com/a/37772597/6155664 【参考方案1】:如果一个节点有这么多子节点,那么以任何方式访问该节点都会引发问题。访问单个孩子绝不是问题。
查询节点以获取其子节点的子集仍需要数据库考虑每个子节点。如果您请求 1 亿个项目中的最后 10 个,那么您是在要求数据库考虑您显然不感兴趣的 999,999,990 个项目。
如果不对数据大小、排序标准等进行更具体的描述,就不可能说出最大值是多少。但老实说,即使那样,您可能得到的最好值也是一个具有巨大差异的值这可能会随着时间而改变。
在 Firebase(以及大多数 NoSQL 解决方案)中,您最好的方法是以适合您的应用使用数据的方式对数据进行建模。例如:如果您需要向用户显示最新的 10 项,请将最近 10 项的(键)存储在单独的列表中。
items
-K........0
title: "Firebase Performance: How many children per node?"
body: "If a node has 100 million children, will there be a performance impact if I:..."
-K........1
title: "Firebase 3x method won't working in real device but worked in simulator swift 3.0"
body: "Hi we are working with google firebase 3x version and we faced..."
.
.
.
-K999999998
-K999999999
recent
-K999999990: true
-K999999991: true
-K999999992: true
-K999999993: true
-K999999994: true
-K999999995: true
-K999999996: true
-K999999997: true
-K999999998: true
-K999999999: true
我不确定我的数字是否正确,但我希望你能明白。
【讨论】:
而“只看一个孩子”就像ref.child( childId ).on('value', ...)
一样简单
谢谢!如果您通过特定的索引字段进行查询,我希望能够实现 O(log(N))。这是你得到的那种表现吗? (对于 1 亿个数据集,这需要大约 26 次尝试)
在上面的示例中,即使我没有直接读取 items
节点,items
的增长列表是否也是一个问题?你会实施某种归档机制吗?像items/june2017
,items/aug2017
,....等?或者在没有积极使用之后将这些项目一起移动到一个新节点。
确实:将您的活动数据与历史数据分开。如果您主要保留用于报告的历史数据,请考虑将其存储在更适合对大型数据集进行临时查询的系统中,例如BigQuery。以上是关于Firebase 性能:每个节点有多少个子节点?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 数据库从子节点 B 中指定的子节点 A 检索对象