Skip to content

Commit c55fa43

Browse files
author
Joshua Wise
committed
rewrote benchmarks
1 parent e7a274d commit c55fa43

File tree

71 files changed

+485
-419
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+485
-419
lines changed

benchmark/concurrency-trial.js

Lines changed: 0 additions & 85 deletions
This file was deleted.

benchmark/fill-table.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,30 @@
11
'use strict';
2+
var OurDatabase = require('../.');
23

34
module.exports = function (db, count, SQL, values, callback) {
4-
if (db.pragma) {
5-
var run = function (values, cb) {
6-
cb(null, db.prepare(SQL).run(values));
7-
};
8-
} else {
9-
var run = function (values, cb) {
10-
db.run(SQL, values, cb);
11-
};
5+
if (db instanceof OurDatabase) {
6+
db.transaction(new Array(count).fill(SQL)).run(values);
7+
callback();
8+
return;
129
}
1310

14-
var ranCount = 0;
15-
for (var i=0; i<count; ++i) {
16-
run(values, ran);
11+
// node-sqlite3 requires the "@" character for named parameters.
12+
var obj = {};
13+
for (var key in values) {
14+
obj['@' + key] = values[key];
1715
}
18-
function ran(err) {
19-
if (err) {
20-
console.log('Error: Failed to fill table.');
16+
17+
var checkForError = function (err) {
18+
if (err) {throw err;}
19+
};
20+
db.serialize(function () {
21+
db.run('BEGIN TRANSACTION;', checkForError);
22+
for (var i=0; i<count; ++i) {
23+
db.run(SQL, obj, checkForError);
2124
}
22-
if (++ranCount === count) {
25+
db.run('COMMIT TRANSACTION;', function (err) {
26+
checkForError(err);
2327
callback();
24-
}
25-
}
28+
});
29+
});
2630
};

benchmark/get-db2.js

Lines changed: 0 additions & 27 deletions
This file was deleted.

benchmark/index.js

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,47 @@ console.log('Generating tables...');
2323

2424
var createdCount = 0;
2525
function created() {
26-
if (++createdCount === 2) {
26+
if (++createdCount === 8) {
2727
console.log(clc.magenta('--- Benchmarks ---'));
2828
next();
2929
}
3030
}
3131

32-
require('./create-table')('CREATE TABLE entries (aaaa TEXT, bbbb INTEGER, cccc FLOAT, dddd TEXT, eeee INTEGER, ffff BLOB)', 'select-db', function (ourDb, theirDb) {
33-
var values = [
34-
'John Smith',
35-
524,
36-
0.324176234,
37-
'New York City',
38-
20,
39-
Buffer.alloc(1024 * 1024).fill(0xdd)
40-
];
32+
require('./create-table')('CREATE TABLE entries (text TEXT, integer INTEGER, real REAL, blob BLOB, nul)', 'select-small', fillSmallDataTable);
33+
require('./create-table')('CREATE TABLE entries (text TEXT, blob BLOB)', 'select-large', function (ourDb, theirDb) {
34+
var bigString = '';
35+
while (bigString.length < 1024 * 1024) {
36+
bigString += 'John Peter Smith';
37+
}
38+
var values = {
39+
a: bigString,
40+
b: Buffer.alloc(1024 * 1024).fill(0xdd)
41+
};
4142
var filledCount = 0;
4243
function filled() {++filledCount === 2 && created();}
43-
require('./fill-table')(ourDb, 1000, 'INSERT INTO entries VALUES (?, ?, ?, ?, ?, ?)', values, filled);
44-
require('./fill-table')(theirDb, 1000, 'INSERT INTO entries VALUES (?, ?, ?, ?, ?, ?)', values, filled);
44+
require('./fill-table')(ourDb, 1000, 'INSERT INTO entries VALUES (@a, @b)', values, filled);
45+
require('./fill-table')(theirDb, 1000, 'INSERT INTO entries VALUES (@a, @b)', values, filled);
4546
});
46-
require('./create-table')('CREATE TABLE entries (name TEXT, number INTEGER, data BLOB)', 'insert-db', function (ourDb, theirDb) {
47-
var values = [
48-
'John Smith',
49-
524,
50-
null
51-
];
47+
require('./create-table')('CREATE TABLE entries (data TEXT)', 'insert-text', created);
48+
require('./create-table')('CREATE TABLE entries (data INTEGER)', 'insert-integer', created);
49+
require('./create-table')('CREATE TABLE entries (data REAL)', 'insert-real', created);
50+
require('./create-table')('CREATE TABLE entries (data BLOB)', 'insert-blob', created);
51+
require('./create-table')('CREATE TABLE entries (data)', 'insert-null', created);
52+
require('./create-table')('CREATE TABLE entries (text TEXT, integer INTEGER, real REAL, blob BLOB, nul)', 'real-world', fillSmallDataTable);
53+
54+
function fillSmallDataTable(ourDb, theirDb) {
55+
var values = {
56+
a: 'John Peter Smith',
57+
b: 12345,
58+
c: 0.12345,
59+
d: Buffer.alloc(16).fill(0xdd),
60+
e: null
61+
};
5262
var filledCount = 0;
5363
function filled() {++filledCount === 2 && created();}
54-
require('./fill-table')(ourDb, 1000, 'INSERT INTO entries VALUES (?, ?, ?)', values, filled);
55-
require('./fill-table')(theirDb, 1000, 'INSERT INTO entries VALUES (?, ?, ?)', values, filled);
56-
});
64+
require('./fill-table')(ourDb, 1000, 'INSERT INTO entries VALUES (@a, @b, @c, @d, @e)', values, filled);
65+
require('./fill-table')(theirDb, 1000, 'INSERT INTO entries VALUES (@a, @b, @c, @d, @e)', values, filled);
66+
}
5767

5868
function next() {
5969
if (!trials.length) {
@@ -66,5 +76,10 @@ function next() {
6676

6777
console.log(clc.cyan(trialName));
6878
var child = spawn('node', ['--expose-gc', path.join(__dirname, 'trials', trialName)], {stdio: 'inherit'});
69-
child.on('exit', function () {setTimeout(next, 100);});
79+
child.on('exit', function (code) {
80+
if (code !== 0) {
81+
console.log(clc.red('ERROR (code ' + code + '), probably out of memory'));
82+
}
83+
setTimeout(next, 100);
84+
});
7085
}

benchmark/select-all-trial.js

Lines changed: 0 additions & 65 deletions
This file was deleted.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict';
2-
require('../get-db')('select-db', function (ourDb, theirDb) {
2+
require('../get-db')('real-world', function (ourDb, theirDb) {
33
ourDb.pragma('journal_mode = DELETE');
44
ourDb.pragma('synchronous = 2');
55
theirDb.exec('PRAGMA journal_mode = DELETE; PRAGMA synchronous = 2;', function () {
6-
require('../select-each-trial')(ourDb, theirDb, 1, false);
6+
require('../types/real-world')(ourDb, theirDb, 1000, 10);
77
});
88
});
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
'use strict';
2-
require('../get-db')('insert-db', function (ourDb, theirDb) {
2+
require('../get-db')('real-world', function (ourDb, theirDb) {
33
ourDb.pragma('journal_mode = WAL');
44
ourDb.pragma('synchronous = 1');
55
theirDb.exec('PRAGMA journal_mode = WAL; PRAGMA synchronous = 1;', function () {
6-
require('../dual-trial')(ourDb, theirDb, 10000, 10);
6+
require('../types/real-world')(ourDb, theirDb, 10000, 10);
77
});
88
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
require('../get-db')('select-small', function (ourDb, theirDb) {
3+
require('../types/select')(ourDb, theirDb, 10000, 'integer');
4+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
require('../get-db')('select-small', function (ourDb, theirDb) {
3+
require('../types/select')(ourDb, theirDb, 10000, 'real');
4+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
require('../get-db')('select-small', function (ourDb, theirDb) {
3+
require('../types/select')(ourDb, theirDb, 10000, 'nul');
4+
});

0 commit comments

Comments
 (0)