为我的社交设计MongoDb架构

时间:2013-01-28 11:12:11

标签: mongodb database-design nosql

我是MongoDB的新手,我只是想创建一个简单的项目来测试MongoDB的性能 该项目就像一个简单的CMS 它有用户,博客和评论,用户可以有朋友

所以我设计了我的数据库

user
{
     _ID:
    name:
    birth_day:
    sex:

    friends:[id_1,Id_2]
}
blogs
{
    title:
    owner: 
    tags_fiends:
    comments:
    [
        {"_id":"","content":"","date_created":""},
        {"_id":"","content":"","date_created":""},
    ],
    "like"={"_id","_id"}
}

此数据库需要多少个集合。我可以为用户和博客使用1个收藏。提前谢谢。

2 个答案:

答案 0 :(得分:1)

由于mongoDB是架构较少或架构无DB您可以在文档中创建任何类型的结构,这是受支持的:

  • 个别元素
  • 嵌套数组
  • 嵌套文件

在架构设计过程中,您必须考虑几件事情,因为将用户和博客置于分离的架构中非常有用。例如,如果在嵌套数组中存储某些内容,则可以指定用于在此数组中紧固搜索的索引,但是在一个特定集合中只能有一个multykéy索引(索引数组内容)。因此,如果你在数组中存储,朋友和博客,帖子和标签,你只能在其中一个上有索引。

同样重要的是要知道在这种情况下每个文档的大小限制现在是16MB。

答案 1 :(得分:0)

在您的场景中,我会将用户设为一个集合,并通过博客集合中的_id引用它。

在实践中,您可以将博客作为用户的属性,唯一的限制是最大文档大小为16MB - 但这是很多博客(文本)。

为了解决这个问题(假设您需要),引用用户_id的单独博客集合就可以了。如果不是你的_id,你可能还需要对用户名进行非规范化。这意味着您可以在单个查询中获取用户的所有博客。