我有一组用户。
每个用户都有一些基本属性:名称,地址,邮政编码......
但每个用户还有一些更多的空间属性:统计。
statistics属性包含的数组比放在一起的所有其他属性大10倍以上。
我的问题如下:
我应该将我的集合拆分为用户集合和用户统计信息集合吗? 用户集合将包含基本属性, user_stats集合将是用户,但包含统计信息。然后,当我想要检索基本信息时,我可以使用用户集合,当我真正需要统计数据时,我可以使用user_stats集合。
例如,如果我搜索所有用户的所有名称:
userCollection.find({},{"name":true});
在我只有一个系列的情况和我有两个系列的情况下,它们会在性能上有所不同吗?这种差异是否是线性的(即使是这种情况,线性因素是一个文件大小的比例)?
它推断的一般问题是:当文档的大小变大(选择相同的属性)时,mongodb会失去性能吗?
统计信息中的属性位于一个随时间变大的数组中(用户使用该应用程序的次数越多)。它们对此数组没有限制,但大多数用户(90%)的统计信息属性不会超过其他属性的10倍。但是,一小部分用户(1-2%)具有统计属性,其大小是其他属性的500倍。
我需要这些数据,所以我不关心存储,而是关注性能。
它们基本上是我从用户集合中获取数据的两种情况:
当我显示用户列表时,我无法获取统计信息:我只投影名称属性以及其他一些空间有限的项目
当我显示一个用户时,我获取统计信息:基本上我会投影所有统计信息属性+其他一些。
答案 0 :(得分:1)
答案 1 :(得分:1)
这取决于统计数据如何影响您的查询性能。如果您的查询延迟较低,则拆分可能不值得。 即使您只投影所需的字段,整个文档也会加载到内存中。
注意:未绑定的数组不是一个好的设计。