1

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

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

我在这里有两个选择。我可以只记录_id每个产品的名称,也可以记录代表产品的整个对象(名称、价格、约 100 字的描述、类别等)。对象大小的差异是每个产品 1 行文本,而每个产品大约 30 行。

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

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

4

1 回答 1

2

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

但是,如果用户有 10,000 个 productsViewed 条目,大约 30 倍的差异会产生任何影响吗?

答案是肯定的。首先添加 root 用户的数据,您可能会超过 16 兆的限制,但是,在此之后 in-memory$pull$push其他子文档操作员可能很难保持性能。您可以通过将子文档分成 100 个一组来缓解这个问题。

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

我个人会说你应该把这种关系考虑到一个单独的集合中。

于 2013-07-22T12:21:33.600 回答