nodejs之generic-pool数据库连接池(mysql)

引言

做后端开发免不了要和一些 存储服务器消息服务器 等等 打交道。

起因 (传统模式, 读取数据库)

大家都知道和这些使用 tcp连接 的服务传递数据的都必须要打开 一个 连接-connection

例如我们打开一个数据库并执行一段 sql, 通常都是

  1. connection = open "mysql://127.0.0.1:3306/db" (打开数据库,并取得持有连接的句柄)
  2. data = connection.exec "select * from table1" (执行 sql 并获取数据)
  3. connection.close() 显式的关闭连接

这个方式看上去似乎没有什么不对的。

但是对于并发量稍大一些的站点来说。一个单元批次的操作就需要打开并关闭一次连接。。。
显然是不能接受的

为这样做不能接受呢?

建立一个tcp连接需要三次握手。而且还需要为对象分配系统资源和内存空间。所以创建一个tcp连接可以说是昂贵的。

回到刚才的话题。这样平凡的开启关闭连接不仅对增加客户端io的压力,最重要的是大大增加了 tcp 服务器的压力(mysql, redis)。

那我们再尝试另外一种方式,那就是不关闭连接,一直使用这个连接呢。答案是: 可以。这种方式 被叫做 长连接

那这样的话,也有一个问题。因为一段时间内一个连接只能做一件事情。那么在并发的情况下这显然会阻塞整个系统。

那我们能不能尝试创建多个连接,然后当调用的时候,将没有被使用的连接拿出来使用,当使用完毕之后,将连接放回去,以供其他调用者使用的方式的呢?

连接大管家(连接池)

答案是有的:那就是我们要说的连接池。当然一个健全的连接池并不仅仅完成以上我所说的功能。

  • 连接预热 (启动时自动打开n个连接以供使用)
  • 使用 例如 轮转法 均匀分发 连接请求
  • 当池中的连接即将耗尽得时候动态产生新的连接
  • 当池中的连接一段时间没有被调用的时候,自动释放连接
  • 自动丢弃 已经坏掉的 连接
  • 系统关闭的时自动释放所有连接
    ........

以上都属于连接池的功能。连接池可谓是我们管理连接的管家

Node.js 中的 连接池

说到这里好像还是没有说到要点。在Node中我们应该怎么呢?

我们可以使用 node-pool 这个模块 GitHub

1. 安装 

    npm install generic-pool
2. 创建一个连接池       
    // 创建一个 mysql 连接池
    var poolModule = require('generic-pool');
    var pool = poolModule.Pool({
        name     : 'mysql',
        //将建 一个 连接的 handler
        create   : function(callback) {
                var Client = require('mysql').Client;
                var c = new Client();
                c.user     = 'scott';
                c.password = 'tiger';
                c.database = 'mydb';
                c.connect();
                callback(null, c);
        },
        // 释放一个连接的 handler
        destroy  : function(client) { client.end(); },
        // 连接池中最大连接数量
        max      : 10,
        // 连接池中最少连接数量
        min      : 2, 
        // 如果一个线程3秒钟内没有被使用过的话。那么就释放
        idleTimeoutMillis : 30000,
        // 如果 设置为 true 的话,就是使用 console.log 打印入职,当然你可以传递一个 function 最为作为日志记录handler
        log : true 
    });
3. 从连接池中获得链接并使用
    // 默认无任务优先级, 但是与高优先级一样,在竞争队列的前列
    pool.acquire(function(err, client) {
       pool.release(client);
    });

    // 高优先级获得链接, 在竞争队列的前列
    pool.acquire(function(err, client) {
       pool.release(client);
    }, 0);

     // 中等优先级获得链接
     pool.acquire(function(err, client) {
         pool.release(client);
     }, 1);

     // pool.acquire(handler, priority) 方法接受连个参数 
     // handler: 获取连接的回掉函数
     // priority: 获取到链接的竞争优先级
     // pool.release(client) 方法会将链接放回到连接池当中,当获得的链接没有release的话。将会导致该链接被一直占用

