node+mysql,實現基本的增刪改查,附帶跟蹤記錄和運行時間記錄

 

Node + mysql 實現基礎的增刪改查,以及性能測試。node

 

網上有不少這樣的例子,我也是找來學習的。mysql

感受node對mysql的操做很是簡單,也很實用,好比自帶防止sql注入的功能,一開始還擔憂注入漏洞呢,後來發現徹底不必。sql

返回的記錄集直接就是json格式,都不用轉換,直接就能夠用。也不用事先定義實體類。很是方便。數據庫

 

基本步驟:json

一、  建立mysql對象c#

二、  設置鏈接字符串緩存

三、  createConnection性能

四、  寫sql語句和參數值學習

五、  先connection.connect(),而後再connection.query()就搞定了。測試

六、  connection.end()

七、  最後等待返回結果

 

基礎代碼就不貼了,百度一下有不少,後面有修改後的代碼。

 

不用區分增刪改查,反正都是這個套路,只要改改sql語句和參數就能夠了。比ado.net簡單和方便多了。

 

而後就是對性能的瞭解,每一個步驟都花了多長時間?有沒有坑,會不會出現浪費性能的寫法?

 

首先在node裏面使用require()加載的對象,都會進入緩存,下次再使用速度就快了,由於會從緩存裏直接提取。

而後要看看其餘幾個寫法的性能,最後看看數據庫操做的速度。

 

上一篇寫了一個精確取時間的,就是爲了這裏的測試性能,也就是每一個語句的執行時間。

 

爲了更好的記錄運行過程和時間,定義一個簡單的類來記錄

var msg={
    title:'增刪改查的演示',
    startTime:t1,
    endTime:0,
    items:[]
};

 

每一個步驟均可以push到items裏面。這樣程序執行步驟和時間就能夠準確的記錄下來了。

 完整代碼以下: 

/**
 * Created by jyk00 on 2019/3/29.
 * mysql的測試
 */

var time = require('../preciseTime').time;

var num= 4;

//開始運行時間
var t1 = time();

//跟蹤記錄
var msg={
    title:'增刪改查的演示',
    startTime:t1,
    endTime:0,
    items:[]
};

var t2 = time();
var mysql  = require('mysql');
var t3 =  time();

