作为一个习惯于用关系术语思考的人,我正试图掌握以“noSQL 方式”思考的问题。
假设以下场景:
我们有一个博客(例如 9gag.com),里面有很多帖子和注册用户。每个用户都可以喜欢每个帖子。我们想建立一个推荐引擎,所以我们需要跟踪:
- 用户查看的所有帖子
- 用户喜欢的所有帖子
帖子有:标题、正文、类别。用户拥有:用户名、密码、电子邮件、其他数据。
在关系数据库中,我们会有类似的东西:posts
, users
, posts_users_views (post_id, users_id, view_date)
, posts_users_likes (post_id, user_id, like_date)
.
问题
在面向文档/列的 noSQL 数据库中,“正确”的结构是什么?
澄清:我们是否应该在用户中保存所有查看/喜欢的帖子 ID 的数组(或帖子中的用户 ID)?如果是这样,我们不会遇到行大小变大的问题吗?