mongodb 连接池问题
发布于 9个月前 作者 xuyufei 659 次浏览

刚刚看了该论坛的该于mongodb连接池问题的帖子“mongodb驱动的正确使用方法” ,地址:http://cnodejs.org/topic/5190d61263e9f8a542acd83b 产生了疑惑!!! 当连接池poolSize设为10时,插入100万条数据,用时78472毫秒。当连接池poolSize设为1时,插入100万条数据,用时53454毫秒。 也就是说当连接数为1时,反而比连接数为10时用时更少!那要连接池还有什么用呢????

一下是测试代码,在Linux下运行 var server_options={’auto_reconnect’:true,poolSize:1}; console.log("poolSize:"+server_options.poolSize); var db_options={w:-1};

var mongodb = require(“mongodb”), mongoserver = new mongodb.Server('localhost’, 27017,server_options ), db = new mongodb.Db('test’, mongoserver, db_options);

db.open(function(err,db){ if(err)throw err; console.info(‘mongodb connected’); });

var time_start; function a(x){ db.collection(‘foo’).save({test:1},function(err,result){ if(x==1000000){ var now1=new Date(); var time_end=now1.getTime(); console.info('diff:’+(time_end-time_start)); }

});

} setTimeout(function(){ var now=new Date(); time_start=now.getTime();

for(var i=1;i<=1000000;i++) {

a(i);

} },2000)

3 回复

mongodb 写的时候,同一个数据库,只能有一个进程可以使用当前入口。 你就是100个连接也没用。 因为并发已经被锁了。 这时连接数多了,反而增加CPU指令切换,他会“智能”的在几个写进程切换,让每一个都参与。

连接池的优势是读,这个不会被锁,而且即便并发写,在内存中也有记录,没有在写的数据依然可以同时读。

刚试了试,把db.collection(‘foo’).save({test:1},改成db.collection(‘foo’).find({test:1}。即写改成读操作,连续读取4千万条记录,发现连接数为10个和连接数为1个,时间上也没区别!!!甚至连接数为10个用时更长

能解释一下原因吗?读操作连接池也没有优势

回到顶部