mongodb架构设计集合与索引

时间:2012-08-02 16:02:39

标签: mongodb

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

我计划进行以下查询,主要是:

  1. 由特定用户列出帖子
  2. 列出特定用户的评论
  3. 根据特定类别列出帖子
  4. 查看单个帖子及其评论
  5. 注意: Redis用于存储用户ID< - >用户名映射。

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

      

    发表

         
        
    • _id
    •   
    • 作者(db-ref:user._id; 索引
    •   
    • 含量
    •   
    • 类别(索引
    •   
         

    用户

         
        
    • _id
    •   
    • 用户名(唯一索引
    •   
    • passwordhash
    •   
         

    评论

         
        
    • _id
    •   
    • post(db-ref:post._id; index
    •   
    • 作者(db-ref:author._id; 索引
    •   

    添加评分/投票

      

    发表

         
        
    • _id
    •   
    • 作者(db-ref:user._id; 索引
    •   
    • 含量
    •   
    • 类别(索引
    •   
    • 投票(编号)
    •   
         

    用户

         
        
    • _id
    •   
    • 用户名(唯一索引
    •   
    • passwordhash
    •   
         

    评论

         
        
    • _id
    •   
    • post(db-ref:post._id; index
    •   
    • 作者(db-ref:author._id; 索引
    •   
    • 投票(编号)
    •   
         

    CommentVotes

         
        
    • _id = author.Id( key
    •   
    • 投票:[comment._id,comment._id,...]
    •   
         

    PostVotes

         
        
    • _id = author.Id( key
    •   
    • 投票:[post._id,post._id]
    •   
    你怎么看?或者我只是坚果?

2 个答案:

答案 0 :(得分:2)

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

  • 用户娃娃
    • 用户名
    • 电子邮件
    • PasswordHash
    • PostUpvotes(帖子ID列表)
    • CommentUpvotes(评论ID列表)
  • 帖子娃娃
    • 评论娃娃(评论列表)
      • 注释
        • 用户ID
        • 用户名
        • TotalVotes(int)
        • 评论ID
    • TotalVotes(int)
    • 类别ID(列表)(当然帖子可以有多个?)
    • 作者ID
  • 分类玩偶

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

答案 1 :(得分:1)