簡體   English   中英

MongoDB:建模喜歡,共同的朋友等

[英]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?

您的需求似乎非常適合關系數據庫世界(=對象之間的復雜關系)。 因此,也許您會更喜歡關系數據庫。

您的問題有很多選擇(當然,每個選擇都需要權衡):

  • 您可以將M2M關系存儲在單獨的集合中,並進行一些客戶端聯合
  • 您可以將歌曲嵌入播放列表,也可以將播放列表嵌入歌曲
  • 您可以將一些播放列表(例如,使用最多的列表)存儲到歌曲中,並在客戶端與另一個集合一起存儲使用最少的播放列表
  • 您還可以將有關播放列表的一些信息存儲在歌曲中,其余信息存儲在獨立的收藏集中。
  • ...

您的選擇是無限的,您必須精確地選擇自己的需求才能做出不錯的選擇。

如果您只是在構建應用程序,則從非常簡單的操作開始(即使需要更多請求,客戶端連接也很容易),然后根據瓶頸所在來改進模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM