app.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * Module dependencies.
  3. */
  4. var cluster = require('cluster')
  5. , numCPUs = require('os').cpus().length
  6. , express = require('express')
  7. , mongoose = require('mongoose')
  8. , async = require('async')
  9. , conn = mongoose.connect('mongodb://localhost/hello_world')
  10. , Sequelize = require("sequelize")
  11. , sequelize = new Sequelize('hello_world', 'benchmarkdbuser', 'benchmarkdbpass', {
  12. host: 'localhost',
  13. logging: false,
  14. define: { timestamps: false },
  15. maxConcurrentQueries: 100,
  16. pool: { maxConnections: 800, maxIdleTime: 30 }
  17. })
  18. , World = sequelize.define('World', {
  19. randomNumber: Sequelize.INTEGER
  20. }, {
  21. freezeTableName: true
  22. });
  23. var Schema = mongoose.Schema
  24. , ObjectId = Schema.ObjectId;
  25. var WorldSchema = new Schema({
  26. id : Number
  27. , randomNumber : Number
  28. }, { collection : 'world' });
  29. var MWorld = conn.model('World', WorldSchema);
  30. if (cluster.isMaster) {
  31. // Fork workers.
  32. for (var i = 0; i < numCPUs; i++) {
  33. cluster.fork();
  34. }
  35. cluster.on('exit', function(worker, code, signal) {
  36. console.log('worker ' + worker.pid + ' died');
  37. });
  38. } else {
  39. var app = module.exports = express();
  40. // Configuration
  41. app.configure(function(){
  42. app.use(express.bodyParser());
  43. app.use(express.methodOverride());
  44. app.use(app.router);
  45. });
  46. app.configure('development', function() {
  47. app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  48. });
  49. app.configure('production', function() {
  50. app.use(express.errorHandler());
  51. });
  52. // Routes
  53. app.get('/json', function(req, res) {
  54. res.send({ message: 'Hello World!' })
  55. });
  56. app.get('/mongoose', function(req, res) {
  57. var queries = req.query.queries || 1,
  58. worlds = [],
  59. queryFunctions = [];
  60. for (var i = 1; i <= queries; i++ ) {
  61. queryFunctions.push(function(callback) {
  62. MWorld.findOne({ id: (Math.floor(Math.random() * 10000) + 1 )}).exec(function (err, world) {
  63. worlds.push(world);
  64. callback(null, 'success');
  65. });
  66. });
  67. }
  68. async.parallel(queryFunctions, function(err, results) {
  69. res.send(worlds);
  70. });
  71. });
  72. app.get('/sequelize', function(req, res) {
  73. var queries = req.query.queries || 1
  74. , worlds = []
  75. , queryFunctions = [];
  76. for (var i = 1; i <= queries; i++ ) {
  77. queryFunctions.push(function(callback) {
  78. World.find(Math.floor(Math.random()*10000) + 1).success(function (world) {
  79. worlds.push(world);
  80. callback(null, 'success');
  81. });
  82. });
  83. }
  84. async.parallel(queryFunctions, function(err, results) {
  85. res.send(worlds);
  86. });
  87. });
  88. app.listen(8080);
  89. }