不容忽视:MongoDB的JavaScript性能


测试Mongodb + V8 JavaScript引擎

  我知道Mongodb的JavaScript引擎是SpiderMonkey, 于是想尝试再编译一个v8版本的Mongodb, 准备用如下JavaScript文件测试一下.

  准备测试代码:

  function dotest() {

  var str
= "xxxxxxxxxxxxxxxxx0000000000";

  var data
= str + str + str + str;

  var data
= data + data + data + data;

  var max
= 10000;

  var arr
= [];

  var total
= 0;

  
for(var a=0; a<100; a++) {

  
for(var i=0; i

  arr.push( data
+ " . " + data);

  }

  
for(var i=0; i

  total
+= arr[i].length;

  }

  arr
= [];

  }

  return total;

  }

  myecho
= (typeof console !== 'undefined' && typeof console.log == 'function') ? console.log : print;

  a
= new Date();

  myecho(
"begin:\t" + a);

  myecho(
"result:\t" + dotest());

  b
= new Date();

  myecho(
"end:\t" + b);

  myecho(
"total time:\t" + (b - a));

 

  这个JavaScript脚本能同时跑在4种环境下:

  Chrome / Firefox等浏览器环境

  node js的shell

  SpiderMonkey 的js shell

  mongo 的js shell

  我准备编译完Mongodb的v8版本后, 四个环境都比较测试一下.

  编译mongodb + v8

  我在OpenSUSE11.4下, 用linux的包管理工具准备编译环境, 还是很容易的:

  #已安装的包: g++ subversion git python

  sudo zypper install scons tcsh boost-devel pcre-devel readline-devel

  svn checkout http:
//v8.googlecode.com/svn/trunk/ v8

  cd v8

  scons

  cd ..

  git clone git:
//github.com/mongodb/mongo.git

  cd mongov8

  scons

  #run mongodb v8

  .
/mongod --quiet --shardsvr --dbpath /home/dzg/data/mongodb/test/mongod --port 20237 --nohttpinterface --fork --pidfilepath /home/dzg/data/mongodb/test/mongod.pid --logpath /home/dzg/log/mongodb/test/mongod.log --logappend

 

  执行测试

  执行~/opt/mongov8/mongo localhost:20237 dotest.js

  mongo+v8 : 93毫秒

  nodejs : 68毫秒

  SpiderMonkey : 442毫秒

  初步结论:

  mongodb + v8性能非常好, 接近node.js里面的执行性能。

  SpiderMonkey 1.9 比v8慢5倍。

  mongodb使用SpiderMonkey肯有一些环节还存在问题, 导致mongodb+SpiderMonkey比mongodb+v8慢60多倍。

  也许是mongodb的SpiderMonkey版本低? 我目前还不知道mongodb的发行版内, SpiderMonkey的确切版本.

  我上面测试SpiderMonkey 的js命令是来自xulrunner-192。

  测试代码很短, 比较片面, 上面的性能倍数只是大体估计, 不是全面精确的评估。

  • 1
  • 2
  • 下一页

相关内容