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保持连接活跃
相关推荐
娃哈哈哈哈呀1 小时前
formData 传参 如何传数组
前端·javascript·vue.js
百***49001 小时前
SQL Server查看数据库中每张表的数据量和总数据量
数据库·sql·oracle
代码or搬砖2 小时前
MyBatisPlus中的常用注解
数据库·oracle·mybatis
盼哥PyAI实验室2 小时前
MySQL 数据库入门第一课:安装、账户、库、表与数据操作详解
数据库·mysql
tsumikistep2 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
行走的陀螺仪2 小时前
.vscode 文件夹配置详解
前端·ide·vscode·编辑器·开发实践
2503_928411563 小时前
11.24 Vue-组件2
前端·javascript·vue.js
Bigger3 小时前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
谢尔登3 小时前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
g***B7384 小时前
JavaScript在Node.js中的模块系统
开发语言·javascript·node.js