Skip to content

Commit a28f156

Browse files
committed
work in benchmark
1 parent df766c9 commit a28f156

File tree

4 files changed

+187
-41
lines changed

4 files changed

+187
-41
lines changed

benchmark/df766c913.txt

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
benchmark
2+
starting simple-query-parsing
3+
3571 ops/sec - (100/0.028)
4+
7299 ops/sec - (1000/0.137)
5+
8873 ops/sec - (10000/1.127)
6+
8536 ops/sec - (40000/4.686)
7+
8494 ops/sec - (40000/4.709)
8+
7695 ops/sec - (40000/5.198)
9+
starting prepared-statement-parsing
10+
4000 ops/sec - (100/0.025)
11+
6944 ops/sec - (1000/0.144)
12+
7153 ops/sec - (10000/1.398)
13+
7127 ops/sec - (40000/5.612)
14+
7208 ops/sec - (40000/5.549)
15+
6460 ops/sec - (40000/6.191)
16+
done
17+

benchmark/index.js

+38-41
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,42 @@
1-
var profiler = require('profiler');
2-
var Client = require(__dirname + '/../lib/client');
3-
var buffers = require(__dirname + '/../test/test-buffers');
4-
require(__dirname + '/../test/unit/test-helper');
5-
console.log('');
1+
var async = require('async');
2+
var max = 40000;
3+
var maxTimes = 3;
4+
var doLoops = function(bench, loops, times, cb) {
5+
var start = new Date();
6+
var count = 0;
67

7-
var stream = new MemoryStream();
8-
stream.readyState = 'open';
9-
var client = new Client({
10-
stream: stream
11-
});
12-
13-
var rowDescription = new buffers.rowDescription([{
14-
name: 'name',
15-
tableID: 1,
16-
attributeNumber: 1,
17-
dataTypeID: 25, //text
18-
typeModifer: 0,
19-
formatCode: 0 //text format
20-
}]);
21-
var row1 = buffers.dataRow(['Brian']);
22-
var row2 = buffers.dataRow(['Bob']);
23-
var row3 = buffers.dataRow(['The amazing power of the everlasting gobstopper']);
24-
var complete = buffers.commandComplete('SELECT 3');
25-
var ready = buffers.readyForQuery();
26-
var buffer = Buffer.concat([rowDescription, row1, row2, row3, complete, ready]);
27-
28-
client.connect(assert.calls(function() {
29-
client.connection.emit('readyForQuery');
8+
var done = function() {
9+
var duration = (new Date() - start)
10+
var seconds = (duration / 1000);
11+
console.log("%d ops/sec - (%d/%d)", ~~(loops/seconds), loops, seconds);
12+
var next = loops * 10;
13+
if(next > max) {
14+
if(times > maxTimes) return cb();
15+
times++;
16+
next = max;
17+
}
18+
setTimeout(function() {
19+
doLoops(bench, next, times, cb);
20+
}, 100);
21+
}
3022

31-
var callCount = 0;
32-
var max = 1000;
33-
profiler.resume();
34-
for(var i = 0; i < max; i++) {
35-
//BEGIN BENCH
36-
client.query('SELECT * FROM whatever WHERE this = "doesnt even matter"', function(err, res) {
37-
callCount++;
23+
var run = function() {
24+
if(count++ >= loops){
25+
return done();
26+
}
27+
bench(function() {
28+
setImmediate(run);
3829
});
39-
//END BENCH
40-
stream.emit('data', buffer);
4130
}
42-
profiler.pause();
43-
assert.equal(callCount, max);
44-
}));
45-
client.connection.emit('readyForQuery');
31+
run();
32+
}
33+
var bench = require(__dirname + '/simple-query-parsing');
34+
console.log();
35+
var benches = ['simple-query-parsing', 'prepared-statement-parsing'];
36+
async.forEachSeries(benches, function(name, cb) {
37+
var bench = require(__dirname + '/' + name)();
38+
console.log('starting ', name);
39+
doLoops(bench, 100, 1, cb);
40+
}, function(err, res) {
41+
console.log('done')
42+
})
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
var Client = require(__dirname + '/../lib/client');
2+
var buffers = require(__dirname + '/../test/test-buffers');
3+
require(__dirname + '/../test/unit/test-helper');
4+
5+
var stream = new MemoryStream();
6+
stream.readyState = 'open';
7+
var client = new Client({
8+
stream: stream
9+
});
10+
11+
var rowDescription = new buffers.rowDescription([{
12+
name: 'id',
13+
tableID: 1,
14+
attributeNumber: 1,
15+
dataTypeID: 23, //int4
16+
typeModifer: 0,
17+
formatCode: 0
18+
},{
19+
name: 'name',
20+
tableID: 1,
21+
attributeNumber: 2,
22+
dataTypeID: 25, //text
23+
typeModifer: 0,
24+
formatCode: 0 //text format
25+
}, {
26+
name: 'comment',
27+
tableID: 1,
28+
attributeNumber: 3,
29+
dataTypeID: 25, //text
30+
typeModifer: 0,
31+
formatCode: 0 //text format
32+
}]);
33+
var row1 = buffers.dataRow(['1', 'Brian', 'Something groovy']);
34+
var row2 = buffers.dataRow(['2', 'Bob', 'Testint test']);
35+
var row3 = buffers.dataRow(['3', 'The amazing power of the everlasting gobstopper', 'okay now']);
36+
var parseCompleteBuffer = buffers.parseComplete();
37+
var bindCompleteBuffer = buffers.bindComplete();
38+
var portalSuspendedBuffer = buffers.portalSuspended();
39+
var complete = buffers.commandComplete('SELECT 3');
40+
var ready = buffers.readyForQuery();
41+
var buffer = Buffer.concat([parseCompleteBuffer,
42+
bindCompleteBuffer,
43+
rowDescription,
44+
row1,
45+
row2,
46+
row3,
47+
portalSuspendedBuffer,
48+
row1,
49+
row2,
50+
row3,
51+
portalSuspendedBuffer,
52+
row1,
53+
row2,
54+
row3,
55+
portalSuspendedBuffer,
56+
complete, ready]);
57+
58+
var bufferSlice = require('buffer-slice');
59+
var buffers = bufferSlice(10, buffer);
60+
61+
client.connect(assert.calls(function() {
62+
client.connection.emit('readyForQuery');
63+
module.exports = function() {
64+
return function(done) {
65+
client.query('SELECT * FROM whatever WHERE this = "doesnt even matter"', ['whatever'], function(err, res) {
66+
assert.equal(res.rows.length, 9);
67+
done();
68+
});
69+
buffers.forEach(stream.emit.bind(stream, 'data'));
70+
};
71+
};
72+
}));
73+
client.connection.emit('readyForQuery');

benchmark/simple-query-parsing.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
var Client = require(__dirname + '/../lib/client');
2+
var buffers = require(__dirname + '/../test/test-buffers');
3+
require(__dirname + '/../test/unit/test-helper');
4+
5+
var stream = new MemoryStream();
6+
stream.readyState = 'open';
7+
var client = new Client({
8+
stream: stream
9+
});
10+
11+
var rowDescription = new buffers.rowDescription([{
12+
name: 'id',
13+
tableID: 1,
14+
attributeNumber: 1,
15+
dataTypeID: 23, //int4
16+
typeModifer: 0,
17+
formatCode: 0
18+
},{
19+
name: 'name',
20+
tableID: 1,
21+
attributeNumber: 2,
22+
dataTypeID: 25, //text
23+
typeModifer: 0,
24+
formatCode: 0 //text format
25+
}, {
26+
name: 'comment',
27+
tableID: 1,
28+
attributeNumber: 3,
29+
dataTypeID: 25, //text
30+
typeModifer: 0,
31+
formatCode: 0 //text format
32+
}]);
33+
var row1 = buffers.dataRow(['1', 'Brian', 'Something groovy']);
34+
var row2 = buffers.dataRow(['2', 'Bob', 'Testint test']);
35+
var row3 = buffers.dataRow(['3', 'The amazing power of the everlasting gobstopper', 'okay now']);
36+
var complete = buffers.commandComplete('SELECT 3');
37+
var ready = buffers.readyForQuery();
38+
var buffer = Buffer.concat([
39+
rowDescription,
40+
row1, row2, row3,
41+
row1, row2, row3,
42+
row1, row2, row3,
43+
complete, ready]);
44+
var bufferSlice = require('buffer-slice');
45+
buffers = bufferSlice(10, buffer);
46+
47+
client.connect(assert.calls(function() {
48+
client.connection.emit('readyForQuery');
49+
module.exports = function() {
50+
return function(done) {
51+
client.query('SELECT * FROM whatever WHERE this = "doesnt even matter"', function(err, res) {
52+
assert.equal(res.rows.length, 9);
53+
done();
54+
});
55+
buffers.forEach(stream.emit.bind(stream, 'data'));
56+
};
57+
};
58+
}));
59+
client.connection.emit('readyForQuery');

0 commit comments

Comments
 (0)