首页 文章

mongodb架构设计集合与索引

提问于
浏览
2

我正在尝试使用mongodb / redis进行工作 . 我正在考虑这种情况,例如假设一个博客 .

我计划主要做以下查询:

  • 由特定用户列出帖子

  • 列出特定用户的评论

  • 根据特定类别列出帖子

  • 查看单个帖子及其评论

Note: Redis用于存储userid < - >用户名映射 .

这是一个好的/灵活的架构设计吗?未来的计划是增加帖子/评论评级 .

post _id author(db-ref:user._id; index)内容类别(索引)用户_id用户名(唯一索引)passwordhash注释_id post(db-ref:post._id; index)author(db-ref:author . _id;索引)

添加评分/投票

Post _id作者(db-ref:user._id; index)内容类别(索引)投票(编号)用户_id用户名(唯一索引)passwordhash注释_id post(db-ref:post._id; index)author(db- ref:author._id; index)vote(number)CommentVotes _id = author.Id(key)voteed:[comment._id,comment._id,...] PostVotes _id = author.Id(key)voteed:[post . _id,post._id]

你怎么看?或者我只是坚果?

2 回答

  • 1

    我觉得你还在考虑关系 . 我喜欢将文档数据对象视为带有链接(线程?)的俄罗斯娃娃,可以将一个玩偶链接到另一个玩偶 . 在你的情况下:

    • 用户娃娃

    • 用户名

    • 电子邮件

    • PasswordHash

    • PostUpvotes(帖子ID列表)

    • CommentUpvotes(评论ID列表)

    • 帖子娃娃

    • 评论娃娃(评论列表)

    • 评论

    • 用户ID

    • 用户名

    • TotalVotes(int)

    • 评论ID

    • TotalVotes(int)

    • 类别ID(列表)(肯定一个帖子可以有多个?)

    • 作者ID

    • 分类娃娃

    您可能希望将评论和帖子的投票放入用户对象,然后使用map / reduce每15分钟左右获取一次计数(这是对map / reduce的'规范'使用) . 关于upvotes的重要一点是用户不会做两次,所以将它们保存在User对象中更有意义(没有命中索引以查看用户是否已经在帖子上投票) . 由于每个Post的实际upvotes数量不是很重要,因此可以保留在Post中并定期更新 .

  • 2

相关问题