当我学习Symfony和Doctrine时,我正在尝试建模一个简单的实验性应用程序。
我的数据模型需要一些灵活性,因此我目前正在研究在MongoDB中使用EAV模型或文档存储的可能性。
这是我的基本要求:
典型的用户将登录并查看他们朋友列表中所有喜欢的内容,具体取决于他的朋友决定分享的内容。用户还将更新他们自己喜欢的内容,这将在其他用户查看他们自己的个人资料时反映出来。最后,用户可以改变他的哪些朋友可以看到他最喜欢的东西。
我和Magento一起工作很多,Magento广泛使用EAV模型。但是,我通过限制哪些用户可以看到哪些信息来增加另一层复杂性。
我立即被MongoDB吸引,因为无模式格式为我提供了所需的灵活性。但是,我不确定保存后访问数据会有多容易(或有效)。我还担心如何管理数据更改,例如用户改变自己喜欢的电影。
我希望有人可以指出我正确的方向。这纯粹是我正在构建的演示应用程序,以进一步增强我的知识,但我将其视为一个真实世界的应用程序,其中数据访问时间非常重要。
在传统的关系数据库中对这种类型的应用程序进行建模,当我想到为一个用户获取数据所需的疯狂连接数时,这让我很生气。
感谢您阅读此内容,如果我能提供更多信息,请与我们联系。
此致
鱼
答案 0 :(得分:1)
您需要根据访问数据的方式选择模型。
如果您只需要在查看用户配置文件时过滤掉一些值,则每个用户的单个文档都可以正常工作,其中每个收藏夹都包含应用程序代码中应用的授权用户/组ID列表。在这种情况下,读取和写入都是对已知文档的单个操作,因此速度很快。
如果您需要跨多个配置文件查看,您的主文档应该是最喜欢的。您需要设置正确的索引,但性能应该不是问题。
实际上,您描述的权限不会给EAV架构增加太多的复杂性 - 只要属性可以有多个值,权限列表只是一个属性。