基于一致性hash算法 C++实现详解

在《基于一致性hash算法(consistent hashing)的使用详解》一文中已经介绍了一致性hash的基本原理,本文将会对其具体实现细节进行描述,并用c++语言对一致性hash进行了简单的实现   一致性hash算法实现有两个关键问题需要解决,一个是用于结点存储和查找的数据结构的选择,另一个是结点hash算法的选择。 首先来谈一下一致性hash算法中用于存储结点的数据结构。通过了解一致性hash的原理,我们知道结点可以想象为是存储在一个环形的数据结构上(如下图),结点A、B、C、D按hash值在环形分布上是有序的,也就是说结点可以按hash值存储在一个有序的队列里。如下图所示,当一个hash值为-2^20的请求点P查找路由结点时,一致性hash算法会按hash值的顺时针方向路由到第一个结点上(B),也就是相当于要在存储结点的有序结构中,按查询的key值找到大于key值中的最小的那个结点。因此,我们应该选择一种数据结构,它应该高效地支持结点频繁地增删,也必须具有理想的查询效率。那么,红黑树可以满足这些要求。红黑树是一颗近似平衡的一颗二叉查找树,因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。 因此,我们选择使用红黑树作为结点的存储结构,除了需要实现红黑树基本的插入、删除、查找的基本功能,我们还应该增加另一个查询lookup函数,用于查找大于key中最小的结点。

memcached的分布式

第1次:http://tech.idv2.com/2008/07/10/memcached-001/ 第2次:http://tech.idv2.com/2008/07/11/memcached-002/ 第3次:http://tech.idv2.com/2008/07/16/memcached-003/ memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。 服务器端仅包括 第2次、 第3次 前坂介绍的内存存储功能,其实现非常简单。 至于memcached的分布式,则是完全由客户端程序库实现的。 这种分布式是memcached的最大特点。 memcached的分布式是什么意思? 这里多次使用了“分布式”这个词,但并未做详细解释。 现在开始简单地介绍一下其原理,各个客户端的实现基本相同。 下面假设memcached服务器有node1~node3三台, 应用程序要保存键名为“tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。

CRC32算法详细推导

CRC 算法的数学基础 CRC 算法的数学基础就不再多啰嗦了,到处都是,简单提一下。它是以 GF(2) 多项式算术为数学基础的,GF(2) 多项式中只有一个变量 x ,其系数也只有 0 和 1 ,比如: 1 *x^6 + 0*x^5 + 1*x^4 + 0*x^3 + 0*x^2 +1*x^1 + 1*x^0 = x^6 + x^4 + x + 1 加减运算不考虑进位和退位。说白了就是下面的运算规则: 0 + 0 = 0    0 – 0 = 0 0 + 1 = 1    0 – 1 = 1 1 + 0 = 1    1 – 0 = 1 1 + 1 = […]

oracle与db2的区别比较(转)

系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处。图 1 展示了 Oracle 的系统结构。将该图与 图 2 进行比较,后者显示了 DB2 的系统结构。在阅读本文的时候,为便于理解,可以参照这两个图。 图 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系统结构 图 2. DB2 on Linux, UNIX, and Windows 系统结构

戈尔巴乔夫的思维

戈尔巴乔夫的思维 1985年3月11日,苏共中央全会一致选举54岁的戈尔巴乔夫为总书记兼国防委员会主席。从此,苏联进入了最后一个时期,即戈尔巴乔夫执政时期。 戈尔巴乔夫接掌的苏联帝国已处于严重危机之中: 政治上高度专制。最高苏维埃只是名义上的最高权力机构,所有事务的决定权都在政治局的几个寡头那里、特别是在总书记一个人那里。《戈尔巴乔夫回忆录》(1995年出版,在苏联解体10周年之际中文版面世)结束语中写道:“我担任苏共总书记一职时,我拥有的权力可以和专制帝王相媲美。”;现实生活中到处是对人的尊严的无耻践踏和从上到下逍遥法外的腐败行为。 经济上停滞不前。安德罗波夫当政时曾动用情报系统克格勃调查国家经济真实情况。安德罗波夫长期担任克格勃首脑,他已不相信政府统计局的数字。克格勃向他报告的资料令人震惊:七十年代苏联经济开始走下坡路。1982年苏联经济成长率是零。工业生产率不到西方先进国家的1/3;农业生产率是西方的1/5。此后苏联的经济每况愈下,再加上入侵阿富汗(1979-1989),耗费大量军费,民众生活水平年年下降。 文化上思想垄断。书报检查制度是苏联对社会舆论和思想文化实行监督和控制的重要工具,它剥夺了苏联公民的言论自由、创作自由。大众传媒失去了它的真正价值,成了官方操纵和摆布人民思想的宣传工具。70年代流传“《消息报上》无消息,《真理报》上无真理“的话,是苏联社会万马齐喑的真实写照。苏联模式的社会主义不仅把生产资料国有化了,而且也把人民的思想国有化了。统治阶级的愚民政策营造了举国上下思想一致的假象,广大百姓则陷于愚昧无知,沉溺于蒙昧主义之中。 这就是八十年代中期腐败僵化的苏联。勃列日涅夫们享尽荣华富贵之后心满意得地告别了人世,他们只要生前牢牢控制权力,哪管死后洪水滔天!(法国路易十五:“我死以后,哪管洪水滔天。”) 面对苏联帝国这样一个烂摊子,戈尔巴乔夫何去何从? 集权体制有一个基本的特征,就是任何变革只能自上而下进行。自下而上的变革根本不可能,因为迟早会被坦克镇压。“我也可以不改革。”戈尔巴乔夫回忆说:“制度本身还具有稳定性,再维持几十年是可能的。” 确实如此。戈尔巴乔夫登上权力顶峰时才54岁,而且身体健康,没有不良嗜好。他完全可以利用这种干部终身制、特权制的稳定性,墨守成规地当十几年、甚至几十年总书记。至于自己死后专制制度哪一天崩溃,国家与人民要付出什么代价,那与他戈尔巴乔夫无关。人生苦短,赶紧享受特权、及时行乐有多好,可以找个漂亮女秘书、演员等演绎一段风流韵史黄昏恋,也可以到世界各地出出风头,还可以到遍布全国的风景胜地度假疗养狩猎,更可以对着红场上山呼万岁的人民培植自己的个人崇拜。是呀,干吗要搞那种充满风险的改革? 但戈尔巴乔夫不是这种人,在大众的福祉与个人的权力之间,他毅然选择了前者。他知道:专制制度必然死亡,改革将加速而不是挽救它的死亡。而随着旧制度的死亡,他本人也将失去不受任何制约的权力。 事后我们看清楚了,戈尔巴乔夫这样选择,是基于他鲜明的民主理念和充分的思想准备:

