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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 前篇 【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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
7月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
660 140
|
5月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
6月前
|
存储 关系型数据库 MySQL
MYSQL数据加密压缩函数应用实战指南。
总的来说,加密和压缩是维护MySQL数据库中数据安全性和效率的有效手段。使用时需权衡性能与安全,合理应用加密和压缩函数。在设计数据库架构时要考虑到加密字段的查询性能,因为加密可能使得一些索引失效。压缩数据能有效减少存储空间的占用,但在服务器负载较高时应避免实时压缩和解压,以免影响总体性能。
218 10
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
623 0
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
3050 0
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
566 1
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
390 2
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
613 1

推荐镜像

更多