msg.items.push({
    title:'建立mysql對象用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});

t2 = time();
var mysql2 = require('mysql');
t3 =  time();

msg.items.push({
    title:'再次建立mysql對象用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});


t2 = time();
var cnString = require('../sqlConnection.json');
t3 =  time();

msg.items.push({
    title:'獲取cnString用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});

var connection ;

//====================  添加數據
setConnect('第一次');

t2 = time();
var  userAddSql = 'INSERT INTO node_user(id,name,age) VALUES(0,?,?)';
var  userAddSql_Params = ["張灑 ' -- " , 55];

//增 add
connection.query(userAddSql,userAddSql_Params,function (err, result) {
    if(err){
        console.log('[INSERT ERROR ] 注入 - ',err.message);
        return;
    }
    logCallback('添加數據完成用時',tadd1);

});

connection.end();

t3 =  time();
var tadd1 = time();  //記錄開始開始添加數據時間

msg.items.push({
    title:'調用添加用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});

//=======================  修改數據
setConnect('第二次');

t2 = time();
var userModSql = 'UPDATE node_user SET name = ?,age = ? WHERE id = ?';
var userModSql_Params = ['Hello World',99,7];
//改 up
connection.query(userModSql,userModSql_Params,function (err, result) {
    if(err){
        console.log('[UPDATE ERROR] - ',err.message);
        return;
    }
    logCallback('修改數據用時',tupdate1,result);

});

connection.end();

t3 =  time();
var tupdate1 = time();  //記錄開始開始添加數據時間

msg.items.push({
    title:'調用修改用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});

//========================= 查詢數據
setConnect('第三次');

t2 = time();
var  userGetSql = 'SELECT * FROM node_user where id <5';
//查 query
connection.query(userGetSql,function (err, result) {
    if(err){
        console.log('[SELECT ERROR] - ',err.message);
        return;
    }
    logCallback('查詢數據用時',tselect1,result);

});

connection.end();

var tselect1 = time();//記錄開始查詢時間

t3 =  time();

msg.items.push({
    title:'調用查詢用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});

//====================== 刪除數據
setConnect('第四次');

t2 = time();
var  userDelSql = 'DELETE FROM node_user WHERE id = 7';
connection.query(userDelSql,function (err, result) {
    if(err){
        console.log('[DELETE ERROR] - ',err.message);
        return;
    }
    logCallback('刪除數據用時',tdel1,result);
});

connection.end();

var tdel1 = time();

msg.items.push({
    title:'調用刪除用時:' + (t3-t2),
    startTime:t2,
    endTime:t3,
    items:[]
});


//外部調用執行完畢用時
t3 =  time();
msg.items.push({
    title:'外部調用執行完畢用時:' + (t3-t1),
    startTime:t1,
    endTime:t3,
    items:[]
});

//設置信息,開始鏈接
function setConnect(title){
    t2 = time();
    connection = mysql.createConnection(cnString);
    t3 =  time();

    msg.items.push({
        title:title + '建立connection對象用時:' + (t3-t2),
        startTime:t2,
        endTime:t3,
        items:[]
    });

    t2 = time();
    connection.connect();
    t3 =  time();

    msg.items.push({
        title:title + 'connect用時:' + (t3-t2),
        startTime:t2,
        endTime:t3,
        items:[]
    });
}

//記錄回調
function logCallback(title,tstart,result){
    var tend = time();
    msg.items.push({
        title:title  + (tend-tstart) + '_' ,
        startTime:tstart,
        endTime:tend,
        items:[]
    });
    num--;
    if (num == 0){
        msg.items.push({
            title:'最後回調' + (tend - t1),
            startTime:t1,
            endTime:tend,
            items:[]
        });
        console.log(JSON.stringify(msg));
    }
}

 

運行後跟蹤記錄以下:json格式,便於查看。

{
    "title": "增刪改查的演示",
    "startTime": 2542410048.328554,
    "endTime": 0,
    "items": [
        {
            "title": "建立mysql對象用時:2.3957343101501465",
            "startTime": 2542410048.366954,
            "endTime": 2542410050.762688,
            "items": []
        },
        {
            "title": "獲取cnString用時:0.6924800872802734",
            "startTime": 2542410050.788715,
            "endTime": 2542410051.481195,
            "items": []
        },
        {
            "title": "第一次建立connection對象用時:112.34650135040283",
            "startTime": 2542410051.662955,
            "endTime": 2542410164.009456,
            "items": []
        },
        {
            "title": "第一次connect用時:3.8489623069763184",
            "startTime": 2542410164.022256,
            "endTime": 2542410167.871218,
            "items": []
        },
        {
            "title": "調用添加用時:1.268907070159912",
            "startTime": 2542410167.893405,
            "endTime": 2542410169.162312,
            "items": []
        },
        {
            "title": "第二次建立connection對象用時:0.16170692443847656",
            "startTime": 2542410169.179378,
            "endTime": 2542410169.341085,
            "items": []
        },
        {
            "title": "第二次connect用時:0.7057070732116699",
            "startTime": 2542410169.347059,
            "endTime": 2542410170.052766,
            "items": []
        },
        {
            "title": "調用修改用時:0.18773317337036133",
            "startTime": 2542410170.069406,
            "endTime": 2542410170.257139,
            "items": []
        },
        {
            "title": "第三次建立connection對象用時 :0.0669870376586914",
            "startTime": 2542410170.268659,
            "endTime": 2542410170.335646,
            "items": []
        },
        {
            "title": "第三次connect用時 :0.12415933609008789",
            "startTime": 2542410170.338206,
            "endTime": 2542410170.462365,
            "items": []
        },
        {
            "title": "調用查詢用時:0.059305667877197266",
            "startTime": 2542410170.467059,
            "endTime": 2542410170.526365,
            "items": []
        },
        {
            "title": "第四次建立connection 對象用時:1.0282669067382812",
            "startTime": 2542410170.534046,
            "endTime": 2542410171.562313,
            "items": []
        },
        {
            "title": "第四次connect用時:0.11946725845336914",
            "startTime": 2542410171.579806,
            "endTime": 2542410171.699273,
            "items": []
        },
        {
            "title": "調用刪除用時:-0.0038399696350097656",
            "startTime": 2542410171.703113,
            "endTime": 2542410171.699273,
            "items": []
        },
        {
            "title": "外部調用執行完畢用時:123.41466474533081",
            "startTime": 2542410048.328554,
            "endTime": 2542410171.743219,
            "items": []
        },
        {
            "title": "修改數據用時16.291846752166748_",
            "startTime": 2542410170.258419,
            "endTime": 2542410186.550266,
            "items": []
        },
        {
            "title": "查詢數據用時20.791049003601074_",
            "startTime": 2542410170.525512,
            "endTime": 2542410191.316561,
            "items": []
        },
        {
            "title": "添加數據完成用時23.376222610473633_",
            "startTime": 2542410169.165725,
            "endTime": 2542410192.541948,
            "items": []
        },
        {
            "title": "刪除數據用時21.536436080932617_",
            "startTime": 2542410171.734686,
            "endTime": 2542410193.271122,
            "items": []
        },
        {
            "title": "最後回調144.94256782531738",
            "startTime": 2542410048.328554,
            "endTime": 2542410193.271122,
            "items": []
        }
    ]
}

 

分析一下記錄能夠發現:

 

一、第一次 require('mysql') 有點慢,再次調用就快了不少,能夠證實確實是使用了緩存。

二、重點是 mysql.createConnection(cnString),第一次執行竟然須要100多號碼,不知道他都作了什麼,不過好在再次執行的時間就快了不少,只須要0.5毫秒左右,彷佛也是用了緩存。既然之後就快了,那麼就不用擔憂寫多了致使效率降低的問題了。

三、數據操做的執行時間,大概是20-50毫秒這個級別的,感受不是太快,和 c# + mssql的操做彷佛差很少。

四、回調執行的順序。一開始還覺得會按照發出申請的順序回調,結果徹底不是這樣。每次回調的順序竟然都不同。看來想要準確控制回調的話,不能這麼放羊的。

相關文章
相關標籤/搜索