【问题标题】:Normalized vs denormalized data in mongomongo中的规范化与非规范化数据
【发布时间】:2013-12-11 12:04:59
【问题描述】:

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

{
    "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 查询帖子一样简单。

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

我们想知道是否应该将作者和帖子分成两个不同的集合。因此,帖子将引用其作者,而不是嵌入/重复的作者。这里是否首选规范化数据状态(每个帖子都重复作者,导致大量重复数据/额外字节)?还是我们应该继续去规范化状态?

【问题讨论】:

    标签: mongodb database-design redis denormalized nosql


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2018-06-06
      • 2016-07-23
      • 2016-05-27
      • 2018-02-07
      • 2012-12-31
      • 2013-01-18
      • 2017-01-14
      • 2013-08-21
      相关资源
      最近更新 更多