MongoDB的性能问题:单巨大集合VS多个小集合(MongoDB performance issu

2019-07-30 11:10发布

我测试了两种场景单巨大集合VS多个小集合,发现在性能上巨大的差异,而查询。 下面是我做的。

案例1:我创建了一个包含10万条记录10种不同类型的产品的产品集合,在这正好1万条记录每个产品类型,我对ProductType创建的索引。 当我跑了条件ProductType = 1和ProductPrice> 100和限制(10)样本查询返回10条记录ProductType = 1,并且其价格大于100,花了大约35毫秒时,收集了大量的产品,其价格超过100,同样的查询花了大约8000毫秒(8秒),当我们在ProductType = 1,其价格大于100非常少的产品数量。

案例2:我创建了10个不同的产品表中的每个含有1万条记录每一个ProductType。 在收集1包含记录productType 1,当我跑了条件ProductPrice相同的样本查询> 100和限制(10)返回10条记录的产品,其价格大于100,花了大约2.5毫秒时,收集了很多的产品,其价格比100多了,同样的查询花了大约1500毫秒(1.5秒)时,我们有非常少的产品,其价格大于100号。

那么,为什么有这么大的差别? 的情况下,一个与案件两者之间唯一的区别是一个巨大集合VS多个较小的集合,但我在第一种情况下一个单一的巨大集合创建ProductType的指数。 我猜的性能差异是由指数在第一种情况下造成的,我需要的是,在第一种情况下指数否则它会在性能更最差。 我预计一些性能在第一种情况下慢,由于指数,但我没想到的巨大差异在第一种情况下的10倍左右缓慢。

所以8000毫秒VS上的一个巨大集合1500毫秒VS多个小集合。 为什么?

Answer 1:

分离的集合让你没有任何真正的开销自由指数。 有开销的索引扫描,特别是如果该指数是不是真的帮助你减少它必须扫描结果的数量(如果你有在指数一百万结果,但你必须扫描所有这些,检查它们,它不会帮你)。

总之,分离出来是一个有效的优化,但你应该让你的索引你的查询好转之前您实际上决定采取这条路线,我认为釜底抽薪(产品价格指数可能会帮助你在这种情况下,更多) 。

使用说明()可以帮助您了解查询的工作。 有些基础是:你想nscanned对N的比率低,地理位置优越。 你不想scanAndOrder = true,并且你不想BasicCursor,通常(这意味着你不使用索引的话)。



文章来源: MongoDB performance issue: Single Huge collection vs Multiple Small Collections