/
large-datatset-bench.js
125 lines (116 loc) · 3.35 KB
/
large-datatset-bench.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var pg = require(__dirname + '/../lib')
var bencher = require('bencher');
var helper = require(__dirname + '/../test/test-helper')
var conString = helper.connectionString()
var round = function(num) {
return Math.round((num*1000))/1000
}
var doBenchmark = function(cb) {
var bench = bencher({
name: 'select large sets',
repeat: 10,
actions: [{
name: 'selecting string',
run: function(next) {
var query = client.query('SELECT name FROM items');
query.on('error', function(er) {
console.log(er);throw er;
});
query.on('end', function() {
next();
});
}
}, {
name: 'selecting integer',
run: function(next) {
var query = client.query('SELECT count FROM items');
query.on('error', function(er) {
console.log(er);throw er;
});
query.on('end', function() {
next();
})
}
}, {
name: 'selecting date',
run: function(next) {
var query = client.query('SELECT created FROM items');
query.on('error', function(er) {
console.log(er);throw er;
});
query.on('end', function() {
next();
})
}
}, {
name: 'selecting row',
run: function(next) {
var query = client.query('SELECT * FROM items');
query.on('end', function() {
next();
})
}
}, {
name: 'loading all rows into memory',
run: function(next) {
var query = client.query('SELECT * FROM items', next);
}
}]
});
bench(function(result) {
console.log();
console.log("%s (%d repeats):", result.name, result.repeat)
result.actions.forEach(function(action) {
console.log(" %s: \n average: %d ms\n total: %d ms", action.name, round(action.meanTime), round(action.totalTime));
})
client.end();
cb();
})
}
var client = new pg.Client(conString);
client.connect();
console.log();
console.log("creating temp table");
client.query("CREATE TEMP TABLE items(name VARCHAR(10), created TIMESTAMPTZ, count INTEGER)");
var count = 10000;
console.log("inserting %d rows", count);
for(var i = 0; i < count; i++) {
var query = {
name: 'insert',
text: "INSERT INTO items(name, created, count) VALUES($1, $2, $3)",
values: ["item"+i, new Date(2010, 01, 01, i, 0, 0), i]
};
client.query(query);
}
client.once('drain', function() {
console.log('done with insert. executing pure-javascript benchmark.');
doBenchmark(function() {
var oldclient = client;
client = new pg.native.Client(conString);
client.on('error', function(err) {
console.log(err);
throw err;
});
client.connect();
client.connect();
console.log();
console.log("creating temp table");
client.query("CREATE TEMP TABLE items(name VARCHAR(10), created TIMESTAMPTZ, count INTEGER)");
var count = 10000;
console.log("inserting %d rows", count);
for(var i = 0; i < count; i++) {
var query = {
name: 'insert',
text: "INSERT INTO items(name, created, count) VALUES($1, $2, $3)",
values: ["item"+i, new Date(2010, 01, 01, i, 0, 0), i]
};
client.query(query);
}
client.once('drain', function() {
console.log("executing native benchmark");
doBenchmark(function() {
console.log("all done");
})
})
});
});