MongoDB基于权限的建模问题

时间:2011-07-30 00:13:17

标签: mongodb database-design database nosql

当我学习Symfony和Doctrine时,我正在尝试建模一个简单的实验性应用程序。

我的数据模型需要一些灵活性,因此我目前正在研究在MongoDB中使用EAV模型或文档存储的可能性。

这是我的基本要求:

  • 用户将能够存储和分享他们喜欢的东西(电视节目,网站,歌曲等)。
  • 用户可以存储的可能“事物”列表未知。例如,用户可能想要存储他们喜欢的动物。
  • 用户可以与其他用户分享自己喜欢的内容。但是,用户可以决定他/她与其他用户共享的内容。例如,用户可以与一个用户共享他们喜欢的电影,而不是另一个用户。

典型的用户将登录并查看他们朋友列表中所有喜欢的内容,具体取决于他的朋友决定分享的内容。用户还将更新他们自己喜欢的内容,这将在其他用户查看他们自己的个人资料时反映出来。最后,用户可以改变他的哪些朋友可以看到他最喜欢的东西。

我和Magento一起工作很多,Magento广泛使用EAV模型。但是,我通过限制哪些用户可以看到哪些信息来增加另一层复杂性。

我立即被MongoDB吸引,因为无模式格式为我提供了所需的灵活性。但是,我不确定保存后访问数据会有多容易(或有效)。我还担心如何管理数据更改,例如用户改变自己喜欢的电影。

我希望有人可以指出我正确的方向。这纯粹是我正在构建的演示应用程序,以进一步增强我的知识,但我将其视为一个真实世界的应用程序,其中数据访问时间非常重要。

在传统的关系数据库中对这种类型的应用程序进行建模,当我想到为一个用户获取数据所需的疯狂连接数时,这让我很生气。

感谢您阅读此内容,如果我能提供更多信息,请与我们联系。

此致

1 个答案:

答案 0 :(得分:1)

您需要根据访问数据的方式选择模型。

如果您只需要在查看用户配置文件时过滤掉一些值,则每个用户的单个文档都可以正常工作,其中每个收藏夹都包含应用程序代码中应用的授权用户/组ID列表。在这种情况下,读取和写入都是对已知文档的单个操作,因此速度很快。

如果您需要跨多个配置文件查看,您的主文档应该是最喜欢的。您需要设置正确的索引,但性能应该不是问题。

实际上,您描述的权限不会给EAV架构增加太多的复杂性 - 只要属性可以有多个值,权限列表只是一个属性。