基于NodeJS的sqlite3插入性能测试
2016-11-23 本文已影响191人
FanChengSheng
我的机器上有两块存储一块是固态硬盘一块是机械硬盘,为了更好的反映实际的使用环境,程序运行选择的是使用机械硬盘。操作系统是装在固态硬盘上面。
测试环境及运行版本:
- NodeJS的运行版本:v4.6.0
$ node -v
v4.6.0
- sqlite3使用的版本:version 3.1.8
sqlite3模块的网址:https://www.npmjs.com/package/sqlite3
github网址:https://github.com/mapbox/node-sqlite3
Asynchronous, non-blocking SQLite3 bindings
安装
npm install node-pre-gyp nan
cnpm install sqlite3
测试结果:
- 单条数据插入
在350毫秒 - 批量插入100条数据
使用prepare插入100条数据所需要的时间是8980毫秒;
使用run插入100条数据所需要的时间是9027毫秒;
目前的版本不支持事务处理,插入1000条数据会在一分钟以上。
最后上测试代码:
var fs = require('fs');
var path = require('path');
var sqlite3 = require('sqlite3').verbose();
var strtxt = "这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款这款sqlite的驱动太符合node的核心思想了,经过与其他模块的比较,最终还是选择了这款经过与其他模块的比较,最终还是选择了这款最终还是选择了这款最";
//new sqlite3.cached.Database() instead of new sqlite3.Database().
var db = new sqlite3.cached.Database('test.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, function(err) {
if (err) {
console.log('err:' + err);
} else {
console.log('success create database !');
}
});
db.serialize(function() {
db.run('CREATE TABLE IF NOT EXISTS node ( \
_id INTEGER PRIMARY KEY AUTOINCREMENT,\
node_id TEXT NOT NULL,\
parent_id TEXT,\
owner_id INTEGER,\
source_id TEXT,\
title TEXT,\
content TEXT,\
content_type INTEGER,\
node_version INTEGER,\
type INTEGER ,\
child_list TEXT,\
collapsed INTEGER,\
isShare INTEGER,\
isReference INTEGER\
);', function(err) {
if (err) {
console.log('create table node failed !');
} else {
console.log('create table node sucess !');
}
});
});
db.serialize(function() {
var start = new Date();
db.run("INSERT INTO node(node_id,title) VALUES (?,?);", ['123', strtxt], err => {
var end = new Date();
console.log('insert one record :', end.getTime() - start.getTime());
});
});
db.serialize(function() {
var start = new Date();
var stmt = db.prepare("INSERT INTO node(node_id,title) VALUES (?,?);");
for (var i = 0; i < 100; i++) {
stmt.run([i, strtxt + i]);
}
stmt.finalize(function(err) {
var end = new Date();
console.log('bulk insert 100 records :', end.getTime() - start.getTime());
});
});
db.serialize(function() {
var mysql = "";
for (var i = 0; i < 100; i++) {
mysql += "INSERT INTO node(node_id,title) VALUES (" + i + ",'" + strtxt + i + "');"
}
console.log(mysql);
var start = new Date();
db.run(mysql, [], err => {
var end = new Date();
console.log('bulk sql insert 100 records :', end.getTime() - start.getTime());
});
});
db.close();