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

概述

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

单一连接模式:

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

连接池模式:

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

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

单一连接模式:

javascript 复制代码
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;

连接池模式:

javascript 复制代码
// 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保持连接活跃
相关推荐
小码哥_常2 分钟前
Kotlin抽象类与接口:相爱相杀的编程“CP”
前端
evelynlab2 分钟前
Tapable学习
前端
None32115 分钟前
【NestJs】基于Redlock装饰器分布式锁设计与实现
后端·node.js
LeeYaMaster16 分钟前
15个例子熟练异步框架 Zone.js
前端·angular.js
evelynlab19 分钟前
打包原理
前端
拳打南山敬老院1 小时前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
赵渝强老师1 小时前
【赵渝强老师】PostgreSQL中表的碎片
数据库·postgresql
用户3076752811271 小时前
💡 从"傻等"到"流淌":我在AI项目中实现流式输出的血泪史(附真实代码+深度解析)
前端
bluceli1 小时前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
SuperEugene1 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试