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保持连接活跃
相关推荐
Hyyy17 分钟前
普通前端续命周报——第2周
前端
wuxinyan12331 分钟前
工业级大模型学习之路030:Streamlit 企业级智能体前端工作台
前端·学习·streamlit·智能体
修己xj39 分钟前
告别无效刷屏!TrendRadar:最快30秒部署的开源热点助手,让你只看真正关心的新闻
前端
提笔了无痕40 分钟前
RAG存储策略中.md格式的切片与存储怎么处理
数据库·ai·rag
陳土1 小时前
DuckDB精读——基于Getting started with DuckDB
数据库·oracle
凯瑟琳.奥古斯特1 小时前
数据库原理选择题精选
数据库·python·职场和发展
anOnion2 小时前
构建无障碍组件之Slider Pattern
前端·html·交互设计
云水一下2 小时前
JavaScript 从零基础到精通系列:前世今生与编程启蒙
前端·javascript
月亮邮递员6162 小时前
Markdown语法总结
开发语言·前端·javascript
曹牧2 小时前
C#:主线程能够捕获到子线程中的异常
开发语言·数据库·c#