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中获取请求的URL参数[正则]
Dec 25 Javascript
javascript向flash swf文件传递参数值注意细节
Dec 11 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
JavaScript中用于生成随机数的Math.random()方法
Jun 15 Javascript
jQuery使用ajax跨域获取数据的简单实例
May 18 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
Aug 09 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
Oct 26 Javascript
通过一次报错详细谈谈Point事件
May 17 Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 Javascript
vue axios重复点击取消上一次请求封装的方法
Jun 19 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
vue 动态生成拓扑图的示例
Jan 03 Vue.js
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
ajax实现无刷新分页(php)
2010/07/18 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
详解php的socket通信
2015/08/11 PHP
PHP使用xpath解析XML的方法详解
2017/05/20 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
js解决movebox移动问题
2016/03/29 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
2016/11/04 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
python实现字符串中字符分类及个数统计
2018/09/28 Python
python版百度语音识别功能
2019/07/09 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
可以使用抽象函数重写基类中的虚函数吗
2013/06/02 面试题
内科护士实习自我鉴定
2013/10/17 职场文书
财务会计毕业生自荐信
2013/11/02 职场文书
工厂保洁员岗位职责
2013/12/04 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
工作收入证明模板
2014/10/10 职场文书
2015年科普工作总结
2015/07/23 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
apache ftpserver搭建ftp服务器
2022/05/20 Servers