Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

关于mysql数据库连接池的一个疑问,求在开发环境中使用过node连接mysql数据库的大神赐教

$
0
0

目前使用node读取mysql中的数据,每次读取的时候都会pool.getConnection创建一个连接读取完数据再关闭下一次再重新打开, 问了下公司的后台不是写node的,说是要创建一个全局变量存储一个连接,每次操作直接用这个,如果连接失效了才会重新连接 求教下node下使用连接池的正确方式

//目前的代码是这样的
const mysql = require('promise-mysql');
const config = require('./config');


const pool = mysql.createPool({
    host: config.host,
    user: config.user,
    password: config.password,
    database: config.database,
    connectionLimit: 10
});
//这是之前使用的方式每次创建一个连接使用完关闭
function getDataFromSqlQuery(sql) {
    return new Promise((resolve, reject) => {
        pool.getConnection().then((connection) => {
            connection.query(sql).then(function (res) {
                resolve(res);
                pool.releaseConnection(connection);
                return;
            }).catch(err => {
                reject(err);
            });
        })
    });
}
//刚才尝试了下想直接把connection导出使用await函数接受,可还是做不到全局赋值只能在async函数中使用,使用完毕再关闭
function getConnection(sql) {
    return new Promise((resolve, reject) => {
        pool.getConnection().then((connection) => {
            resolve(connection);
        }).catch(err=>{
            reject(err);
        })
    });
}

module.exports = {
    pool : pool,
    getConnection : getConnection,
	getData:getDataFromSqlQuery
};

//调用
const sql = require('../modules/sql-connection.js');
router.post('/test', async function (next) {
    let start = new Date();

    let res = await sql.getData('select * from unsafeip limit 1');

    console.log(`${new Date() - start} ms`);

    this.body = res;
});


//测试服务器 阿里云北京服务器单核1G内存 坐标上海

//用for循环调用了下 不存在失败的情况
for (let i = 0, len = 10000; i < len; i++) {
    (async function (i,start) {
        try {
            let res = await getDataFromSqlQuery('select * from unsafeip limit 1');
            console.log(`${i} : ${new Date() - start} ms`);
        }catch (e){
            console.log(e);
            console.log(`第${i}次请求失败`);
        }
    })(i+1,new Date())
}
//1000次的结果  :  6269 ms
/**最终结果 9991 : 63803 ms
9993 : 63803 ms
9996 : 63812 ms
9997 : 63838 ms
9998 : 63842 ms
9999 : 63849 ms
10000 : 63856 ms
*/

//创建一个连接一直用同一个
(async function () {
    let connection =await getConnection();
    for (let i = 0, len = 1000; i < len; i++) {
        (async function (i,start) {
            try {
                let res = await connection.query('select * from unsafeip limit 1');
                console.log(`${i} : ${new Date() - start} ms`);
            }catch (e){
                console.log(e);
                console.log(`第${i}次请求失败`);
            }

        })(i,new Date())

    }
})();
//  结果 999 : 30301 ms 


//结果发现每次打开关闭比一直使用一个连接连接速度更快  不纠结这个问题了



Viewing all articles
Browse latest Browse all 14821

Trending Articles