2017-04-07 89 views
-1

比方說,我有以下結構,我想運行一個查詢來顯示照片/他們的作者照片和名稱列表。結構和查詢的最佳方式是什麼?Firebase高效構建數據?

一方面我不喜歡在每張照片下重複數據(user.name和user.photoUrl)。另一方面,我認爲在照片查詢中包含完整用戶還是沒有乾淨的方法,或者根據id列表(基本上是IN語句)獲取用戶列表?

users 
    user1 
     name: "A" 
     photoUrl: "LINK" 
    user2 
     name: "B" 
     photoUrl: "LINK" 

photos 
    photo1 
     author: user1 
     photoUrl: "Link" 
     likesCount: 120 

回答

0

NoSQL系統中的數據重複非常常見 - 磁盤空間很便宜。但是,如果處理不當,可能會使事情變得複雜,並且「將您編碼到一個角落」:更新數據集需要對數據庫進行多次更新。

的解決方案有幾個選項是

1) Duplicate Data 
2) Nest queries 
3) Simplify 

1)重複數據:這是相當明顯的,在你的問題中提到,添加用戶信息,以每張照片。不要回避這個解決方案,因爲它往往是順其自然的方式。

2)嵌套查詢:非常簡單:將所有照片節點加載到數組中,然後迭代數組並加載每個作者。這也很常見,但您必須考慮到Firebase的異步特性,並確保在功能關閉完成之前您不會處理數據。

3)簡化你的結構:從你的例子看來,你有一對多的關係。

每個作者/用戶都有多張照片,所以保存簡單,將照片數據存儲在作者身上。

user_0 
    name: "A" 
    photos 
    photo_0 
     url: "asdasd" 
     likes: 123 
    photo_1 
     url: "fghfhf" 
     likes: 42 
user_1 
    name: "B" 
    photos 
    photo_0 
     url: "qqqqqq" 
     likes: 12 
    photo_1 
     url: "wwww" 
     likes: 16 

我所有關於Denormalizing data - 越平坦越好。然而,這一切都取決於用例,所以它不是一個要求,在這種情況下,根據問題中的數據,簡化可能是最好的解決方案。