我的機(jī)器上有兩塊存儲(chǔ)一塊是固態(tài)硬盤一塊是機(jī)械硬盤,為了更好的反映實(shí)際的使用環(huán)境灭袁,程序運(yùn)行選擇的是使用機(jī)械硬盤歧沪。操作系統(tǒng)是裝在固態(tài)硬盤上面歼秽。
測(cè)試環(huán)境及運(yùn)行版本:
- NodeJS的運(yùn)行版本:v4.6.0
$ node -v
v4.6.0
- sqlite3使用的版本:version 3.1.8
sqlite3模塊的網(wǎng)址:https://www.npmjs.com/package/sqlite3
github網(wǎng)址:https://github.com/mapbox/node-sqlite3
Asynchronous, non-blocking SQLite3 bindings
安裝
npm install node-pre-gyp nan
cnpm install sqlite3
測(cè)試結(jié)果:
- 單條數(shù)據(jù)插入
在350毫秒 - 批量插入100條數(shù)據(jù)
使用prepare插入100條數(shù)據(jù)所需要的時(shí)間是8980毫秒;
使用run插入100條數(shù)據(jù)所需要的時(shí)間是9027毫秒;
目前的版本不支持事務(wù)處理腌零,插入1000條數(shù)據(jù)會(huì)在一分鐘以上梯找。
最后上測(cè)試代碼:
var fs = require('fs');
var path = require('path');
var sqlite3 = require('sqlite3').verbose();
var strtxt = "這款sqlite的驅(qū)動(dòng)太符合node的核心思想了,經(jīng)過與其他模塊的比較益涧,最終還是選擇了這款這款sqlite的驅(qū)動(dòng)太符合node的核心思想了锈锤,經(jīng)過與其他模塊的比較,最終還是選擇了這款這款sqlite的驅(qū)動(dòng)太符合node的核心思想了闲询,經(jīng)過與其他模塊的比較牙咏,最終還是選擇了這款這款sqlite的驅(qū)動(dòng)太符合node的核心思想了,經(jīng)過與其他模塊的比較嘹裂,最終還是選擇了這款這款sqlite的驅(qū)動(dòng)太符合node的核心思想了,經(jīng)過與其他模塊的比較摔握,最終還是選擇了這款這款sqlite的驅(qū)動(dòng)太符合node的核心思想了寄狼,經(jīng)過與其他模塊的比較,最終還是選擇了這款經(jīng)過與其他模塊的比較氨淌,最終還是選擇了這款最終還是選擇了這款最";
//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();