基于NodeJS的sqlite3插入性能测试
我的机器上有两块存储一块是固态硬盘一块是机械硬盘,为了更好的反映实际的使用环境,程序运行选择的是使用机械硬盘。操作系统是装在固态硬盘上面。
测试环境及运行版本:
- 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();
推荐阅读
- 《断舍离》|《断舍离》| 这样做的目的才不是为了整理房间
- 听倦
- 开发日记(04) - iconfont 挂了,项目内的图标怎么办()
- HNOI2009|HNOI2009 有趣的数列
- 勇敢自信的金发美女-泰勒·斯威夫特
- 第032章|第032章 张秋燕的嫉妒
- 今天,你的孩子上小班了吗()
- 发呆
- 惊才绝艳的大画家梵高,到底是为了什么要割掉自己的耳朵呢2019-03-03
- 投稿|马斯克的“灵魂永生”:一半炒作,一半忽悠