hello.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. var cluster = require('cluster')
  2. , numCPUs = require('os').cpus().length;
  3. if (cluster.isMaster) {
  4. // Fork workers.
  5. for (var i = 0; i < numCPUs; i++) {
  6. cluster.fork();
  7. }
  8. cluster.on('exit', function(worker, code, signal) {
  9. console.log('worker ' + worker.pid + ' died');
  10. });
  11. return;
  12. }
  13. var http = require('http')
  14. , url = require('url')
  15. , async = require('async')
  16. , mongoose = require('mongoose')
  17. , conn = mongoose.connect('mongodb://172.16.234.132/hello_world')
  18. , mysql = require('mysql')
  19. , pool = mysql.createPool({
  20. host: '172.16.234.132',
  21. user : 'benchmarkdbuser',
  22. password : 'benchmarkdbpass',
  23. database : 'hello_world',
  24. connectionLimit : 256
  25. })
  26. , Sequelize = require("sequelize")
  27. , sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
  28. host: '172.16.234.132',
  29. logging: false,
  30. define: { timestamps: false },
  31. maxConcurrentQueries: 100,
  32. pool: { maxConnections: 800, maxIdleTime: 30 }
  33. })
  34. , World = sequelize.define('World', {
  35. randomNumber: Sequelize.INTEGER
  36. }, {
  37. freezeTableName: true
  38. });
  39. // define model
  40. var Schema = mongoose.Schema
  41. , ObjectId = Schema.ObjectId;
  42. var WorldSchema = new Schema({
  43. id : Number
  44. , randomNumber : Number
  45. }, { collection : 'world' });
  46. var MWorld = conn.model('World', WorldSchema);
  47. function getRandomNumber() {
  48. return Math.floor(Math.random() * 10000) + 1;
  49. }
  50. function mongooseQuery(callback) {
  51. MWorld.findOne({ id: getRandomNumber()}).exec(function (err, world) {
  52. callback(err, world);
  53. });
  54. }
  55. function sequelizeQuery(callback) {
  56. World.find(getRandomNumber()).success(function (world) {
  57. callback(null, world);
  58. });
  59. }
  60. http.createServer(function (req, res) {
  61. // JSON response object
  62. var hello = {message: "Hello, world"};
  63. var path = url.parse(req.url).pathname;
  64. switch (path) {
  65. case '/json':
  66. // JSON Response Test
  67. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  68. // Write JSON object to response
  69. res.end(JSON.stringify(hello));
  70. break;
  71. case '/mongoose':
  72. // Database Test
  73. var values = url.parse(req.url, true);
  74. var queries = values.query.queries || 1;
  75. var queryFunctions = new Array(queries);
  76. for (var i = 0; i < queries; i += 1) {
  77. queryFunctions[i] = mongooseQuery;
  78. }
  79. res.writeHead(200, {'Content-Type': 'application/json; charset=UTF-8'});
  80. async.parallel(queryFunctions, function(err, results) {
  81. res.end(JSON.stringify(results));
  82. });
  83. break;
  84. case '/sequelize':
  85. var values = url.parse(req.url, true);
  86. var queries = values.query.queries || 1;
  87. var queryFunctions = new Array(queries);
  88. for (var i = 0; i < queries; i += 1) {
  89. queryFunctions[i] = sequelizeQuery;
  90. }
  91. res.writeHead(200, {'Content-Type': 'application/json'});
  92. async.parallel(queryFunctions, function(err, results) {
  93. res.end(JSON.stringify(results));
  94. });
  95. break;
  96. case '/mysql':
  97. res.writeHead(200, {'Content-Type': 'application/json'});
  98. pool.getConnection(function(err, connection) {
  99. if (err || !connection) {
  100. return res.end('MYSQL CONNECTION ERROR.');
  101. }
  102. function mysqlQuery(callback) {
  103. connection.query("SELECT * FROM World WHERE id = " + getRandomNumber(), function(err, rows) {
  104. callback(null, rows[0]);
  105. });
  106. }
  107. var values = url.parse(req.url, true);
  108. var queries = values.query.queries || 1;
  109. var queryFunctions = new Array(queries);
  110. for (var i = 0; i < queries; i += 1) {
  111. queryFunctions[i] = mysqlQuery;
  112. }
  113. async.parallel(queryFunctions, function(err, results) {
  114. res.end(JSON.stringify(results));
  115. connection.end();
  116. });
  117. });
  118. break;
  119. default:
  120. // File not found handler
  121. res.writeHead(404, {'Content-Type': 'text/html; charset=UTF-8'});
  122. res.end("NOT IMPLEMENTED");
  123. }
  124. }).listen(8080);