这里有新鲜出炉的 Node.JS 入门教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
Sequelize 是一个易于使用,支持多 SQL 方言 (dialect) 的对象 - 关系映射框架(ORM),这个库完全采用 JavaScript 开发并且能够用在 Node.JS 环境中。它当前支持 MySQL, MariaDB, SQLite 和 PostgreSQL 数据库。在 Node.js 中,使用 Sequelize 操作数据库时,同样支持读写分离。
一、前言
在构建高并发的 web 应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性。使用较多的数据库优化方案是:通过主从复制 (
) 的方式来同步数据,再通过读写分离 (
- Master-Slave
) 来提升数据库的并发负载能力。
- MySQL-Proxy
1. replication 选项与读写分离
支持读 / 写分离,要实现读 / 写分离可以分别为读和写各创建一个
- Sequelize
实例,更方便的使用方式是在创建实例时,通过
- Sequelize
选项分别指定读 / 写数据库。
- replication
要在
中使用读 / 写复制,可以在初始化
- Sequelize
时有时向其
- Sequelize
选项传递一个对象. 这个对象
- replication
、
- read
两个属性。
- write
是一个单一的对象 (即:由单台服务器处理写入),而
- write
是一个包含对象的数组 (即:由多台服务器处理读取)。每台
- read
、
- read
服务器都可以包含以下属性:
- write
·
- 数据库服务器的主机
- 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 选项中单独指定。
注意:
并不会设置主从复制节点及节点间的数据同步 (复制),这些操作实际由 MySQL(或你所使用的数据库) 完成。而
- Sequelize
只负责从主从节点写入或读取数据。
- Sequelize
会使用连接池来管理节点副本。
- Sequelize
默认选项是:
- {
- maxConnections: 10,
- minConnections: 0,
- maxIdleTime: 1000
- }
总结
来源: http://www.phperz.com/article/17/0510/330970.html