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 相关文章推荐
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
基于jQuery的倒计时实现代码
May 30 Javascript
Js中获取frames中的元素示例代码
Jul 30 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
Jun 15 Javascript
我的Node.js学习之路(二)NPM模块管理
Jul 06 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
jQuery给元素添加样式的方法详解
Dec 30 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
JavaScript笛卡尔积超简单实现算法示例
Jul 30 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 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/06/29 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
JS仿JQuery选择器功能
2017/03/08 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
IBatis持久层技术
2016/07/18 面试题
采购部岗位职责
2013/11/24 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
小学教师听课制度
2014/02/01 职场文书
工会工作先进事迹
2014/08/18 职场文书
工作总结与自我评价
2014/09/18 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
Python 中 Shutil 模块详情
2021/11/11 Python