[英]MongoDB: Modeling likes, mutual friends etc
我正在構建一種流音樂服務,該服務具有以下功能:
我正在使用Rails 3.1,Mongoid和MongoDB。 我不確定如何建模用戶,播放列表和歌曲模型。
播放列表和歌曲之間存在多對多關系。 Mongoid將每個歌曲的ObjectId存儲在每個播放列表的數組中。 但是我需要為每首歌曲<->播放列表關系添加一些元數據,例如歌曲在特定播放列表中的位置。
我也不確定如何進行操作,例如找出某個用戶與另一個用戶有哪些共同的朋友和共同點。 在用戶文檔中存儲用戶的喜歡和朋友真的是一個好主意嗎? 用戶可能有數千個喜歡和一千多個朋友等。
這種東西更適合關系數據庫嗎?
我知道這個問題很舊,但是值得在這里得到其他人可以閱讀的答案。
Mongo是為喜歡之類的概念而構建的。 文檔存儲使添加這樣的功能變得非常容易,而無需刪除模型,數據或進行任何遷移。
NoSQL數據庫(而且mongo並不是最快的)迅速減輕了負擔,因此您可以利用它並使模型簡單。
我將創建名為“歌曲,用戶,喜歡和播放列表”的文檔,然后在它們之間創建關聯。 您可以更改邏輯以適合您的情況,但是如果您假設一個播放列表在用戶之間共享但由一個用戶擁有,則您將創建以下關聯(取決於mongo驅動程序,語法會有所不同,以下是mongomapper):
Playlists:
many :users, :as => :shared_with_users
one :users, :as => :owner
Users:
many Playlists
這將在對象之間創建關聯。 在您的用戶對象下,您將能夠使用user.playlist查找該用戶關聯的播放列表,這將返回關聯的播放列表對象的光標。 與使用播放列表對象一樣,您可以查看所有者或shared_with_users來查找所需的對象。
首先,您應該問自己的問題是:為什么要為此應用程序使用mongoDB?
您的需求似乎非常適合關系數據庫世界(=對象之間的復雜關系)。 因此,也許您會更喜歡關系數據庫。
您的問題有很多選擇(當然,每個選擇都需要權衡):
您的選擇是無限的,您必須精確地選擇自己的需求才能做出不錯的選擇。
如果您只是在構建應用程序,則從非常簡單的操作開始(即使需要更多請求,客戶端連接也很容易),然后根據瓶頸所在來改進模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.