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 相关文章推荐
JScript中的"this"关键字使用方式补充材料
Mar 08 Javascript
JS 判断undefined的实现代码
Nov 26 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
Sep 03 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
Oct 29 Javascript
JavaScript 异常处理 详解
Feb 06 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
深入浅析Node.js 事件循环
Dec 20 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
vue组件的写法汇总
Apr 12 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
详解可以用在VS Code中的正则表达式小技巧
May 14 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 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 读取文件乱码问题
2010/02/20 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
jquery中this的使用说明
2010/09/06 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
JS跨域请求的问题解析
2018/12/03 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
详细介绍Ruby中的正则表达式
2015/04/10 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python 构造三维全零数组的方法
2018/11/12 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
社团文化节策划书
2014/02/01 职场文书
调解员先进事迹材料
2014/02/07 职场文书
商务日语专业自荐信
2014/04/17 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
2014光棍节大学生联谊活动方案
2014/10/10 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
首都博物馆观后感
2015/06/05 职场文书
2019邀请函格式及范文
2019/05/20 职场文书