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 相关文章推荐
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
Aug 28 Javascript
尝试在让script的type属性等于text/html
Jan 15 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 Javascript
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
JavaScript中的编码和解码函数
Feb 15 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
Nov 23 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
Javascript实现单选框效果
Dec 09 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 默默经典版本
2009/08/04 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
Python格式化css文件的方法
2015/03/10 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
pandas去除重复列的实现方法
2019/01/29 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
Python更新所有已安装包的操作
2020/02/13 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
村抢险救灾方案
2014/05/09 职场文书
施工安全责任书范本
2014/07/24 职场文书
基层党组织整改方案
2014/10/25 职场文书
唐山大地震观后感
2015/06/05 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
Python使用MapReduce进行简单的销售统计
2022/04/22 Python