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 相关文章推荐
用js计算页面执行时间的函数
Dec 07 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
Feb 11 Javascript
jQuery对Select的操作大集合(收藏)
Dec 28 Javascript
鼠标经过tr时,改变tr当前背景颜色
Jan 13 Javascript
JQuery的ON()方法支持的所有事件罗列
Feb 28 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
Apr 14 Javascript
写给vue新手们的vue渲染页面教程
Sep 01 Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 Javascript
详解webpack 热更新优化
Sep 13 Javascript
新手入门带你学习JavaScript引擎运行原理
Jun 24 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
Jul 01 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
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
JS重要知识点小结
2011/11/06 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
详解python多线程之间的同步(一)
2019/04/03 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
Pycharm安装python库的方法
2020/11/24 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
淘宝中秋节活动方案
2014/01/31 职场文书
警校毕业生自我评价
2014/04/06 职场文书
课程设计的心得体会
2014/09/03 职场文书
股东出资证明书范例
2014/10/04 职场文书
研究生个人学年总结
2015/02/14 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
毕业设计致谢词
2015/05/14 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
python简单验证码识别的实现过程
2021/06/20 Python