MongoDB - 有多少数据是太多的数据?

时间:2013-07-22 12:14:15

标签: mongodb database-design database

我正在构建一个使用MongoDB作为数据库的应用程序。我有很多产品,我想将用户查看的产品记录到用户的数据库条目中。例如,用户配置文件如下所示:

{
    "email" : "foo@bar.com",
    "name" : "John Snow",
    "_id" : ObjectId("51ecbcc6896652a008000001"),
    "productsViewed" : [
            product1,
            product2,
            product3,
            product4
    ]
}

我有两个选择。我只能记录每个产品的_id,或者我可以记录代表产品的整个对象(名称,价格,~100个单词描述,类别,那种东西)。对象大小的差异是每个产品1行文本与每个产品大约30行。

我意识到这可能需要关注一些微不足道的数据,但如果用户有10,000 productsViewed个条目,差异会大30倍,会产生什么样的影响?记录更多数据对我的目的来说更有用,但如果用户配置文件变得非常大,我想避免数据库调用滞后。

问题是:在什么时候(字符长度,我猜?)用一条MongoDB记录存储的数据太多了?

1 个答案:

答案 0 :(得分:2)

16 Meg是整个文档的限制。这意味着所有字符串等必须适合16兆。但是,在此之前,您的架构存在更多限制,您自己暗示:

  

但如果用户有10,000个产品查看条目,差异会大30倍,会产生什么样的影响?

答案是肯定的。首先使用root用户添加的数据,您可能会超过16 meg限制,但是,此外,内存中$pull$push和其他子文档操作符可能会很难及时保持表现。您可以通过将子文档批处理为100个组来缓解该问题。

然而,再次,你有一个更大的问题:碎片化。由于MongoDB将记录存储在磁盘上的单个连续空间中,因此它具有类似填充的设置,您可以看到来自奇数大小的记录对象的大量碎片,而不是在此处重复使用。

我个人会说你应该将这种关系分解为一个单独的集合。