はじめに
Node.jsでsqlite3を扱うのにいろいろなライブラリがありますが、
最近better-sqlite3という速度を売りにしたライブラリがあったのでベンチマークしてみました。
AWS Lambda上で実行したのでコンテナ起動の時間などももしかしたらかかっているかもしれません。
デプロイ後、AWSのウェブのコンソール上で実行し、出力されたDurationで計測しています。
検証環境
AWS Lambda メモリ128MB
- Node.js 4.3.2
- npm
- aws-sdk 2.6.3
- sqlite3 3.1.8
- better-sqlite3 1.3.9
ベンチマーク結果
簡単なselect文でレコード数が16件だったためかほとんど差がありませんでした。
メモリの使用量はsqlite3が21MB、better-sqlite3が17MBでした。
回数 | sqlite3(ms) | better-sqlite3(ms) |
---|---|---|
1 | 16.88 | 1.60 |
2 | 1.36 | 23.09 |
3 | 38.54 | 4.72 |
4 | 21.39 | 26.52 |
5 | 9.88 | 2.29 |
6 | 13.80 | 1.15 |
7 | 1.33 | 21.16 |
8 | 21.48 | 17.20 |
9 | 12.05 | 5.98 |
10 | 7.17 | 1.16 |
平均 | 14.388 | 10.487 |
80パーセンタイル | 21.408 | 21.546 |
90パーセンタイル | 23.186 | 23.433 |
sqlite3
'use strict';
var sqlite3 = require('sqlite3')
;
exports.exec = function (callback) {
var db = new sqlite3.Database('data/test.db', sqlite3.OPEN_READONLY)
;
db.each('select id, name from master', function (error, row) {
console.log(row.id);
console.log(row.name);
});
db.close(callback);
}
better-sqlite3
'use strict';
var Database = require('better-sqlite3')
;
exports.exec = function (callback) {
var db = new Database('data/test.db')
;
db.on('open', function () {
var statement = db.prepare('select id, name from master');
statement.each(function (row) {
console.log(row.id);
console.log(row.name);
});
db.close();
});
db.on('close', function () {
callback();
});
}