这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战
连接池
如果要从单个进程连接到数据库,则应仅创建一个 Sequelize 实例. Sequelize 将在初始化时建立连接池. 可以通过构造函数的 options 参数(使用 options.pool)来配置此连接池
const sequelize = new Sequelize(/* ... */, {
// ...
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});
读取复制
Sequelize 支持读取复制, 要执行 SELECT 查询时,可以连接多个服务器. 当执行读取复制时,你可以指定一台或多台服务器充当读取副本,并指定一台服务器充当写入主机,该主机处理所有写入和更新并将它们传播到副本
const sequelize = new Sequelize('database', null, null, {
dialect: 'mysql',
port: 3306,
replication: {
read: [
{ host: '8.8.8.8', username: 'read-1-username', password: process.env.READ_DB_1_PW },
{ host: '9.9.9.9', username: 'read-2-username', password: process.env.READ_DB_2_PW }
],
write: { host: '1.1.1.1', username: 'write-username', password: process.env.WRITE_DB_PW }
},
pool: { // 如果要覆盖用于 读/写 池的参数,可以在此处执行
max: 20,
idle: 30000
},
})
如果有适用于所有副本的常规设置,则无需为每个实例提供它们. 在上面的代码中,数据库名称和端口将传播到所有副本. 如果将用户名和密码留给任何副本,则同样会生效. 每个副本具有以下参数:host, port, username, password, database.
Sequelize 使用池来管理与副本的连接. 在内部,Sequelize 将维护使用 pool 配置创建的两个池,如果要修改这些设置,可以在实例化 Sequelize 时将 pool 作为参数传递, 每个 write 或 useMaster: true 查询都将使用写入池. 对于 SELECT,将使用读取池. 使用基本的循环调度来切换只读副本.
乐观锁定
乐观锁定默认情况下处于禁用状态,可以通过在特定模型定义或全局模型配置中将 version 属性设置为 true 来启用. 有关更多详细信息,请参见 模型基础
乐观锁定允许并发访问模型记录以进行编辑,并防止冲突覆盖数据. 它通过检查自从读取以来另一个进程是否对记录进行了更改,并在检测到冲突时抛出 OptimisticLockError 来执行此操作