knight_ka | 生活及学习笔记

mongoDB初体验时遇到的一个问题及一些思考

mongoDB初体验时遇到的一个问题及一些思考

最近在项目中准备用mongoDB来做产品的管理及分类的管理。
因为后期设计的产品较多,所以对mongoDB进行了一个简单的性能测试。
在测试过程中发现一个问题,做了10000条模拟数据添加到mongoDB中,然后用Spring提供的template进行数据读取并展示到html页面上:
测试结果:10000条数据全部展示到html中共耗时6000ms,很吃惊 为什么会这么慢呢。

然后开始分析:

1.查看mongoDB本身的查询速度
首先看了下是不是mongodb本身的查询速度问题,所以在mongodb中用db.product.find().explain(“executionStats”)进行结果分析,发现10000条数据mongodb中只需要2ms就全部查询完毕。
mongoDB
基本可以排除数据库本身性能问题。
2.然后判断是不是连接数据库的时候比较慢:
因为项目是用的spring进行管理的,配置了连接池,所以在服务启动时已经进行了获取了连接放到了连接池中,调用过程中直接从连接池获取一个连接就可以了,所以也不是获取数据库连接的问题。
3.然后又把问题转移到了spring上,是不是spring进行查询的时候比较慢呢:
用jdbc原生的方式写了一份demo,一样是查询10000条数据,从获取到连接之后开始计时,到查询出所有的结果集总耗时12ms。
再次用spring template测试,发现还是需要6000ms。(PS:使用的是同一个驱动,有人说可能是驱动问题,所以也更新了最新版驱动)

最后再次测试原生的方式查询到结果集,然后遍历结果集封装成java对象。最后发现 这个时间也是6000ms。可能这就是问题所在吧。因为spring template返回给我们的是一个List集合,List中封装的是10000个java对象。所以总体耗时这么久全都是出在了 这10000条数据转换成对象并封装到list中。

找到了问题,那么实际的解决方案就是在应用中要同时展示出10000条数据,用户体验也不好,处理速度也慢,所以在应用中一般选择分页查询,一次查询少量数据 然后分批查询,数据量少了,这样java对象的封装也就快了。