Ruby on rails MongoDB:喜欢模特,共同的朋友等
我正在构建一个流媒体音乐服务,该服务将具有以下功能:Ruby on rails MongoDB:喜欢模特,共同的朋友等,ruby-on-rails,database-design,mongodb,mongoid,Ruby On Rails,Database Design,Mongodb,Mongoid,我正在构建一个流媒体音乐服务,该服务将具有以下功能: 跟踪用户 喜欢唱歌 创建和管理播放列表 ……等等 我使用的是Rails 3.1、Mongoid和MongoDB。我不确定应该如何为我的用户、播放列表和歌曲模型建模 播放列表和歌曲之间存在多对多关系。Mongoid将每首歌曲的ObjectId存储在每个播放列表的数组中。但是我需要为每个歌曲播放列表关系添加一些元数据,比如歌曲在特定播放列表中的位置 我也不确定如何找出一个用户与另一个用户的共同朋友和共同喜好。在用户文档中存储用户喜欢的内容和朋
- 跟踪用户
- 喜欢唱歌
- 创建和管理播放列表
- ……等等
这种东西更适合关系数据库吗?您首先应该问自己的问题是:为什么我要在这个应用程序中使用mongoDB 您的需求似乎非常适合关系数据库世界(=对象之间的复杂关系)。因此,也许有了关系数据库,你会更开心 你的问题有很多选择(当然每个选择都有权衡):
- 您可以将M2M关系存储在单独的集合中,并执行一些操作 客户端连接
- 您可以将歌曲嵌入播放列表,或将播放列表嵌入到 歌曲
- 您可以存储一些播放列表(最常用于 实例)并与另一个集合进行客户端连接 查找使用最少的播放列表
- 您还可以存储一些信息 关于您歌曲中的播放列表以及独立音乐中的其他内容 收藏李>
如果您只是在构建应用程序,请从一些非常简单的事情开始(即使需要更多请求,客户端连接也可能很容易),然后根据您的瓶颈开始改进您的模型。您首先应该问自己的问题是:为什么我要将mongoDB用于此应用程序 您的需求似乎非常适合关系数据库世界(=对象之间的复杂关系)。因此,也许有了关系数据库,你会更开心 你的问题有很多选择(当然每个选择都有权衡):
- 您可以将M2M关系存储在单独的集合中,并执行一些操作 客户端连接
- 您可以将歌曲嵌入播放列表,或将播放列表嵌入到 歌曲
- 您可以存储一些播放列表(最常用于 实例)并与另一个集合进行客户端连接 查找使用最少的播放列表
- 您还可以存储一些信息 关于您歌曲中的播放列表以及独立音乐中的其他内容 收藏李>
如果你只是在构建你的应用程序,那么从一些非常简单的事情开始(也许客户端连接很容易,即使它需要更多的请求),然后根据你的瓶颈开始改进你的模型。我知道这个问题很老,但这里有其他人可以阅读的答案是值得的 Mongo是为类似的概念而构建的。DocumentStore使添加此类功能变得非常容易,而无需放弃模型、数据或进行任何迁移 NoSQL dbs(mongo不是最快的)闪电般快速,因此您可以利用这一点,简化模型 我会创建名为歌曲、用户、喜好和播放列表的文档,然后在它们之间创建关联。您可以根据自己的情况更改逻辑,但如果假设播放列表在用户之间共享,但由一个用户拥有,则会创建以下关联(取决于mongo驱动程序,语法会有所不同,下面是mongomapper):
这将在对象之间创建关联。在用户对象下,您可以使用User.playlist查找该用户关联的播放列表,该用户将返回关联的播放列表对象的光标。与使用播放列表对象相同,您可以查看所有者或与用户共享的对象,以找到您想要的对象。我知道这个问题很老,但值得在这里找到其他人可以阅读的答案 Mongo是为类似的概念而构建的。DocumentStore使添加此类功能变得非常容易,而无需放弃模型、数据或进行任何迁移 NoSQL dbs(mongo不是最快的)闪电般快速,因此您可以利用这一点,简化模型 我会创建名为歌曲、用户、喜好和播放列表的文档,然后在它们之间创建关联。您可以根据自己的情况更改逻辑,但如果假设播放列表在用户之间共享,但由一个用户拥有,则会创建以下关联(取决于mongo驱动程序,语法会有所不同,下面是mongomapper):
这将在对象之间创建关联。在用户对象下,您可以使用User.playlist查找该用户关联的播放列表,该用户将返回关联的播放列表对象的光标。与使用播放列表对象相同,您可以查看所有者或与用户共享的对象,以找到您想要的对象。使用MongoDB我非常高兴。我可以将所有内容转换为关系数据库,但我的意思是,即使我使用两个查询(而不是一个查询)进行客户端连接,如果索引正确,速度会慢多少?我在寻找适合我的情况的最佳实践…:)它将慢2倍,我认为这将更多地取决于网络的延迟速度,而不是t
Playlists:
many :users, :as => :shared_with_users
one :users, :as => :owner
Users:
many Playlists