常用的三种修改mysql最大连接数的方法

MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改为 max_connections=1000 服务里重起MYSQL即可 方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppassword 设置新的最大连接数为200:mysql> set GLOBAL max_connections=200 显示当前运行的Query:mysql> show processlist 显示当前状态:mysql> show status 退出客户端:mysql> exit 查看当前最大连接数:mysqladmin -uusername -ppassword variables 方法三:以centos 4.4 下面的mysql 5.0.33 手工编译版本为例说明: vi /usr/local/mysql/bin/mysqld_safe 找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 : -O max_connections=1500 具体一点就是下面的位置: 用红字特别说明: then $NOHUP_NICENESS $ledir/$MYSQLD $defaults –basedir=$MY_BASEDIR_VERSION –datadir=$DATADIR $USER_OPTION –pid-file=$pid_file –skip-external-locking -O max_connections=1500 >> $err_log […]

如何解决MySQL超过最大连接数问题

最近网站出现 User 数据库名称 has already more than ‘max_user_connections’ active connections 的报错,网站瘫痪。有必要研究下这个问题。 max_user_connections 是 MySQL 用户连接数的最大值设置,整段语句的意思是:服务器的 MySQL 的最大连接数参数设置不足。解决方法:修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 MySQL 服务器。 但是正常来说,MySQL默认的100个连接数是足够的。我们需要从程序上去考虑。MySQL的默认最大连接数为100(N),实际给普通用户使用只有N-1个,保留一个连接是留给超级管理员使用的,防止连接占满了不会把管理员也踢出来。很多网站在运行的时候都会出现连接数受限现象,我认为十之八九并非是网站的真实访问量太大导致连接数超标,更多是因为我们在设计网站程序的时候采用了不合理的设计架构或数据结构引起的。非正常连接超限可能原因如下(天缘即时归纳未必完整或无错讹仅供参考): 类似人数、在线时间、浏览数等统计功能与主程序数据库同属一个数据空间时就很容易出现。 复杂的动态页尤其是用户每次浏览都涉及到多数据库或多表操作时候也很容易出现。 还有就是程序设计的不合理(比如复杂运算、等待等操作放置在数据库交互行为中间进行),或者程序存在释放BUG。 计算机硬件配置太低却安装太高版、太高配置的MySQL。 未采用缓存技术。 数据库未经过优化或表格设计及其复杂。

Linux文件权限

一、Linux文件权限 每个Linux文件具有四种访问权限:可读(r)、可写(w)、可执行(x)和无权限(-)。 利用ls -l命令可以看到某个文件或目录的权限,它以显示数据的第一个字段为 准。第一个字段由10个字符组成,如下: -rwxr-xr-x 第一位表示文件类型,-表示文件,d表示目录 2-4位表示文件所有者的权限,u权限 5-7位表示文件所有者所属组成员的权限,g权限 8-10位表示所有者所属组之外的用户的权限,o权限 2-10位的权限总和有时称为a权限 以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限, 所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。 二、文件权限修改—-chmod 1. 用数字表示法修改权限 所谓数字表示法,是指将r、w和x分别用4、2、1来代表,没有授予权限的则为0, 然后把权限相加,如下 原始权限 转换为数字 数字表示法 rwxrwxr-x (421)(421)(401) 775 rwxr-xr-x (421)(401)(401) 755 修改权限的例子:将文件test的权限修改为所有者和组成员具有读写的权限,其他 人只有读权限 chmod 664 test 2. 用文本表示法修改权限 文本表示法用4个字母表示不同的用户: u:所有者 g:组成员 o:其他成员 a:所有人 权限仍用r、w和x表示 和数字表示法不同,文本表示法不仅可以重新指定权限,也可以在原来权限的基础上 增加或减少权限,如下: =:重新制定权限 -:对目前的设置减少权限 +:对目前的设置增加权限 例子:讲上述例子中,所有者加上执行权限,组成员减少执行权限,其他成员设置为 执行权限,执行以下命令 chmod u+x,g-x,o=x test 注意:逗号前后不能有空格 三、目录权限 目录权限的修改和文件权限修改不同,只是四种权限代表的含义如下: r:可列出目录中的内容 w:可在目录中创建、删除和修改文件 […]