一致性哈希算法,分布式哈希算法

判定哈希算法好坏的四个定义: 1、平衡性 平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。 2、单调性 单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 3、分散性 在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生, ...

大数据量的存储分表常见算法

当一个应用的数据量大的时候,我们用单表和单库来存储会严重影响操作速度,如mysql的myisam存储,我们经过测试,200w以下 的时 候,mysql的访问速度都很快,但是如果超过200w以上的数据,他的访问速度会急剧下降,影响到我们webapp的访问速度,而且数据量太大的话,如 果用单表存储,就会使得系统相当的不稳定,mysql服务很容易挂掉。所以当数据量超过200w的时候,建议系统工程师还是考虑分表. 以下是几种常见的分表算法。 1.按自然时间来分表/分库 如 一个应用的数据在一年后数据量会达到200w左右,那么我们就可以考虑用一年的数据来做为一个表或者库来存储,例如, ...

Twitter的分布式自增ID算法snowflake

什么是 php_snowflake? 推特分布式id生成算法SnowFlake PHP 的实现 需求 PHP >= 5.6 Linux 说明 纯PHP无法实现SnowFlake算法,因为线程安全版本(需要tid)和非线程安全版本(需要pid)不能生成相同格式的id(本项目的tid是系统中唯一的所以不用担心多个进程中tid冲突),并且PHP作为脚本语言无法维护sequence,当脚本结束的时候sequence又要被初始化,所以在大并发情况纯PHP实现的版本SnowFlake算法根本没有什么作用。所以就诞生了这个项目,以下为线程安全版本和非线程安全版本差别。 非线程安全版本(NTS) ...

解读Secondary NameNode的功能

1、 概述 最近有朋友问我Secondary NameNode的作用,是不是NameNode的备份?是不是为了防止NameNode的单点问题?确实,刚接触Hadoop,从字面上看,很容易会把Secondary NameNode当作备份节点;其实,这是一个误区,我们不能从字面来理解,阅读官方文档,我们可以知道,其实并不是这么回事,下面就来赘述下Secondary NameNode的作用。 2、 Secondary NameNode? 在Hadoop中,有一些命名模块不那么尽人意,Secondary NameNode就是一个典型的例子之一。 ...

centos配置交换分区

操作如下: cd /var/ #获取要增加的SWAP文件块(这里以1GB为例) dd if=/dev/zero of=swapfile bs=1024 count=1038336 #创建SWAP文件 /sbin/mkswap swapfile #激活SWAP文件 /sbin/swapon swapfile #查看SWAP信息是否正确 /sbin/swapon ...