2016-07-30 49 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