Firebase嵌套数据可维护性与使用查询性能的过滤器?

Firebase嵌套数据可维护性与使用查询性能的过滤器?,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,阅读了大量有关Firebase和结构化数据的内容,有一个问题尚不清楚,即通过使用键嵌套或使用子键值查询来结构化数据的最佳方法。所以我想知道权衡在哪里,什么时候你可以考虑另一个? 举个例子,假设你有属于某个用户的“板”和“注释”。一张便笺只能属于一块电路板,您是否将便笺嵌套在电路板唯一键下(选项A): 或者是否使用子值作为关联/查询每个板的注释的方式(选项B): 第二种选择似乎更可取 但我的问题是,如果每个电路板可以有数千条注释,那么在带宽成本/性能方面,对于检索/订阅/编辑/删除之类的事情来说,

阅读了大量有关Firebase和结构化数据的内容,有一个问题尚不清楚,即通过使用键嵌套或使用子键值查询来结构化数据的最佳方法。所以我想知道权衡在哪里,什么时候你可以考虑另一个?

举个例子,假设你有属于某个用户的“板”和“注释”。一张便笺只能属于一块电路板,您是否将便笺嵌套在电路板唯一键下(选项A):

或者是否使用子值作为关联/查询每个板的注释的方式(选项B):

第二种选择似乎更可取

但我的问题是,如果每个电路板可以有数千条注释,那么在带宽成本/性能方面,对于检索/订阅/编辑/删除之类的事情来说,这会更好——也就是说,如果您想更新或删除一个电路板的所有注释,那么在处理更具体的数据树(注释)时,选项a似乎会更好/[唯一的boardKey]/)而不是查询所有游戏的子密钥

我主要关心的是这两种不同方法的可维护性和性能


感谢您的任何想法。

作为旁注,虽然电路板和笔记是一对多的关系,但我没有在电路板下嵌套笔记,因为在这种情况下,我只想检索有关电路板的数据-在电路板下嵌套笔记将扩展树并增加带宽/影响性能-我认为。这是一个难以置信的broad主题(虽然非常有趣)不适合于堆栈溢出的简单Q&A格式。简短的回答是,最佳结构取决于您的所有用例,这是我们无法知道的(目前您可能也不知道)因此,设计一个起始模型,看看哪里不起作用,然后具体询问如何解决。好的文档开始:并且。感谢@Frankvanpoffelen,我在写问题时意识到它有点开放,“这取决于”很可能是答案。我会更新得更具体一点,因为我的问题是,在带宽和性能方面,使用查询查找/更新/删除数据是否比嵌套数据更昂贵?
notes : {
    [unique userKey] : {
        [unique boardKey] : {
            [unique noteKey] : {
                ...
            },
            [unique noteKey] : {
                ...
            }
        }
    }
},
boards : {
    [unique userKey] : {
        [unique boardKey] : {
            ...
        }
    }
}
notes : {
    [unique userKey] : {
        [unique noteKey] : {
            ...
            boardKey: [unique boardKey]
        },
        [unique noteKey] : {
            ...
            boardKey: [unique boardKey]
        }
    }
},
board : {
    [unique userKey] : {
        [unique boardKey] : {
            ...
        }
    }
}