2017-09-16 122 views
0

我有一個有趣的問題。我目前正在創建一個涉及大量共享數據的應用程序。我的意思是,在應用程序中,用戶可以創建一些組,在其中存儲重要數據,這些數據對其他組中的其他人也是可見的。我想要有效地存儲這些共享數據,但我不確定要使用哪種數據庫。一種是JSON樹格式,另一種是基於查詢的搜索?數據庫設計共享數據

如果有一個優點,我會欣賞一個例子。我已經熟悉Firebase。

回答

2

我認爲這一切都取決於應用程序的功能和需要訪問的數據類型,但考慮與用戶,組,對話和消息的簡單應用程序,我會親自對數據進行非規範化並使用數據庫結構是這樣的:

root/ 
|___ users/ 
|      |___ userID1 
|              |___ name : user_name 
|              |___ email : user_email 
|              |___ picUrl : user_picture_url 
|              |___ conversations 
|                       |___ userConversationID1 : true                    
|      |___ userConversationID2 : true 
|                       ... 
|              |___ groups 
|                       |___ groupID1 : true                    
|      |___ groupID2 : true 
|                       ... 
|              |___ notificationTokens 
|                       |___ token1 : true                       
|      |___ token2 : true 
|                       ... 
| 
|___ groups/ 
|      |___ groupID1 
|              |___ name : group_name 
|              |___ thumbnailUrl : group_thumbnail_url 
|              |___ conversations 
|                       |___ groupConversationID1 : true                    
|      |___ groupConversationID2 : true 
|                       ... 
|              |___ members 
|                       |___ groupMemberID1 : true                    
|      |___ groupMemberID2 : true 
|                       ... 
| 
|___ conversations/ 
|      |___ conversationID1 
|              |___ messageID1 : true 
|              |___ messageID2 : true 
|             |___ messageID3 : true 
|             |___ messageID4 : true 
|            ... 
|      ... 
| 
|___ messages/ 
|      |___ messageID1 
|              |___ text : message_text 
|              |___ sender : message_sender 
|              |___ receiver : message_receiver 
|              |___ timestamp : message_timestamp 
|      ... 
| 
|___ notifications/ 
|      ... 
|  ... 
| 

雖然這種結構的確是複製一些數據,我相信,這使你更容易尋找特定於用戶或特定組的數據。

例如,如果你想獲得該組簡單的所有成員的名單

Database.database().reference().child("group").child(groupId).child("members").observeSingleEvent(of: .value, with: { (snapshot) in 
    // ... 
}) 

就足夠了,而不是一個嵌套結構,它最終可能會成爲難以獲取數據您正在尋找。

如果您想讓我知道您打算在您的應用中使用哪種功能,並且我可以更具體一些。我很樂意幫助你啦:)

UPDATE:

至於哪個數據庫,你應該選擇(關係型數據庫VS火力地堡),我會說,它直接關係到你的應用程序的功能。例如,如果您需要對許多數據進行排序和過濾(按年齡,國家和性別過濾用戶),那麼您最好去一個SQL數據庫,因爲您可以輕鬆地只篩選您正在查找的用戶對於。雖然並非不可能,但使用Firebase進行更多時間(和數據)消耗。

現在,如果您構建了一個實時聊天的例子,並且您的應用程序不需要太複雜的數據庫結構,那麼顯然Firebase會是您正在尋找的那個,因爲我認爲它使它非常快速並且使用方便。

+0

使用基於查詢的搜索數據庫會有什麼好處 –

+0

好極了!給我幾秒鐘我會更新我的答案:) – Alex

+0

感謝我正在尋找 –