BigCouch资料整理
BigCouch架构
CHTTPD
封装了FABIC接口,CouchDB在HTTP层的集群操作
FABRIC
CouchDB集群的操作代理。
主要用于控制CouchDB集群,Erlang层面的操作
REXI
Rexi是发送CouchDB的操作节点集群中的一个特制的RPC服务器应用程序。
MEM3
CouchDB集群的节点添加程序,在BigCouch中使用主要用于跟踪集群的两个重要信息:
成员节点信息;
每个数据库节点(分区)的映射关系;
节点信息和分区信息在本地节点数据库中进行跟踪。
拆分与合并分区在尚未成熟。
BigCouch数据库参数
Q参数
在创建数据库时指定数据库的分区数量(一致性哈希分区数)。
可能存在多个分区在同一节点上,允许你在集群的节点数量增长而无需re-shard操作。
默认值是8,可以在配置文件中进行更改:
在default.ini文件中cluster区域的q字段;
也可以在创建数据库时指定,比如:
curl -X PUT http://172.16.10.2:5984/test_db?q=4&n=3
分区示意图:
Q = 4时可以将数据库分为4个分区
假设有5个节点,这4个分区会分布在5个节点上,示例如下:
N参数
每个分片的冗余拷贝数量。
默认值是3,可以在配置文件中进行更改:
在default.ini文件中cluster区域的n字段;
也可以在创建数据库时指定,比如:
curl -X PUT http://172.16.10.2:5984/test_db?q=4&n=3
假设N=3,节点数为5个,每个分区将会复制3份并按一定的算法分片到5个节点上,分区中的文档会复制3份同步到每一个备份分区,示例如下:
BigCouch节点删除
需要删除的节点A,文件备份节点B
数据迁移
将A节点上 var/lib/shards/ 目录下的.couch文件通过scp等方式复制到B节点相同目录里;
数据同步
复制后如果A节点的数据有更新,在5986端口执行同步操作;
通知BigCouch集群新文件地址
在dbs数据库里面更新数据库配置文档,内容示例:
{
"_id": "test_db",
"_rev": "2-45088d2d1bb389c3fced1a952c2ea124",
"by_node": {
"bigcouch@172.16.10.2": [
"00000000-3fffffff",
"80000000-bfffffff"
],
"bigcouch@172.16.10.3": [
"40000000-7fffffff",
"c0000000-ffffffff"
],
"bigcouch@172.16.10.5": [
"40000000-7fffffff",
"c0000000-ffffffff",
"00000000-3fffffff",
"80000000-bfffffff"
],
"bigcouch@172.16.10.6": [
"40000000-7fffffff",
"c0000000-ffffffff"
],
"bigcouch@localhost.localdomain": [
"00000000-3fffffff",
"80000000-bfffffff"
]
},
"by_range": {
"00000000-3fffffff": [
"bigcouch@172.16.10.2",
"bigcouch@172.16.10.5",
"bigcouch@localhost.localdomain"
],
"40000000-7fffffff": [
"bigcouch@172.16.10.3",
"bigcouch@172.16.10.5",
"bigcouch@172.16.10.6"
],
"80000000-bfffffff": [
"bigcouch@172.16.10.2",
"bigcouch@172.16.10.5",
"bigcouch@localhost.localdomain"
],
"c0000000-ffffffff": [
"bigcouch@172.16.10.3",
"bigcouch@172.16.10.5",
"bigcouch@172.16.10.6"
]
}
}
修改by_node和by_range字段,将A相关的信息修改为B的。
断开A服务器与集群的连接
修改set-cookie值并重启BigCouch服务器
移除集群A节点
通过集群5986端口访问nodes数据库,删除A服务器相关文档
删除A服务器上的nodes信息和dbs信息
清理shards目录中的文件,重启A服务器的BigCouch
5节点环境中,节点与集群断开时,该节点不可用。
冲突管理
冲突处理的例子
环境介绍
集群中三个节点:
A : 172.16.10.2
B : 172.16.10.3
C : 172.16.10.5
数据库:test_db
Q = 1,N=3
数据库不分区,备份三份。
添加数据:
{
"
_id
":
"2809580fa3dc3d8d719c02c229000518"
,
"
_rev
":
"1-1bd878534def1c2c9224e7398ab6a987"
,
"
name
":
"beforeChange"
}
制造冲突
1、关闭B和C服务器;
2、修改A服务器的数据
{
"
_id
":
"2809580fa3dc3d8d719c02c229000518"
,
"
_rev
":
"2-6de54d127839d323b743435f447cb29f"
,
"
name
":
"mike"
}
3、关闭A服务器;
4、在A服务器关闭后,启动B服务器;
5、修改B服务器的数据
{
"
_id
":
"2809580fa3dc3d8d719c02c229000518"
,
"
_rev
":
"2-19f995ede86cd2c367b2d90568a6f8c6"
,
"
name
":
"MIKE"
}
6、启动A服务器;
验证数据
B服务器已同步为A的数据
2、C服务器数据也同步为A的数据
冲突检测
冲突检查函数:
function(doc){
if(doc._conflicts){
emit(doc._conflicts,null);
}
}
文档中的doc._conflicts属性是一个数组,列出了所有的冲突修订。
处理冲突
couchDB通过一个算法来选出胜利的修订,解决冲突。应用程序不应该信赖于这个算法,而是应该先去解决冲突。
自动冲突处理
每一个修订都包含有一个先前修订的列表,那个拥有最长的修订历史的修订会最终成为胜出的修订;如果两个修订历史刚好一样长,那么会比较它们的_rev值的ASCII序列,ASCII值更大的那个会最终胜出。所以在上面的例子中,2-6de54d127839d323b743435f447cb29f胜出了,2-19f995ede86cd2c367b2d90568a6f8c6落选了。
手动冲突处理
首先,用想要的值在目标文档上进行重写,然后把不想要的修订删除就可以了。
具体如下:
1、 读取当前文档;
2、 读取旧(冲突)版本;
3、 应用特定于域的合并逻辑;
4、 将文档更新为新(合并)版本;
5、 移除冲突文档版本。
BigCouch资料整理的更多相关文章
- iOS 开发学习资料整理(持续更新)
“如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿 iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...
- zz 圣诞丨太阁所有的免费算法视频资料整理
首发于 太阁实验室 关注专栏 写文章 圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...
- iOS 学习资料整理
iOS学习资料整理 https://github.com/NunchakusHuang/trip-to-iOS 很好的个人博客 http://www.cnblogs.com/ygm900/ 开发笔记 ...
- H.264的一些资料整理
本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...
- 转:基于IOS上MDM技术相关资料整理及汇总
一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...
- 3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理
本文带你了解PowerShell发展历程,顺便整理了一点资料,方便大家查询. Windows PowerShell® 是基于任务的命令行管理程序和脚本语言,专为进行系统管理而设计. 在 .NET Fr ...
- (转载)2016 CCF大数据与计算智能大赛 开源资料整理
本文转载自:http://blog.sina.com.cn/s/blog_5399b8660102wxks.html 2016 CCF 大数据与计算智能大赛已经落下帷幕,11个赛题由众多大神包揽奖项, ...
- Java 学习资料整理
Java 学习资料整理 Java 精品学习视频教程下载汇总 Java视频教程 孙鑫Java无难事 (全12CD) Java视频教程 即学即会java 上海交大 Java初级编程基础 共25讲下载 av ...
- Niagara帮助文档资料整理
1.任何软件额发布都会有说明文档,有的不会附具体实践的操作步骤,存在不懂得问题一般可以通过查看榜文文档解决问题 一些软件的帮助文档是一PDF格式存储在软件安装的目录下面,如Niagar workben ...
随机推荐
- EasyPR--中文开源车牌识别系统 开发详解(1)
在上篇文档中作者已经简单的介绍了EasyPR,现在在本文档中详细的介绍EasyPR的开发过程. 正如淘宝诞生于一个购买来的LAMP系统,EasyPR也有它诞生的原型,起源于CSDN的taotao123 ...
- 使用Nginx+Lua代理Hadoop HA
一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...
- C# 线程同步的三类情景
C# 已经提供了我们几种非常好用的类库如 BackgroundWorker.Thread.Task等,借助它们,我们就能够分分钟编写出一个多线程的应用程序. 比如这样一个需求:有一个 Winform ...
- Android点击列表后弹出输入框,所点击项自动滚动到输入框上方
使用微信的朋友圈会发现,点击某一条评论后输入框会弹出来,然后所点击的那一项会自动地滚动到输入框上方的位置,这样如果开始所点击的评论在屏幕很下方的话,就不会被输入框遮住,虽然微信这一点在我的MX2频繁点 ...
- HTML5知识点总结
HTML5知识点总结(一) 一.HTML新增元素 1.IE9版本以下支持HTML5的方法 <!--[if lt IE9]> <script src="http://cdn. ...
- C# 给Word文档添加内容控件
C# 给Word文档添加内容控件 在MS Word中,我们可以通过内容控件来向word文档中插入预先定义好的模块,指定模块的内容格式(如图片.日期.列表或格式化的文本等),从而创建一个结构化的word ...
- 【Python五篇慢慢弹(3)】函数修行知python
函数修行知python 作者:白宁超 2016年10月9日21:51:52 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- Solr5.5.1 IK中文分词配置与使用
前言 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比 ...
- 【知识积累】try-catch-finally+return总结
一.前言 对于找Java相关工作的读者而言,在笔试中肯定免不了遇到try-catch-finally + return的题型,需要面试这清楚返回值,这也是这篇博文产生的由来.本文将从字节码层面来解释为 ...
- Web安全相关(二):跨站请求伪造(CSRF/XSRF)
简介 CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对 ...