大数据量情况下查询性能低,耗时长的一种问题以及解决思路

背景交代: 1   mongodb 有500万条数据

                 2  经过过滤 还有20多万条数据

要得到上述20w条数据,一次查询得到20多万条,很可能会产生性能问题,于是同事用for循环,每次查询1000条数据,下一次skip 1000条,take 1000条。导致性能及其低下,早上请求,下午才获得完整数据。

解决方法思路是将1000改成5000

原因: 

第一次 取1000

第二次 先数完前1000行 再取1000

第三次 先数完前2000行 再取1000

...

第二百次 数完199000 再取1000

这样数了(1000+199000)+(2000+198000)+...=100*200000=2000 0000次  = 两千万次

如果是5000的话

数了 40/2*5000=20*5000=10 0000=十万次

两者相差200倍

这是比较的数行数的差距,另外读数据到内存,每次1000行得到的list 要union 200次,每次5000行得到的list 要union40次。

5000是举的例子,在不发生内存异常的情况下 我觉得越大越好

猜你喜欢

转载自www.cnblogs.com/wholeworld/p/10099905.html
今日推荐