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


Posted in Javascript onOctober 23, 2016

一、前言

在构建高并发的Web应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性。使用较多的数据库优化方案是:通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力。

1. replication选项与读写分离

Sequelize 支持读/写分离,要实现读/写分离可以分别为读和写各创建一个Sequelize实例,更方便的使用方式是在创建实例时,通过replication选项分别指定读/写数据库。

要在Sequelize中使用读/写复制,可以在初始化Sequelize时有时向其replication选项传递一个对象.这个对象readwrite两个属性。write是一个单一的对象(即:由单台服务器处理写入),而read是一个包含对象的数组(即:由多台服务器处理读取)。每台readwrite服务器都可以包含以下属性:

     · host - 数据库服务器的主机

     · port - 数据库服务器的主机端口

     · username - 验证用户名

     · password - 验证密码

     · database - 要连接的数据库

2. Sequelize读/写分离示例

在使用主从复制的多台数据库集群中,可以通过在replication对象的read属性中设置,该属性是一个数组,可以在其中传入一个或多个服务器连接副本。读操作相当于对数据库集群中的从节点进行操作,它会处理所有SELECT查询操作(读操作)。而replication对象的write属性是一个表示服务器连接的对象,写操作相当于主节点,它会处理所有插入、更新、删除操作(写操作)。

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选项中单独指定。

注意:Sequelize 并不会设置主从复制节点及节点间的数据同步(复制),这些操作实际由MySQL(或你所使用的数据库)完成。而 Sequelize 只负责从主从节点写入或读取数据。

Sequelize 会使用连接池来管理节点副本。

默认选项是:

{
 maxConnections: 10,
 minConnections: 0,
 maxIdleTime:1000
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
懒就要懒到底——鼠标自动点击(含时间判断)
Feb 20 Javascript
JS等比例缩小图片尺寸的实例
Feb 27 Javascript
javascript 获取模态窗口的滚动位置代码
Aug 06 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
js仿微博实现统计字符和本地存储功能
Dec 22 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
node+experss实现爬取电影天堂爬虫
Nov 20 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
JS开发前端团队展示控制器来为成员引流
Aug 14 Javascript
JavaScript数组去重的几种方法效率测试
Oct 23 #Javascript
Javascript 实现简单计算器实例代码
Oct 23 #Javascript
JavaScript页面实时显示当前时间实例代码
Oct 23 #Javascript
jquery 实现回车登录详解及实例代码
Oct 23 #Javascript
AngularJS ng-repeat数组有重复值的解决方法
Oct 23 #Javascript
web前端开发upload上传头像js示例代码
Oct 22 #Javascript
jQuery中$.ajax()方法参数解析
Oct 22 #Javascript
You might like
晶体管单管来复再生式收音机
2021/03/02 无线电
php适配器模式介绍
2012/08/14 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
python 中的列表解析和生成表达式
2011/03/10 Python
Python中处理unchecked未捕获异常实例
2015/01/17 Python
python Flask实现restful api service
2017/12/04 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
公司领导推荐信
2013/11/12 职场文书
党员承诺践诺书
2014/05/20 职场文书
条幅标语大全
2014/06/20 职场文书
代理人委托书
2014/08/01 职场文书
人力资源管理求职信
2014/08/07 职场文书
业务员辞职信范文
2015/03/02 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
mysql insert 存在即不插入语法说明
2022/03/25 MySQL