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 相关文章推荐
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
List Installed Hot Fixes
Jun 12 Javascript
一个JS翻页效果
Jul 23 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
table行随鼠标移动变色示例
May 07 Javascript
Js+Jq获取URL参数的集中方法示例代码
May 20 Javascript
jquery实现公告翻滚效果
Feb 27 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
Dec 25 Javascript
JavaScript实现五子棋小游戏
Oct 26 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
Php Mssql操作简单封装支持存储过程
2009/12/11 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
js 居中漂浮广告
2010/03/21 Javascript
js中判断控件是否存在
2010/08/25 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
vue cli 全面解析
2018/02/28 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
vue实现简单图片上传
2020/06/30 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python聊天室实例程序分享
2016/01/05 Python
Python中functools模块函数解析
2017/03/12 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
儿童学习python的一些小技巧
2018/05/27 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Django时区详解
2019/07/24 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
联谊会主持词
2014/03/26 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
防沙治沙典型材料
2014/05/07 职场文书
会计毕业生自荐书
2014/06/12 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
单位证明范文
2015/06/18 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书