版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bob_baobao/article/details/82260541
引言
从事 Node 开发 web 服务也有一段时间了, 数据库用的是 mysql, 每次执行数据库操作流程如下:创建一个连接, 执行 sql 语句, 然后关闭连接。 当用户量不大,并发请求数不多的时候, 一切都是正常的运转。 当写一个爬虫功能时候,同时执行2000+入库操作时, 系统报错,提示超时了。 意识到问题的重要性后,努力学习了一番, 在此, 分享并记录数据库连接池相关知识。
安装 mysql
npm install mysql
如何使用单次连接
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
如何使用连接池
const mysql = require('mysql');
// 连接池配置
const dbPoolConfig = {
host: config.dbHost,
user: config.dbUser,
password: config.dbPWD,
port: config.dbPort,
database: config.dbName,
connectionLimit: 200
};
// 创建连接池
const pool = mysql.createPool(dbPoolConfig);
const imp = {};
// 连接池
imp.query = function(sql, para) {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
return reject(err)
}
if (para) {
connection.query(sql, para, (err, rows) => {
connection.release();
if (err) {
return reject(err);
}
return resolve(rows);
});
} else {
connection.query(sql, (err, rows) => {
connection.release();
if (err) {
return reject(err);
}
return resolve(rows);
});
}
});
});
}
module.exports = imp;
高并发测试两种连接方式
单次连接,最大并发请求约1000, 耗时12s
连接池, 最大并发请求约20000, 耗时约10s
查看 mysql 数据库连接数配置信息
https://blog.csdn.net/caodongfang126/article/details/52764213/
结束语
晚点补充完