源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Node.js Sequelize如何实现数据库的读写分离

  • 时间:2020-05-25 10:26 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Node.js Sequelize如何实现数据库的读写分离
[b]一、前言[/b] 在构建高并发的Web应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性。使用较多的数据库优化方案是:通过主从复制([code]Master-Slave[/code])的方式来同步数据,再通过读写分离([code]MySQL-Proxy[/code])来提升数据库的并发负载能力。 [b]1. replication选项与读写分离[/b] [code]Sequelize [/code]支持读/写分离,要实现读/写分离可以分别为读和写各创建一个[code]Sequelize[/code]实例,更方便的使用方式是在创建实例时,通过[code]replication[/code]选项分别指定读/写数据库。 要在[code]Sequelize[/code]中使用读/写复制,可以在初始化[code]Sequelize[/code]时有时向其[code]replication[/code]选项传递一个对象.这个对象[code]read[/code]、[code]write[/code]两个属性。[code]write[/code]是一个单一的对象(即:由单台服务器处理写入),而[code]read[/code]是一个包含对象的数组(即:由多台服务器处理读取)。每台[code]read[/code]、[code]write[/code]服务器都可以包含以下属性:      · [code]host [/code]- 数据库服务器的主机      · [code]port [/code]- 数据库服务器的主机端口      · [code]username [/code]- 验证用户名      · [code]password [/code]- 验证密码      · [code]database [/code]- 要连接的数据库 [b]2. Sequelize读/写分离示例[/b] 在使用主从复制的多台数据库集群中,可以通过在[code]replication[/code]对象的[code]read[/code]属性中设置,该属性是一个数组,可以在其中传入一个或多个服务器连接副本。读操作相当于对数据库集群中的从节点进行操作,它会处理所有[code]SELECT[/code]查询操作(读操作)。而[code]replication[/code]对象的[code]write[/code]属性是一个表示服务器连接的对象,写操作相当于主节点,它会处理所有插入、更新、删除操作(写操作)。
var sequelize = new Sequelize('database', null, null, {
 dialect: 'mysql',
 port: 3306
 replication: {
  read: [
   { host: '192.168.1.33', username: 'itbilu.com', password: 'pwd' },
   { host: 'localhost', username: 'root', password: null }
  ],
  write: { host: 'localhost', username: 'root', password: null }
 },
 pool: { // 如果需要重写链接池,请在 pool 选项中修改
  maxConnections: 20,
  maxIdleTime: 30000
 },
})
所有的整体性设置,都会适用于所有节点副本,所以并不需要为每个实例单独指定。在上例中,数据库名和端口号会应用于所有节点副本,用户名和密码选项也同样适用。如果某一节点副本不使用全局设置,则需要在replication选项中单独指定。 [b]注意:[/b][code]Sequelize [/code]并不会设置主从复制节点及节点间的数据同步(复制),这些操作实际由MySQL(或你所使用的数据库)完成。而 [code]Sequelize [/code]只负责从主从节点写入或读取数据。 [code]Sequelize [/code]会使用连接池来管理节点副本。 [b]默认选项是:[/b]
{
 maxConnections: 10,
 minConnections: 0,
 maxIdleTime:1000
}
[b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部