node.js mongodb ReplSet
随着web2.0兴起,高并发大数据量的应用对数据库高速响应的性能要求日趋明显,传统的关系型数据库在这方面显得有些乏力。有矛自有盾,内存DB的出现弥补了传统关系型db的不足。眼下市面流行的内存db主要有redis、memcach、mongodb。前面二者是基于key-value形式存储,而mongodb是基于关系型数据库表的一些特性的存储方式,并支持索引。
所以在一些对大数据量、数据关联度有要求的场景下,mongodb是一种不错选择。
Replica Set是mongodb的一个副本集群方案,它优越于传统的数据库主从方式。
传统的主从方式。master负责读写,slaver负责从master同步数据,一旦master宕机。slaver就废了,这样的方式在灾备方面有缺陷。而mongodb的Replica Set的集群机制攻克了这样的缺陷。
Replica Set:
主要分为:primary(主节点,提供增删查改服务),slaver(备节点。仅仅提供读),arbiter(仲裁节点,不存储数据,仅仅负责仲裁)。
流程:client从primary节点读写数据,slaver从primary那里同步数据,当primary宕机时候。arbiter会在10秒内从众多slaver节点中选出一个健康的slaver顶替primary,这样就减轻了灾害。arbiter节点本身不存储数据。仅仅是监測集群中primary和slaver的执行情况(假设arbiter宕机,整个集群也就废了,唯一的不足之处)。
slaver仅仅提供读的功能,不能写,我们的项目查询的需求能够去连slaver节点,这样就大大减轻了primary主节点的负载。
下面是Replica Set的流程图:
Replica Set的原理我们明确了,你可能会问。我们在编程的时候,对于primary、slaver这么多db。我们一定是往primary节点写数据。假设primary节点宕机了,程序应该怎么检測。怎么找到新的primary节点呢?
不用操心。mongodb已经攻克了你的疑问。mongodb提供了对各类语言的驱动的支持。你仅仅需调用Replica Set接口,然后參照说明来使用它,以下以node.js
var Db = require('mongodb').Db,
Server = require('mongodb').Server,
ReplSet = require('mongodb').ReplSet;
//集群Server地址
var serverAddr = {
9001: '192.168.1.100', //节点1
9002: '192.168.1.100', //节点2
9003: '192.168.1.100' //节点3
}
//集群Sever对象的集合
var servers = [];
for (var i in serverAddr) {
servers.push(new Server(serverAddr[i], parseInt(i)));
}
var replStat = new ReplSet(servers, {});
var db = new Db('blog', replStat);
//mongodb操作
db.open(function(err, db) {
var collection = db.collection('user');
//查询一个document
collection.findOne({
name: 'jerry'
}, function(err, results) {
console.info('query:', results);
});
//插入一个document
collection.insert({
name: 'ok',
age: 28
}, function(err, results) {
console.info('insert:' + results);
});
});
上面配置了几个节点9001、9002、9003,我们无需关注哪个是主节点、备节点、冲裁节点。驱动会自己主动推断出一个健康的主节点来给node,我们仅仅需专心写数据库的操作逻辑就能够了。
但这里存在一个问题。Replica Set在切换节点的时候,会出现一个断档期,我们知道node是异步/O的,在这个断档期,假设node在运行大量操作的话,弱小的栈内存会溢出,报:RangeError: Maximum call stack size exceeded错误。这个错误是系统级错误。会导致app崩掉,即使捕获异常或等db切换完毕,程序依旧会挂死在哪里。眼下还没找到解决办法。正在研究mongo驱动的api,试图通过一个体现切换过程状态监听的事件解决,假设该事件触发,则停止db操作,待切换完毕后再恢复,这样应该能够解决这个问题。
node.js mongodb ReplSet的更多相关文章
- 8 步搭建 Node.js + MongoDB 项目的自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...
- 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...
- Node.JS + MongoDB技术浅谈
看到一个Node.JS + MongoDB的小样例,分享给大家.魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座 云计算 +大数据 ...
- AngularJS + Node.js + MongoDB开发
AngularJS + Node.js + MongoDB开发的基于位置的通讯录(by vczero) 一.闲扯 有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能.包 ...
- node.js + mongodb
node.js + mongodb 这次内容是结合bootstrap把登陆注册做好,还有就是express的中间件等问题. 看这篇博客之前建议先看我上篇写的那篇博客http://www.cnblogs ...
- 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)
<差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...
- node.js+mongodb 爬虫
demo截图: 本demo爬瓜子二手车北京区的数据 (注:需要略懂 node.js / mongodb 不懂也没关系 因为我也不懂啊~~~) 之所以选择爬瓜子二手车网站有两点: 一.网站无需登录,少做 ...
- CentOS 7部署Node.js+MongoDB:在VPS上从安装到Hello world
写好代码,花钱买了VPS,看着Charges一直上涨却无从下手?记一位新手司机从购买VPS到成功访问的过程 0.购买VPS 首先,选择VPS提供商,部署一个新的服务器(Deploy New Serve ...
- 用Node.JS+MongoDB搭建个人博客(安装环境)(一)
Node.JS是什么? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Nod ...
随机推荐
- POI进行ExcelSheet的拷贝
POI进行ExcelSheet的拷贝 学习了:http://www.360doc.com/content/17/0508/20/42823223_652205632.shtml,这个也需要改改 这个: ...
- Visual C++ 经常使用快捷键
大写和小写 Ctrl+Shift+U: 所有变为大写 Ctrl+U: 所有变为小写 凝视 Ctrl+K+Crtr+C: 凝视选定内容 Ctrl+K+Crtr+U: 取消选定凝视内容 折叠 折叠代码: ...
- 【简单的案例分享,停机10分钟】10204升级CRS&DB的PSU至102044
发现一个现象,AIX5.3+HACMP+10.2.0.4RAC+RAW的环境,执行五六年的数据库crsd.log都会报下面错误: ----------------------------------- ...
- 6 Javascript:函数
函数 函数是面向任务的. 当我们面临一个须要可问题的时候.往往无处下手.这时候.须要将问题分解为多个任务,从而逐一击破. 这里就须要函数的帮助. 语法 function Name() { Body() ...
- MongoDB 2.6安装
Workaround to install as a service You can manually install 2.6.0 as a service on Windows from an Ad ...
- win10 bcdedit加入vhdx启动
第一步,先用hyper-v.imagex或者其他vhd安装器.将win10 系统安装到一个vhd文件里(vhdx更好.动态扩展等诸多优良特性).比方d:\win10tp.vhdx 第二步,运行例如以下 ...
- redis windows安装与使用
是什么 Redis(Remote Dictionary Server)远程字典服务器 开源免费 C语言编写的 key/value分布式内存数据库,基于内存运行 Redis支持数据的持久化,可以将内存中 ...
- filezilla的root账户无法连接服务器解决办法
lz一直都是用filezilla上传文件到vm虚拟机的,用的是ubuntu14.04的系统.最近自己重新搭了lamp去做thinkphp的学习,lz有两个账户,一个是kin,另外一个是root.大家都 ...
- 11. Container With Most Water[M]盛最多水的容器
题目 Given \(n\) non-negative integers \(a_1,a_2,\cdots,a_n\), where each represents a point at coordi ...
- Linq、延迟加载、直接加载
1.集合常用扩展方法 Where.Max.Min.OrderBy. Select.//投影后的IEnumerable对象可以通过,AsQueryable转换数据类型 First.FirstOrDefa ...