成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB的JavaScript性能

數據庫 其他數據庫 MongoDB
mongodb使用javascript做shell, mongodb的db.eval可以提供給數據驅動與這種javascript shell類似的js接口. 這算是一種移動代碼風格(Mobile Code Sytles)的架構設計吧. 我期望可以利用這個接口, 將一些處理邏輯放在mongodb的節點上運行. 避免在PHP里面多次獲取和操作mongodb的數據. (這個需求類似傳統數據庫的存儲過程)

   mongodb的db.eval

  mongodb使用javascript做shell, mongodb的db.eval可以提供給數據驅動與這種javascript shell類似的js接口. 這算是一種移動代碼風格(Mobile Code Sytles)的架構設計吧. 我期望可以利用這個接口, 將一些處理邏輯放在mongodb的節點上運行. 避免在PHP里面多次獲取和操作mongodb的數據. (這個需求類似傳統數據庫的存儲過程)

  但是測試卻發現, 在mongodb里面跑javascript性能很不理想. 我寫了一段測試代碼, 跑10000次循環:

 

  1. <?php 
  2. $mongo = new Mongo("mongodb://localhost:20237/"); 
  3. $db = $mongo->selectDB("attl"); 
  4.  
  5. $echo_func = <<<JAVASCRIPT 
  6. function() { 
  7.         var str = "xxxxxxxxxxxxxxxxx0000000000"
  8.         var data = str + str + str + str; 
  9.         var data = data + data + data + data; 
  10.         var max = 10000; 
  11.         var arr = []; 
  12.         var total = 0; 
  13.  
  14.         for(var a=0; a<100; a++) { 
  15.                 for(var i=0; i<max; i++) { 
  16.                         arr.push( data + " . " + data); 
  17.                 } 
  18.                 for(var i=0; i<arr.length; i++) { 
  19.                         total += arr[i].length; 
  20.                 } 
  21.                 arr = []; 
  22.         } 
  23.         return total; 
  24. JAVASCRIPT; 
  25.  
  26. $bgtime = microtime(true); 
  27.  
  28. $echo_code = new MongoCode($echo_func); 
  29. $obj = (object)array("name"=>"dzg""values"=>array(1,2,3), "bool"=>true) ; 
  30. $arr = array(1,2,3,4,5,6,7,8); 
  31. $map = array("a"=>1, "b"=>2); 
  32. $response = $db->execute($echo_code, array($obj, $arr, $map)); 
  33. var_dump($response); 
  34.  
  35. $endtime = microtime(true); 
  36.  
  37. echo "\n time : ".($endtime - $bgtime)."\n"

 

  執行 :

 

  1. php ab-mongo.php 
  2. array(2) { 
  3.   ["retval"]=>  float(867000000) 
  4.   ["ok"]=>  float(1) 
  5.  
  6. time : 6.0353651046753 

 

  這段js居然執行6秒之久! 在其他環境下測試同樣功能代碼:

  Google Chrome : 只需70毫秒

  Firefox 5 : 只需180毫秒

  用PHP 5執行類似代碼: 只需630毫秒

  顯然相比以上測試, mongodb的javascript性能差太大了.

  排除測試干擾

  根據mongodb官方文檔 Server-side Code Execution : Limitations of eval > Write locks 一節, 我懷疑也許是Write locks導致的. 但這種懷疑和本例關系不大, locks應該只影響并發執行, 現在的問題是一次執行都這么慢.

  另外, 我還擔心從PHP到mongodb的js代碼傳遞環節慢.

  于是花了兩種手段排除這兩個因素:

  使用 db.system.js.save({_id: “mytestfunc”, value: function () { … }}); 的方式, 將測試的js代碼作成mongodb支持的Stored JavaScript

  使用 db.runCommand({$eval: function() {return mytestfunc();}, nolock: true}) 的方式, 進行nolock調用

  結果發現問題依舊. 結論是mongodb的JavaScript執行環節有問題

  測試Mongodb + V8 JavaScript引擎

  我知道Mongodb的JavaScript引擎是SpiderMonkey, 于是想嘗試再編譯一個v8版本的Mongodb, 準備用如下JavaScript文件測試一下.

  準備測試代碼

 

  1. function dotest() { 
  2.         var str = "xxxxxxxxxxxxxxxxx0000000000"
  3.         var data = str + str + str + str; 
  4.         var data = data + data + data + data; 
  5.         var max = 10000; 
  6.         var arr = []; 
  7.         var total = 0; 
  8.  
  9.         for(var a=0; a<100; a++) { 
  10.                 for(var i=0; i<max; i++) { 
  11.                         arr.push( data + " . " + data); 
  12.                 } 
  13.                 for(var i=0; i<arr.length; i++) { 
  14.                         total += arr[i].length; 
  15.                 } 
  16.                 arr = []; 
  17.         } 
  18.         return total; 
  19.  
  20. myecho = (typeof console !== 'undefined' && typeof console.log == 'function') ? console.log : print; 
  21.  
  22. a = new Date(); 
  23. myecho("begin:\t" + a); 
  24.  
  25. myecho("result:\t" + dotest()); 
  26.  
  27. b = new Date(); 
  28. myecho("end:\t" + b); 
  29.  
  30. 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

 

  1. sudo zypper install scons tcsh boost-devel pcre-devel readline-devel 
  2.  
  3. svn checkout http://v8.googlecode.com/svn/trunk/ v8 
  4. cd v8 
  5. scons 
  6. cd .. 
  7.  
  8. git clone git://github.com/mongodb/mongo.git 
  9. cd mongov8 
  10. scons 
  11.  
  12. #run mongodb v8 
  13. ./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

  測試代碼很短, 比較片面, 上面的性能倍數只是大體估計, 不是全面精確的評估。

責任編輯:honglu 來源: NOSQL中文網
相關推薦

2017-08-10 14:04:25

前端JavaScript函數性能

2013-11-19 10:08:06

MongoDB

2009-06-10 22:00:57

JavaScript腳

2009-06-11 17:15:23

JavaScript性

2014-11-25 10:03:42

JavaScript

2012-12-17 13:51:22

Web前端JavaScriptJS

2022-11-17 08:00:18

JavaScript錯誤性能

2022-12-15 08:00:38

JavaScript錯誤性能

2011-09-27 10:11:14

MongoDBR

2013-09-04 14:22:59

JavaScript性能優化

2017-12-04 12:29:15

前端JavaScript性能優化

2009-06-24 15:00:39

Javascript代

2021-09-24 14:02:53

性能優化實踐

2023-09-13 08:00:00

JavaScript循環語句

2024-06-11 00:09:00

JavaScript模式變量

2013-05-09 09:45:29

2023-12-14 12:56:00

MongoDB數據庫優化

2022-02-25 23:46:54

JavaScript網站開發

2011-02-23 12:59:08

JSJavaScript瀏覽器

2021-05-28 09:10:40

JavaScript性能GPU
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品日产欧美久久久久 | 性一交一乱一透一a级 | 91视视频在线观看入口直接观看 | 天天玩夜夜操 | 亚洲午夜电影 | 日韩不卡一区二区三区 | 国产精品美女久久久 | 亚洲视频免费在线 | 国产色网站| 久久精品国产一区 | 一区二区三区av | 国产日韩一区二区 | 久草在线| 香蕉视频一区二区 | 欧美激情在线精品一区二区三区 | 国产精品无码专区在线观看 | 精品久久影院 | 日韩视频在线一区 | 视频在线一区二区 | 日韩av在线一区 | 久久久一区二区三区 | 成人免费视频网站在线看 | 91视频免费在观看 | 一级片免费视频 | 亚洲精品日韩一区二区电影 | 欧美日韩在线综合 | 精品一区二区三区不卡 | 激情在线视频 | 在线观看免费av网站 | 午夜视频在线 | 色综合久久久久 | 免费黄色日本 | 国产一区91精品张津瑜 | 国偷自产av一区二区三区 | 亚洲成av人影片在线观看 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 久久综合久 | av永久 | 国产农村妇女毛片精品久久麻豆 | 中文字幕在线一 | 国产精品久久久久久久久免费高清 |