开发者社区> 雷学委> 正文

NodeJS 后端开发 07 MySQL数据库连接池开发生产应用

简介: 前篇 【NodeJS 后端开发 06 连接MySQL 】简单尝试了mysql js库来连接数据库。
+关注继续查看

该文章分享的js代码不适用于生成环境使用。

在生产环境中,后端服务对数据库连接的管理都是通过一个 数据库连接池。

在接口需要获取数据库数据的时候,从池中取一个活跃连接,到数据库取完数据/执行数据变更操作后,释放连接并放回连接池。

image.png

上图所示,当业务线程处理数据时,使用连接;右边为业务处理结束,释放连接,放回连接池中。

这里分享一个连接池的JS代码

const mysql = require("mysql");
 
const port = 3306
 
//创建数据库连接池,连接到指定IP
const pool = mysql.createPool({
    host: 'localhost',
    port: port,
    user: 'root',
    password: '12345678',
    database: 'demo20210330',
    multipleStatements: true
});
 
// 定义sql执行函数
// 并允许用户输入连接执行成功的回调函数onSuccess,以及错误回调onError
const runSql = function(sql, onSuccess, onError) {
    pool.getConnection(function(err, conn) {
        if (err) {
            onError(err);
            return;
        }
        conn.query(sql, function(err, data) {
            try {
                if (err) {
                    onError(err);
                } else {
                    onSuccess(data);
                }
            } catch(err) {
                onError(err);
            } finally {
                console.log('release connection');
                conn.release();
            }
        });
    });
};
 
//查看池的状态
const showPool = function() {
    console.log('pool: ', pool);
};
 
module.exports.show = showPool;
module.exports.runSql = runSql;

这个工具JS库runSql函数中每次执行SQL,最后不管结果如何,总会在finally内释放链接,达到了连接自动回收的作用。


PS:上面的数据库配置密码过于简单,实际环境建议改复杂点(推荐:通过环境配置来解密数据库密码)。


保存代码为dbpool.js, 进入Node终端;然后输入以下代码并查看结果:


var pool = require('./dbpool')


pool.runSql("select * from company;", (e)=>console.log(e)


PS:下面的数据库在前一篇文章中提前创建好了


image.png

输入pool.show() 查看连接池状态, 比如连接信息,空闲的数据库连接等。

image.png

注意事项:连接池的连接不要手动去调用destroy(销毁连接)。


连接池的作用

因为销毁连接,当业务需要的时候调用数据库获取数据的时候,需要重新建立连接(TCP连接),这个过程开销是很大的。


相比之下,维持一个长连接省去很多建立重连TCP的时间。


起到了缓冲作用,而且所有数据库连接都会在缓存池里被统一管理。


上文是MySQL JS库自带的连接池,普通应用开发上面的足够,在Github上还有一个通用连接池项目:https://github.com/coopernurse/node-pool

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基因法与倒排索引在MySQL分库分表的应用
基于redis和mysql的倒排索引在分库分表的应用,追求极致性能
23 0
为什么我们需要向PolarDB for MySQL 8.0.2演进?【AI科技应用-每日问答】
为什么我们需要向PolarDB for MySQL 8.0.2演进?【AI科技应用-每日问答】
1190 0
MySQL与Hadoop数据同步方案:Sqoop与Flume的应用探究【上进小菜猪大数据系列】
MySQL与Hadoop数据同步方案:Sqoop与Flume的应用探究【上进小菜猪大数据系列】
50 0
猿创征文|MySQL基本查询语句的应用(有实例与代码)
猿创征文|MySQL基本查询语句的应用(有实例与代码)
52 0
【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
【MySQL高级】应用优化及Mysql中查询缓存优化以及Mysql内存管理及优化
63 0
一键安装java web环境打包集成,集成tomcat,mysql,jdk,java ,加上客户端cefpython,实现桌面web应用。
一键安装java web环境打包集成,集成tomcat,mysql,jdk,java ,加上客户端cefpython,实现桌面web应用。
81 0
数据库原理及MySQL应用 | 数据表操作
数据表操作是数据库操作中最基本和最重要的操作。
69302 0
数据库原理及MySQL应用 | 约束
约束是保证数据完整性的一种数据库对象,按约束作用不同,分为七种。
71 0
Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.
Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.
96 0
数据库原理及MySQL应用 | 日志管理
数据库系统管理维护阶段需要通过日志对数据库的性能进行监督、分析和改进。
49 0
+关注
雷学委
十年开发经验,欢迎关注【雷学委】微信公众号
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像