读写分离
Sequelize 支持 读写分离,即拥有多个服务器,您可以在执行 SELECT 查询时连接到这些服务器。当您进行读写分离时,您指定一个或多个服务器作为只读副本,以及一个服务器作为主写入器,主写入器处理所有写入和更新并将它们传播到副本(请注意,实际的复制过程 **不是** 由 Sequelize 处理的,而应该由数据库后端设置)。
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: {
// If you want to override the options used for the read/write pool you can do so here
max: 20,
idle: 30000,
},
});
如果您有任何适用于所有副本的一般设置,则无需为每个实例提供这些设置。在上面的代码中,数据库名称和端口会传播到所有副本。如果为任何副本省略用户和密码,也会发生同样的情况。每个副本都有以下选项:host
、port
、username
、password
、database
。
Sequelize 使用连接池来管理与副本的连接。在内部,Sequelize 将使用 pool
配置创建两个连接池。
如果要修改这些,可以在实例化 Sequelize 时将 pool 作为选项传递,如上所示。
每个 write
或 useMaster: true
查询将使用写入连接池。对于 SELECT
查询,将使用读取连接池。读取副本使用基本的循环轮询调度进行切换。