2016-07-30 45 views
0

如果我想找到可以回复的帖子,这是一个更好的结构?Firebase数据过多压扁了多少?

1)

posts 
    908239409234 
     postText: "Whats up peeps?" 
     replies: 
      09283049830294: true 
      a9s0dif09iasd9: true 

replies 
    09283049830294 
     text: "Nm breh" 
     imageURL: nil 
    a9s0dif09iasd9 
     text: "Nm breh" 
     imageURL: nil 

或2)

posts 
    908239409234 
     postText: "Whats up peeps?" 
     replies: 
     09283049830294 
      text: "Nm breh" 
      imageURL: nil 

     a9s0dif09iasd9 
      text: "Nm breh" 
       imageURL: nil 

我看到的数据库看起来像#1您存储到存储在别处支持扁平化的帖子引用这样的例子很多,但我没有看到任何优势,而不是只要选择2就可以完成?

如果用户正在加入帖子,他们将拥有帖子uid,并且他们可以使用autoID在“回复”下添加。

TL; DR,用更平坦的方法还是更合理的方法看起来效率更高,并且需要通过更少的信息搜索更好?有没有理由不去选择2?

回答

1

我会去没有。 2. 原因是没有。 1,你将不得不做一个查询来获得基于ID的回复数据。 随着Firebase,写入更多,阅读更少总是会更好。

+1

好吧,这就是我的想法。我刚刚看到很多人鼓励#1的例子,所以我不知道我是否高估了查询的内容,但是#2对我来说绝对更有意义。谢谢 –

0

这取决于您是否会在稍后的某些时候引用回复。如果您的回复仅与您的帖子相关,而且不再有更多内容,则选项2是最优的,因为您不需要获取回复。但是,如果您希望具有更复杂的功能来查询与某些用户相关的答复,则最好将每个答复的引用存储为选项1.这是根据我的应用程序的经验不断增长以及在某些点上,获取节点的速度太慢,因为它有太多的孩子,孙辈等等,我不得不压扁数据库以使其更快获取。我会建议仔细考虑你的应用程序的体系结构。

+0

我认为我主要担心选项1和2是数据使用情况。如果我在答复节点中存储了10,000条回复,如果您有特定的用户名,那么从该列表中检索特定的孩子是否激烈? 为了避免必须搜索潜在的数千篇帖子/回复,我重构了它,但如果这不是一个大问题,那么我绝对宁愿保持它尽可能平坦。 –

+0

与我的应用程序的我的解决方案是从我需要查询的答复中复制一些数据以及其参考,以便更快速地查询,但如果我需要查询更多详细信息,请将大部分数据保留在单独的节点中。我也推迟提取数据,或者只在用户聚焦或滚动到视图时才抓取数据。这取决于你的应用程序。这只是从我自己的网络应用程序的经验,它可能不适用于您的应用程序。 – adbitx