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资料整理的更多相关文章

  1. iOS 开发学习资料整理(持续更新)

      “如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿   iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...

  2. zz 圣诞丨太阁所有的免费算法视频资料整理

    首发于 太阁实验室 关注专栏   写文章     圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...

  3. iOS 学习资料整理

    iOS学习资料整理 https://github.com/NunchakusHuang/trip-to-iOS 很好的个人博客 http://www.cnblogs.com/ygm900/ 开发笔记 ...

  4. H.264的一些资料整理

    本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...

  5. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

  6. 3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理

    本文带你了解PowerShell发展历程,顺便整理了一点资料,方便大家查询. Windows PowerShell® 是基于任务的命令行管理程序和脚本语言,专为进行系统管理而设计. 在 .NET Fr ...

  7. (转载)2016 CCF大数据与计算智能大赛 开源资料整理

    本文转载自:http://blog.sina.com.cn/s/blog_5399b8660102wxks.html 2016 CCF 大数据与计算智能大赛已经落下帷幕,11个赛题由众多大神包揽奖项, ...

  8. Java 学习资料整理

    Java 学习资料整理 Java 精品学习视频教程下载汇总 Java视频教程 孙鑫Java无难事 (全12CD) Java视频教程 即学即会java 上海交大 Java初级编程基础 共25讲下载 av ...

  9. Niagara帮助文档资料整理

    1.任何软件额发布都会有说明文档,有的不会附具体实践的操作步骤,存在不懂得问题一般可以通过查看榜文文档解决问题 一些软件的帮助文档是一PDF格式存储在软件安装的目录下面,如Niagar workben ...

随机推荐

  1. Repository 仓储,你的归宿究竟在哪?(三)-SELECT 某某某。。。

    写在前面 首先,本篇博文主要包含两个主题: 领域服务中使用仓储 SELECT 某某某(有点晕?请看下面.) 上一篇:Repository 仓储,你的归宿究竟在哪?(二)-这样的应用层代码,你能接受吗? ...

  2. 牛顿插值法——用Python进行数值计算

    拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n ...

  3. .NetCore之EF跳过的坑

    我在网上看到很多.netCore的信息,就动手自己写一个例子测试哈,但是想不到其中这么多坑: 1.首先.netCore和EF的安装就不用多说了,网上有很多的讲解可以跟着一步一步的下载和安装,但是需要注 ...

  4. 阿里云本地FTP怎么连接?通用win7,win8,win8.1,win10

  5. 堆排序与优先队列——算法导论(7)

    1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...

  6. FTP的搭建与虚拟目录作用<之简单讲解>

    操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zq ...

  7. 前端学HTTP之基本认证

    前面的话 人们用Web进行私人事务处理,访问私有的数据.通过Web可以很方便地访问这些信息,但仅仅是方便访问还是不够的.我们要保证只有特定的人能看到我们的敏感信息并且能够执行我们的特权事务 服务器需要 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(28)-系统小结

    系列目录 我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经搭配完成了,并能从模块创建授权分配和开发功能了 我没有发布所有源代码,但在14节发布了最后的一次源代码 ...

  9. 已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html

    文章由于写得比较仓促 已经重写,源码和文章请跳转 http://www.cnblogs.com/ymnets/p/5621706.html 系列目录 前言: 导入导出实在多例子,很多成熟的组建都分装了 ...

  10. Java 哈希表运用-LeetCode 1 Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...