mongo中的归一化与非规范化数据

时间:2013-11-26 11:12:46

标签: mongodb database-design redis denormalized nosql

我对帖子有以下架构。每个帖子都有一个嵌入的作者和附件(一系列链接/视频/照片等)。

{
    "content": "Pixable tempts Everpix users with quick-import tool for photos ahead of December 15 closure http:\/\/t.co\/tbsSrVYneK by @psawers",
    "author": {
        "username": "TheNextWeb",
        "id": "10876852",
        "name": "The Next Web",
        "photo": "https:\/\/pbs.twimg.com\/profile_images\/378800000147133877\/895fa7d3daeed8d32b7c089d9b3e976e_bigger.png",
        "url": "https:\/\/twitter.com\/account\/redirect_by_id?id=10876852",
        "description": "",
        "serviceName": "twitter"
    },
    "attachments": [
      {
        "title": "Pixable tempts Everpix users with quick-import tool for photos ahead of December 15 closure",
        "description": "Pixable, the SingTel-owned company that organizes your social photos in smart ways, has announced a quick-import tool for Everpix users following the company's decision to close ...",
        "url": "http:\/\/t.co\/tbsSrVYneK",
        "type": "link",
        "photo": "http:\/\/cdn1.tnwcdn.com\/wp-content\/blogs.dir\/1\/files\/2013\/09\/camera1-.jpg"
      }
    ]
}

经常阅读帖子(我们有4个标签的视图,每个标签需要显示24个帖子)。目前我们正在Redis中索引这些列表,因此查询4x24posts就像从Redis获取列表(返回mongo id列表)和使用id查询帖子一样简单。

嵌入式作者的更新很少发生(例如,当作者更改其图片时)。更新不必是即时的甚至是快速的。

我们想知道是否应该将作者和帖子分成两个不同的集合。所以帖子会引用其作者,而不是嵌入/重复的作者。这里是一个标准化数据状态首选(作者是否为每个帖子重复,导致大量重复数据/额外字节)?或者我们应该继续进行非标准化状态吗?

1 个答案:

答案 0 :(得分:1)

由于您的读取数量似乎比写入数量多,因此将这些数据拆分为两个集合可能没什么意义。特别是几乎没有更新,并且您在显示帖子时需要几乎所有作者信息,一个查询将比两个更快。您还可以获得数据位置,因此您可能需要更少的内存数据,这应该提供另一个好处。

但是,您只能通过使用您在生产中使用的数据量进行基准测试来找到答案。