hello.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. var cluster = require('cluster')
  2. , numCPUs = require('os').cpus().length
  3. , windows = require('os').platform() == 'win32';
  4. if(cluster.isMaster) {
  5. // Fork workers.
  6. for (var i = 0; i < numCPUs; i++) {
  7. cluster.fork();
  8. }
  9. cluster.on('exit', function(worker, code, signal) {
  10. console.log('worker ' + worker.pid + ' died');
  11. });
  12. return;
  13. }
  14. var http = require('http')
  15. , url = require('url')
  16. , async = require('async')
  17. , mongoose = require('mongoose')
  18. , conn = mongoose.connect('mongodb://localhost/hello_world')
  19. , MongoClient = require('mongodb').MongoClient
  20. , connMap = { user: 'benchmarkdbuser', password: 'benchmarkdbpass', database: 'hello_world', host: 'localhost' };
  21. if (!windows) {
  22. var Mapper = require('mapper')
  23. , libmysql = require('mysql-libmysqlclient').createConnectionSync();
  24. Mapper.connect(connMap, {verbose: false, strict: false});
  25. var World = Mapper.map("World", "id", "randomNumber")
  26. libmysql.connectSync('localhost', 'benchmarkdbuser', 'benchmarkdbpass', 'hello_world');
  27. }
  28. var collection = null;
  29. MongoClient.connect('mongodb://localhost/hello_world?maxPoolSize=5', function(err, db) {
  30. collection = db.collection('world');
  31. });
  32. // define model
  33. var Schema = mongoose.Schema
  34. , ObjectId = Schema.ObjectId;
  35. var WorldSchema = new Schema({
  36. id : Number
  37. , randomNumber : Number
  38. }, { collection : 'world' });
  39. var MWorld = conn.model('World', WorldSchema);
  40. function getRandomNumber() {
  41. return Math.floor(Math.random() * 10000) + 1;
  42. }
  43. function mongooseQuery(callback) {
  44. MWorld.findOne({ id: getRandomNumber()}).exec(function (err, world) {
  45. callback(err, world);
  46. });
  47. }
  48. function mongodbDriverQuery(callback) {
  49. collection.findOne({ id: getRandomNumber()}, function(err, world) {
  50. callback(err, world);
  51. });
  52. }
  53. function mongodbDriverUpdateQuery(callback) {
  54. collection.findAndModify({ id: getRandomNumber()}, [['_id','asc']], {$set: {randomNumber: getRandomNumber()}}, {}, function(err, world) {
  55. callback(err, world);
  56. });
  57. }
  58. function sequelizeQuery(callback) {
  59. World.findById(getRandomNumber(), function (err, world) {
  60. callback(null, world);
  61. });
  62. }
  63. http.createServer(function (req, res) {
  64. // JSON response object
  65. var hello = {message: "Hello, world"};
  66. var helloStr = "Hello, World!";
  67. var path = url.parse(req.url).pathname;
  68. // mysql on windows is not supported
  69. if (windows && (path.substr(0, 3) == '/my' || path == '/update')) {
  70. path = '/doesntexist';
  71. }
  72. switch (path) {
  73. case '/json':
  74. // JSON Response Test
  75. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  76. // Write JSON object to response
  77. res.end(JSON.stringify(hello));
  78. break;
  79. case '/plaintext':
  80. // JSON Response Test
  81. res.writeHead(200, {'Content-Type': 'text/plain; charset=UTF-8'});
  82. // Write JSON object to response
  83. res.end(helloStr);
  84. break;
  85. case '/mongodbdriver':
  86. // Database Test
  87. var values = url.parse(req.url, true);
  88. var queries = values.query.queries || 1;
  89. var queryFunctions = new Array(queries);
  90. for (var i = 0; i < queries; i += 1) {
  91. queryFunctions[i] = mongodbDriverQuery;
  92. }
  93. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  94. async.parallel(queryFunctions, function(err, results) {
  95. res.end(JSON.stringify(results));
  96. });
  97. break;
  98. case '/mongoose':
  99. // Database Test
  100. var values = url.parse(req.url, true);
  101. var queries = values.query.queries || 1;
  102. var queryFunctions = new Array(queries);
  103. for (var i = 0; i < queries; i += 1) {
  104. queryFunctions[i] = mongooseQuery;
  105. }
  106. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  107. async.parallel(queryFunctions, function(err, results) {
  108. res.end(JSON.stringify(results));
  109. });
  110. break;
  111. case '/mysql-orm':
  112. var values = url.parse(req.url, true);
  113. var queries = values.query.queries || 1;
  114. var queryFunctions = new Array(queries);
  115. for (var i = 0; i < queries; i += 1) {
  116. queryFunctions[i] = sequelizeQuery;
  117. }
  118. res.writeHead(200, {'Content-Type': 'application/json'});
  119. async.parallel(queryFunctions, function(err, results) {
  120. res.end(JSON.stringify(results));
  121. });
  122. break;
  123. case '/mysql':
  124. res.writeHead(200, {'Content-Type': 'application/json'});
  125. function libmysqlQuery(callback) {
  126. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  127. if (err) {
  128. throw err;
  129. }
  130. res.fetchAll(function(err, rows) {
  131. if (err) {
  132. throw err;
  133. }
  134. res.freeSync();
  135. callback(null, rows[0]);
  136. });
  137. });
  138. }
  139. var values = url.parse(req.url, true);
  140. var queries = values.query.queries || 1;
  141. var queryFunctions = new Array(queries);
  142. for (var i = 0; i < queries; i += 1) {
  143. queryFunctions[i] = libmysqlQuery;
  144. }
  145. async.parallel(queryFunctions, function(err, results) {
  146. if (err) {
  147. res.writeHead(500);
  148. return res.end('MYSQL CONNECTION ERROR.');
  149. }
  150. res.end(JSON.stringify(results));
  151. });
  152. break;
  153. case '/update':
  154. res.writeHead(200, {'Content-Type': 'application/json'});
  155. function libmysqlQuery(callback) {
  156. libmysql.query("SELECT * FROM world WHERE id = " + getRandomNumber(), function (err, res) {
  157. if (err) {
  158. throw err;
  159. }
  160. res.fetchAll(function(err, rows) {
  161. if (err) {
  162. throw err;
  163. }
  164. res.freeSync();
  165. rows[0].randomNumber = getRandomNumber();
  166. libmysql.query("UPDATE World SET randomNumber = " + rows[0].randomNumber + " WHERE id = " + rows[0]['id'], function (err, res) {
  167. if (err) {
  168. throw err;
  169. }
  170. callback(null, rows[0]);
  171. });
  172. });
  173. });
  174. }
  175. var values = url.parse(req.url, true);
  176. var queries = values.query.queries || 1;
  177. if(queries < 1) {
  178. queries = 1;
  179. } else if(queries > 500) {
  180. queries = 500;
  181. }
  182. var queryFunctions = new Array(queries);
  183. for (var i = 0; i < queries; i += 1) {
  184. queryFunctions[i] = libmysqlQuery;
  185. }
  186. async.parallel(queryFunctions, function(err, results) {
  187. if (err) {
  188. res.writeHead(500);
  189. return res.end('MYSQL CONNECTION ERROR.');
  190. }
  191. res.end(JSON.stringify(results));
  192. });
  193. break;
  194. case '/update-mongodb':
  195. // Database Test
  196. var values = url.parse(req.url, true);
  197. var queries = values.query.queries || 1;
  198. if (queries < 1) {
  199. queries = 1;
  200. } else if (queries > 500) {
  201. queries = 500;
  202. }
  203. var queryFunctions = new Array(queries);
  204. for (var i = 0; i < queries; i += 1) {
  205. queryFunctions[i] = mongodbDriverUpdateQuery;
  206. }
  207. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  208. async.parallel(queryFunctions, function(err, results) {
  209. res.end(JSON.stringify(results));
  210. });
  211. break;
  212. default:
  213. // File not found handler
  214. res.writeHead(501, {'Content-Type': 'text/plain; charset=UTF-8'});
  215. res.end("NOT IMPLEMENTED");
  216. }
  217. }).listen(8080);