2

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

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

  1. 列出特定用户的帖子
  2. 列出特定用户的评论
  3. 根据特定类别列出帖子
  4. 查看单个帖子及其评论

注意: Redis 用于存储 userid<->username 映射。

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

邮政

  • _ID
  • 作者 (db-ref: user._id; index )
  • 内容
  • 类别(索引

用户

  • _ID
  • 用户名(唯一索引
  • 密码哈希

评论

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

添加评分/投票

邮政

  • _ID
  • 作者 (db-ref: user._id; index )
  • 内容
  • 类别(索引
  • 票数(数)

用户

  • _ID
  • 用户名(唯一索引
  • 密码哈希

评论

  • _ID
  • 发布(db-ref:post._id;索引
  • 作者 (db-ref: author._id; index )
  • 票数(数)

评论投票

  • _id = author.Id (关键)
  • 投票:[comment._id,comment._id,...]

投票后

  • _id = author.Id (关键)
  • 投票:[post._id,post._id]

你怎么看?还是我只是疯了?

4

2 回答 2

2

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

  • 用户娃娃
    • 用户名
    • 电子邮件
    • 密码哈希
    • PostUpvotes(帖子 ID 列表)
    • CommentUpvotes(评论 ID 列表)
  • 帖子娃娃
    • 评论娃娃(评论列表)
      • 评论
        • 用户身份
        • 用户名
        • 总票数(整数)
        • 评论编号
    • 总票数(整数)
    • 类别 ID(列表)(肯定一个帖子可以有多个?)
    • 作者编号
  • 类别 娃娃

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

于 2012-08-02T16:16:05.703 回答
1

有关解决这些问题的几个示例模式设计,请参阅

于 2012-08-02T16:28:54.507 回答