在Nodejs Mongodb,又一个插入性能

我正在学习nodejs和mongodb,只是在使用ramdrive的单个低端笔记本电脑上testing插入mongodb的性能(以后用redisreplace它),结果每秒只有465个插入。 每个插入只有xyz值不能超过12个字节的数据。

var mongodb = require('mongodb'); var client = mongodb.MongoClient; var url = 'mongodb://localhost:2019/evdb2'; client.connect(url, function (err, db) { if (err) { console.log('fail:', err); } else { console.log('success:', url); var collection = db.collection('tablo'); collection.remove(); // var bulk = collection.initializeUnorderedBulkOp(); //benchmark insert var t = 0; t = new Date(); var ctr = 0; for (var i = 0; i < 1024 * 64; i++) { collection.insert({ x: i + 1, y: i, z: i * 10 }, function (e, r) { ctr++; if (ctr == 1024 * 64) { var t2 = 0; db.close(); t2 = new Date(); console.log("insert-64k: " + 1000.0 / ((t2.getTime() - t.getTime()) / (1024 * 64)) + " insert/s"); } }); } } }); 

Node-js命令行:

 C:\Users\pc> node "....\bench.js" success: mongodb://localhost:2019/evdb2 insert-64k: 465.62650979054763 insert/s 

Mongod命令行:

 2016-11-12T02:02:57.980+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54623 #67 (1 connection now open) 2016-11-12T02:04:07.893+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54630 #68 (2 connections now open) 2016-11-12T02:04:07.895+0300 I NETWORK [conn67] end connection 127.0.0.1:54623 (1 connection now open) 2016-11-12T02:04:47.976+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54633 #69 (2 connections now open) 2016-11-12T02:04:47.978+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54634 #70 (3 connections now open) 2016-11-12T02:04:47.979+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54635 #71 (4 connections now open) 2016-11-12T02:04:47.981+0300 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54636 #72 (5 connections now open) 2016-11-12T02:06:28.669+0300 I NETWORK [conn68] end connection 127.0.0.1:54630 (4 connections now open) 2016-11-12T02:06:28.671+0300 I NETWORK [conn69] end connection 127.0.0.1:54633 (3 connections now open) 2016-11-12T02:06:28.673+0300 I NETWORK [conn70] end connection 127.0.0.1:54634 (3 connections now open) 2016-11-12T02:06:28.674+0300 I NETWORK [conn71] end connection 127.0.0.1:54635 (3 connections now open) 2016-11-12T02:06:28.675+0300 I NETWORK [conn72] end connection 127.0.0.1:54636 (2 connections now open) 
  • 客户端和服务器都是同一台机器,所以延迟时间必须很低,不是吗?
  • Ramdrive用于/ data / db /文件夹,因此磁盘必须没有瓶颈。
  • 此外,日志function也被禁用,以使cpu内核有循环。

什么可能导致这种放缓? 这个465 / s的速度用散装插件代替时增加到20k / s。

这里是mongod的启动参数:

 C:\....\pc>"C:\....\MongoDB\Server\3.2\bin\mongod" --bind_ip 127.0.0.1 --port 2019 --dbpath m:\data\db --quotaFiles 1 --smallfiles --nojournal 

每20亿个CPU周期将会有500个插入程序非常慢。 这意味着每2M cpu周期插入一次(这是2个核心cpu,因此每个插入必须是4M周期,因为cpu使用率为100%)

为什么散装刀片和单刀片有很大区别? 批量使用一些压缩技术? 连接是100Mbit以太网电缆,但是由于服务器和客户机是同一台机器,所以信息只是从路由器上ping回来,不是吗?