我正在构建一个具有以下功能的流媒体音乐服务:
我正在使用Rails 3.1,Mongoid和MongoDB。我不确定如何为用户,播放列表和歌曲模型建模。
播放列表与歌曲之间存在多种关系。 Mongoid将每首歌曲的ObjectId存储在每个播放列表的数组中。但我需要为每首歌添加一些元数据< - >播放列表关系,就像特定播放列表中歌曲的位置一样。
我也不确定如何做一些事情,比如找出用户与另一个用户共同的朋友和共同点。在用户文档中存储用户喜欢和朋友真的是个好主意吗?一个用户可能有几千个喜欢和超过一千个朋友等。
这种东西更适合关系数据库吗?
答案 0 :(得分:1)
我知道这个问题已经过时了,但值得在这里得到其他人可以阅读的答案。
Mongo是为喜欢的概念而构建的。文档存储很容易添加这样的功能,而不必丢弃您的模型,数据或进行任何迁移。
NoSQL dbs(和mongo不是最快的)快速闪电,因此您可以利用这一点并使您的模型变得简单。
我会创建名为Songs,Users,Likes&amp; Sons的文档。播放列表,然后在它们之间创建关联。您可以更改逻辑以适合您的情况,但如果您假设某个播放列表在用户之间共享但由一个用户拥有,您将创建以下关联(取决于mongo驱动程序,语法将有所不同,下面是mongomapper):< / p>
Playlists:
many :users, :as => :shared_with_users
one :users, :as => :owner
Users:
many Playlists
这将创建对象之间的关联。在您的User对象下,您将能够使用user.playlist找到该用户关联的播放列表,user.playlist将返回相关联的播放列表对象的光标。就像使用播放列表对象一样,您可以查看所有者或shared_with_users以找到您想要的对象。
答案 1 :(得分:0)
首先,您应该问自己的问题是:为什么我要将mongoDB用于此应用程序?
您的需求似乎非常适合关系数据库世界(=对象之间的复杂关系)。所以也许你会对关系数据库感到满意。
您的问题有很多选择(当然每个选项都需要权衡):
您的选择非常无限,您必须精确地满足您的需求才能做出正确的选择。
如果您只是构建应用程序,那么从非常简单的开始(即使需要更多请求,客户端关节也很容易),然后根据您的瓶颈开始改进模型。