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保持连接活跃
相关推荐
Mike117.2 小时前
GBase 8a 日期边界写法和时间窗口取数偏差
数据库
余人于RenYu2 小时前
Claude + Figma MCP
前端·ui·ai·figma
SPC的存折3 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
杨艺韬5 小时前
vite内核解析-第2章 架构总览
前端·vite
我是伪码农5 小时前
外卖餐具智能推荐
linux·服务器·前端
2401_885885046 小时前
营销推广短信接口集成:结合营销策略实现的API接口动态变量填充方案
前端·python
小李子呢02116 小时前
前端八股性能优化(2)---回流(重排)和重绘
前端·javascript
程序员buddha6 小时前
深入理解ES6 Promise
前端·ecmascript·es6
吴声子夜歌6 小时前
ES6——Module详解
前端·ecmascript·es6
MatrixOrigin7 小时前
数据库没有死,只是范式变了
数据库·oracle