当前位置: 首页 > ds >正文

Nodejs数据库单一连接模式和连接池模式的概述及写法

概述

单一连接模式和连接池模式是数据库连接的两种主要方式:

单一连接模式:

  • 优点:实现简单,适合小型应用
  • 缺点:每次请求都需要创建新连接,连接创建和销毁开销大,并发性能差,容易出现连接泄露

连接池模式:

  • 优点:预先创建多个连接并复用,减少连接创建和销毁的开销,提高并发性能,自动管理连接生命周期
  • 缺点:需要额外的内存维护连接池,配置相对复杂
    在生产环境中,特别是并发请求较多的情况下,强烈建议使用连接池模式,可以显著提升应用性能和稳定性。

下面是这两种不同模式的写法

单一连接模式:

const mysql = require('mysql2');const db = mysql.createConnection({host: process.env.DB_HOST,user: process.env.DB_USER,password: process.env.DB_PASSWORD,database: process.env.DB_NAME
});db.connect((err) => {if (err) {console.error('数据库连接失败:', err);return;}console.log('成功连接到数据库');
});module.exports = db;

连接池模式:

// config/db.js
const mysql = require('mysql2');const pool = mysql.createPool({host: process.env.DB_HOST,user: process.env.DB_USER,password: process.env.DB_PASSWORD,database: process.env.DB_NAME,waitForConnections: true,connectionLimit: 10,queueLimit: 0,enableKeepAlive: true,keepAliveInitialDelay: 0
});// 测试连接池
pool.getConnection((err, connection) => {if (err) {console.error('数据库连接池初始化失败:', err);return;}console.log('数据库连接池初始化成功');connection.release();
});// 优雅关闭连接池
process.on('SIGINT', () => {pool.end(err => {if (err) {console.error('关闭连接池时发生错误:', err);} else {console.log('数据库连接池已关闭');}process.exit(err ? 1 : 0);});
});module.exports = pool.promise();

配置参数:

  • 最大连接数限制为10
  • 启用连接等待机制
  • 开启keepAlive保持连接活跃
http://www.xdnf.cn/news/429.html

相关文章:

  • 2024-04-19| Java: Documented注解学习 JavaDoc
  • 【网络篇】TCP vs UDP底层区别+网络编程概念
  • 网络爬虫和前端相关知识
  • 根据Exif信息纠正图片方向
  • MYSQL初阶(暂为自用草稿)
  • 哔哩哔哩工具箱:BiliTools v1.3.2
  • PyTorch数据操作基础教程:从张量创建到高级运算
  • 2563.统计公平数对的数目 是否顺序无关?
  • 【java实现+4种变体完整例子】排序算法中【希尔排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • Java 内存优化:如何避免内存泄漏?
  • 系分架构论文《论高并发场景的架构设计和开发方法》
  • REST 架构详解:从概念到应用的全面剖析
  • Vue3 + Three.js 场景编辑器开发实践
  • jangow靶机笔记(Vulnhub)
  • LeetCode 1365. 有多少小于当前数字的数字 java题解
  • phpy通用扩展:让PHP和Python手拉手
  • 基于SFC的windows修复程序,修复绝大部分系统损坏
  • 如何0基础学stm32?
  • 【操作系统原理01】操作系统引论
  • vue生命周期
  • 安徽合肥京东自营代运营如何突围?
  • 【网络技术_域名解析DNS】三、DNS 中间件实践应用与优化策略
  • Docker Swarm 容器与普通 Docker 容器的网卡差异
  • RTMP握手流程
  • 18、TimeDiff论文笔记
  • 用usb网卡 虚拟机无法开到全双工的解决办法
  • CUDA编程中影响正确性的小细节总结
  • mysql的函数(第一期)
  • [每周一更]-(第140期):sync.Pool 使用详解:性能优化的利器
  • 【漫话机器学习系列】211.驻点(Stationary Points)