基于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


安裝
npm install node-pre-gyp nan
cnpm install sqlite3

測試結果:

  1. 單條數據插入
    在350毫秒
  2. 批量插入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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容