基于NodeJS的sqlite3插入性能测试

我的机器上有两块存储一块是固态硬盘一块是机械硬盘,为了更好的反映实际的使用环境,程序运行选择的是使用机械硬盘。操作系统是装在固态硬盘上面。
测试环境及运行版本:

  1. NodeJS的运行版本:v4.6.0
$ node -v v4.6.0

  1. sqlite3使用的版本:version 3.1.8
    sqlite3模块的网址:https://www.npmjs.com/package/sqlite3
    github网址:https://github.com/mapbox/node-sqlite3
Asynchronous, non-blocking SQLite3 bindings

基于NodeJS的sqlite3插入性能测试
文章图片

安装
npm install node-pre-gyp nan
cnpm install sqlite3
测试结果:
  1. 单条数据插入
    在350毫秒
  2. 批量插入100条数据
    使用prepare插入100条数据所需要的时间是8980毫秒;
    使用run插入100条数据所需要的时间是9027毫秒;
    目前的版本不支持事务处理,插入1000条数据会在一分钟以上。
【基于NodeJS的sqlite3插入性能测试】最后上测试代码:
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();

    推荐阅读