nodejs sqlite3 insert函數性能測試。
var fs = require('fs');
var path = require('path');
var sqlite3 = require('sqlite3').verbose();
var strtxt = "www.jshaman.com";
//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();
測試結果:
單條資料插入350毫秒。
批量插入100條資料
使用prepare插入100條資料所需要的時間是8980毫秒;
使用run插入100條資料所需要的時間是9027毫秒;
未使用事務處理,插入1000條資料會在一分鐘以上(使用事務會提升性能很多)。
nodejs源碼加密,用JShaman!