今天遇到这么个问题,一样的代码从一个方法移到另一个方法后运行速度极慢。遇到问题的方法是一个访问数据库并输出excel文件的功能。

问题出在大量的数据库访问。
for(A a:aaa){
调用数据库的方法;
}
其实数据库不怕大数据量的访问(一般的业务也用不到那么大的数据量),但是同一时间大量用户的访问(即大并发量)才是数据库访问时害怕遇到的。
我这次的问题就是数据库的大量连接,只是一个用户想找上万条数据,但这种写法变成了上万个用户找对应的一条数据,每一条的查询返回其实并不需要多少时间,但是如果数据库连接池较小,连接和释放就会导致严重的时间损耗,浪费大量时间,但是实际运算量小的可怜。

比如连接池允许10个用户同一时间接入,如果查询需要的时间极短但是连接和释放需要0.01秒,10000个用户就至少要10秒,这是绝不允许的。

思路:把大并发量转化成大数据量,并把数据处理放在后端去做,比如先用一个list保存所有机构,再用map保存键值对组,利用map去匹配而不是大量的数据库连接。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