bench-insert-select-parallel.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. var common = require('../test/common');
  2. var connection = common.createConnection();
  3. var assert = require('assert');
  4. var table = 'insert_test';
  5. //var text = "本日は晴天なり";
  6. var text = "test abc xyz";
  7. connection.query('drop table ' + table).on('error', function() {});
  8. connection.query([
  9. 'CREATE TABLE `' + table + '` (',
  10. '`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
  11. '`title` varchar(255) NOT NULL,',
  12. 'PRIMARY KEY (`id`)',
  13. ') ENGINE=InnoDB DEFAULT CHARSET=utf8'
  14. ].join('\n'));
  15. function benchmarkInsert(numLeft, callback) {
  16. connection.query('INSERT INTO ' + table + ' SET title="' + text + '"', function(err, result) {
  17. if (err) throw err;
  18. if (numLeft > 1)
  19. benchmarkInsert(numLeft-1, callback);
  20. else
  21. callback();
  22. });
  23. }
  24. function benchmarkInserts(n, cb) {
  25. var numInsert = 50000;
  26. var start = process.hrtime();
  27. benchmarkInsert(numInsert, function() {
  28. var end = process.hrtime();
  29. var diff = common.hrdiff(start, end);
  30. console.log(numInsert*1e9/diff + ' inserts/sec');
  31. if (n > 1)
  32. benchmarkInserts(n - 1, cb);
  33. else
  34. cb();
  35. });
  36. }
  37. function benchmarkParallelSelects(n, size, cb) {
  38. var start = process.hrtime();
  39. var numRunning = 0;
  40. function commandDone() {
  41. console.log(numRunning);
  42. numRunning--;
  43. if (numRunning > 0)
  44. return;
  45. var end = process.hrtime();
  46. var diff = common.hrdiff(start, end);
  47. console.log(size + ' rows: ' + n*1e9/diff + ' results/sec, ' + size*n*1e9/diff + ' rows/sec');
  48. cb();
  49. }
  50. var connections = new Array(n);
  51. for (var i=0; i < n; ++i)
  52. {
  53. numRunning++;
  54. connections[i] = common.createConnection();
  55. var cmd = connections[i].execute('select * from ' + table + ' limit ' + size, []);
  56. cmd.on('end', commandDone);
  57. }
  58. }
  59. module.exports = function(done) {
  60. var testStart = process.hrtime();
  61. benchmarkInserts(1, function() {
  62. benchmarkParallelSelects(8, 50000, function() {
  63. var testEnd = process.hrtime();
  64. console.log('total time: ', common.hrdiff(testStart, testEnd)/1e9 );
  65. if (done)
  66. done();
  67. });
  68. });
  69. };
  70. if (require.main === module) {
  71. module.exports();
  72. }