数据库连接池
- 为什么要用数据库连接池
产生背景:当一个网站并发量达到百级,千级以上(假设网站一天9万的访问量)后端服务器就会和数据库服务器创建9万次链接,关闭九万次链接,而数据库创建链接非常耗费时间,关闭链接也给常消耗时间,严重浪费数据库的资源,并且容易造成数据库服务器内存溢出,宕机
- 什么是连接池
数据库连接池是负责创建,分配,释放数据库的对象,在项目启动时会创建一定数量的数据库连接放到连接池对象中,并允许应用程序重复使用一个现有的数据库连接,而不是重新创建一个
在sequelize底层:连接池是由一个ConnectionManager类管理的pool类的对象,通过pool类对象管理和共享多个连接对象
- 数据库连接池如何工作
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的,连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求数据的连接数超过最大连接数量时,这些请求将被加到等待队列中。
将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个建立的空闲连接对象,使用完毕后,用户也并非将连接池关闭,而是将连接放回连接池中,以供下一个请求访问使用,而连接的建立、端口都由连接池自身来管理
- 连接池配置
import { Sequelize } from "sequelize-typescript";
import dbconfig from "../common/dbconfig";
let { host, user, password, database, port } = dbconfig.getConf();
const mySquelize=new Sequelize(database,user,password,{
host,
port,
dialect:'mssql',
define: { timestamps: false, freezeTableName: true },
pool:{
//数据库连接池
max:300 ,//最大连接对象的个数
min:50,
// idle 这个属性控制连接池中空闲的连接的最大空闲时间,单位为毫秒,只有当连接池中连接数量大于最小连接数量时会生效
idle:10000,
acquire:100000 //表示一条sql 在查询获取连接资源之前的最长等待时间,单位,秒
}
})