我有一個有趣的問題。我目前正在創建一個涉及大量共享數據的應用程序。我的意思是,在應用程序中,用戶可以創建一些組,在其中存儲重要數據,這些數據對其他組中的其他人也是可見的。我想要有效地存儲這些共享數據,但我不確定要使用哪種數據庫。一種是JSON樹格式,另一種是基於查詢的搜索?數據庫設計共享數據
如果有一個優點,我會欣賞一個例子。我已經熟悉Firebase。
我有一個有趣的問題。我目前正在創建一個涉及大量共享數據的應用程序。我的意思是,在應用程序中,用戶可以創建一些組,在其中存儲重要數據,這些數據對其他組中的其他人也是可見的。我想要有效地存儲這些共享數據,但我不確定要使用哪種數據庫。一種是JSON樹格式,另一種是基於查詢的搜索?數據庫設計共享數據
如果有一個優點,我會欣賞一個例子。我已經熟悉Firebase。
我認爲這一切都取決於應用程序的功能和需要訪問的數據類型,但考慮與用戶,組,對話和消息的簡單應用程序,我會親自對數據進行非規範化並使用數據庫結構是這樣的:
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會是您正在尋找的那個,因爲我認爲它使它非常快速並且使用方便。
使用基於查詢的搜索數據庫會有什麼好處 –
好極了!給我幾秒鐘我會更新我的答案:) – Alex
感謝我正在尋找 –