最近上线了一个web项目,数据库使用mongodb,驱动用的官方的mongodb驱动,然后研读了一下源代码,连接池貌似只有五个连接数? QQ图片20170830102636.png ,请问大家一般在使用的时候用不用自己设置一下连接数,比如20,30?还是就用5个就够了
去压测
有这个option理论上就应该能传poolSize啊 不过5个应该也够了,除非你所有mongodb的操作都是很耗时的。
@i5ting 老师,我压测了一个简单的登录接口,4核8G的服务器,pm2 起了3个进程,貌似200并发以上cpu使用率就到90%了,node性能应该没有这么差把,并发在高的话,qps也上不去了,只是响应时间增加,也只是排队了,我感觉好像有个小扎口,性能一直不理想,请指教一下
@imhered 是的,默认如果不传的话就5个,我不知道默认的是够不够用,我如果设置个100?是否就真的有意义?
应用场景下可以与mongodb server建立长连接,CURD后不释放连接,由server端进行回收和控制连接池,一个进程建立5个连接,3个就是15个连接,短时间内的大批量查询请求,性能损耗不在查询而在建立查询连接上。我曾经试过批量写入,node的处理速度远远超过mongoserver能够及时写入的速度,队列在mongodb server端而不是node端。
@haozxuan 我就是建立的长连接,单例模式,您的意识是每次都重新建立,再断开,循环往复,切换时间大于实际查询时间,我的写法确实避免了这个问题,全部都是长连接,var MongoClient = require(‘mongodb’).MongoClient; 我保证只有一个这个实例长连接,MongoClient 里面包括了5个默认的连接数,我现在压测的结果是压力都是在web服务器端,而mongo的服务器没什么压力,web服务器cpu很高,mongo数据库cpu使用率反而比较低
@312xiaoguai 请贴出你的压测代码。
@312xiaoguai 4核8G的服务器,pm2 起了3个进程,貌似200并发。。。。。。那应该是代码问题
@312xiaoguai 压测呀。 就像1楼说的,你设置5个,压测一下看看5个够不够。 如果不够那么就在加。 一直加到压测的时候保证连接是够用的就行了。 100个肯定太多了吧,不过也得看实际业务,mongodb没怎么用过。 反正我用mysql连接池一直都是10,完全够用。
@i5ting 我的代码就是简单的一个数据库查询,按照_id的查询,就算我就写个简单的helloworld压测,cpu使用率依旧很高
@haozxuan // 压力测试 router.get(’/api/pushtestnodb’,controllerExam.pushtestnodb);
module.exports.pushtestnodb = function * () {
this.body = 'ok';
} 压测就是阿里云性能测试的压测工具,这算这段代码压力上来200多并发,响应时间都7,8百毫秒了,我在想node的性能没这么差把
@312xiaoguai 别的不多说,你压mongo,难道不是在本地做吗?你还引入了云服务器的网络延时问题,而且从你的所谓压测代码,根本看不到任何CURD相关,你应该去了解下阿里云的压测工具实现。