背景交代: 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是举的例子,在不发生内存异常的情况下 我觉得越大越好
原文地址:https://www.cnblogs.com/wholeworld/p/10099905.html
时间: 2024-10-02 13:29:17