更多相关的配置 我就不一一展开讨论了。大家可以去 github 上查看项目的 README.md

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 使用 Node.js 连接 MySQL 数据库需要使用第三方模块,常用的模块有:mysqlmysql2、sequelize 等。 1. 安装第三方模块: 使用 npm 命令安装相应模块,例如: ``` npm install mysql2 ``` 2. 连接数据库: 在代码中引入相应模块并配置数据库连接参数,例如: ``` const mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test_db' }); connection.connect((err) => { if (err) { console.error('error connecting: ' + err.stack); return; } console.log('connected as id ' + connection.threadId); }); ``` 3. 执行数据库操作: 通过 connection 对象执行数据库操作,例如: ``` connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; console.log(results); }); connection.end(); ``` 以上代码仅作为示例,具体实现可能会有差异。 ### 回答2: 要使用Node.js连接MySQL数据库,你需要执行以下步骤: 1. 安装MySQL驱动程序:首先,你需要在Node.js项目中安装MySQL驱动程序。你可以使用npm(Node.js软件包管理器)来安装mysql包,打开终端并运行以下命令: ``` npm install mysql ``` 2. 导入mysql模块:在Node.js项目的文件中,你需要导入mysql模块来使用它的功能。你可以使用以下代码: ```javascript const mysql = require('mysql'); ``` 3. 创建数据库连接池:创建数据库连接池是一个最佳实践,它能够提高数据库连接的性能和可靠性。连接池管理着多个数据库连接,可以分配给不同的请求。你可以使用以下代码创建数据库连接池: ```javascript const pool = mysql.createPool({ host: 'localhost', // 数据库服务器主机名 user: 'root', // 数据库用户名 password: 'password', // 数据库密码 database: 'database', // 数据库名 }); ``` 其中,你需要根据自己的MySQL设置来配置`host`、`user`、`password`和`database`参数。 4. 执行查询或操作:一旦数据库连接池准备就绪,你可以使用它执行查询或操作数据库。下面是一个简单的查询示例: ```javascript pool.query('SELECT * FROM users', (error, results, fields) => { if (error) { console.log(error); } else { console.log(results); } }); ``` 在上述示例中,我们使用`pool.query`方法执行一个简单的SELECT语句,并在回调函数中处理结果。如果有错误发生,将会在控制台打印错误信息;否则,将会打印查询结果。 这就是使用Node.js连接MySQL数据库的基本步骤。你可以根据需要执行其他操作,例如插入、更新和删除数据。记得在结束使用数据库连接时,关闭连接池。 ### 回答3: 要使用Node.js连接MySQL数据库,需要先安装并引入适当的数据库驱动程序。最常用的MySQL驱动程序是`mysql`模块。下面是使用Node.js连接MySQL数据库的基本步骤: 1. 首先,确保你已经在项目中安装了`mysql`模块。可以使用npm进行安装,命令如下:`npm install mysql` 2. 引入`mysql`模块:`const mysql = require('mysql');` 3. 创建一个MySQL数据库的连接对象,连接对象包含需要连接的数据库的连接信息,例如主机(host)、用户(user)、密码(password)等。可以使用`mysql.createConnection()`函数来创建连接对象,示例代码如下: ```javascript const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'mydatabase' }); ``` 4. 使用连接对象连接到MySQL数据库:`connection.connect();` 5. 成功连接到数据库后,可以执行各种MySQL数据库操作,例如查询、插入、更新等。下面是一个查询数据库中所有数据的示例代码: ```javascript connection.query('SELECT * FROM tablename', function (error, results, fields) { if (error) throw error; console.log(results); }); ``` 6. 执行完需要的数据库操作后,记得要关闭数据库连接,以释放资源:`connection.end();` 以上就是使用Node.js连接MySQL数据库的基本步骤。当然,还可以使用其他更高级的连接池技术,例如`mysql2`或`knex.js`等库,以提高性能和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值