【发布时间】:2012-11-27 11:47:22
【问题描述】:
我有一个一般性的数据库结构问题。在我的场景中,我碰巧正在使用 mongodb。
我正在创建一个应用程序,用户可以在其中上传歌曲列表(标题、艺术家等),但我不确定我是否应该为所有用户创建一个 songList 集合,还是为每个用户创建一个单独的 songList.user# 集合个人用户。用户只能查询与他们关联的歌曲,因此用户 A 永远不会知道用户 B 的歌曲。
代码示例:
每个用户有多个收藏
db.songList.userA.find()
{"title": "Some song of user A", "artist": "Some artist of user A"}
db.songList.userB.find()
{"title": "Some song of user B", "artist": "Some artist of user B"}
- 优点
- 要查询的集合大小更小
- 缺点
- 可维护性
- 1000 个用户意味着 1000 个集合
- 可维护性
与拥有“用户”字段的单个集合相比
db.songList.find({"user":"A"})
{"title": "Some song of user A", "artist": "Some artist of user A", "user": "A"}
- 优点
- 如有需要,可灵活地跨用户查询
- 缺点
- 性能
我正在尝试建立一个赞成/反对名单,但仍然在围栏上。鉴于每个用户的歌曲将彼此隔离,哪种方法更好?我主要关心的是维护和查询性能。
提前致谢。
【问题讨论】:
-
与其担心这样的事情,不如构建something。您可能会通过构建它来找出最有效的方法,而不必担心细节。
-
同意@SomeKittens。也就是说,我会为每个用户做这件事,因为更容易犯错误并向 B 展示 A 的歌曲。无论如何,如果/当我有足够的用户时,我会担心优化。
-
安全方面,每个用户拥有一个集合可以使用 Mongodb 的集合级访问控制机制。这样,可以在数据库级别确保一个用户永远不会访问另一个用户的数据。
-
@Steven 我很想知道你选择了哪种设计,因为我现在也面临着类似的困境。