FastDHT是一个基于键值对(Key Value Pair)的高效的分布式Hash系统,她可以用来存储大量的Key Value Pair,比如可以用来存储文件名映射表、session数据、用户相关数据等等。
FastDHT服务器端底层存储采用Berkeley DB,支持大数据量;网络IO采用libevent,支持大并发连接。FastDHT只用到了BDB最基本的存储功能,数据同步是自己实现的,采用了binlog的复制方式。
FastDHT集群由一个或多个组(group)组成,每个组由一台或多台服务器组成,同组服务器上存储的数据是相同的,数据同步只在同组的服务器之间进行。组内各个服务器是对等的,对数据进行存取时,可以根据key的hash值来决定使用哪台服务器。数据同步采用推(Push)的方式,由源服务器主动将数据同步到本组的其他服务器。
由客户端决定应该选择哪台服务器,为例避免查表,应该根据key的hash code来选择服务器,算法描述如下:
1. 计算出key的hash值(hash_code)
2. group_index = hash_code % group_count
3. new_hash_code = hash_code高16位和低16位互换
4. server_index = new_hash_code % 组内server_count
计算server_index和group_index时使用了不同的hash code,是因为如果group_count和组内server_count相等,例如都等于2,那么对于一个组来说,任何key值都将选中其中一台固定的服务器(server_index == group_index)。
FastDHT中,key由三部分组成:namespace、object ID和key name。这个设计和数据库的层级划分相似:namespace对应database,object Id对应table,而key对应字段。引入namespace的目的是解决多个使用者(如:应用或产品)之间可能存在的数据冲突问题;引入object Id是便于对object相关的数据(如用户资料)进行组织和管理,以提高整体性能。引入namespace和object ID使得系统具有更大的灵活性,在实际使用中,这两个字段可以设置为空值。在计算key的hash code时,如果namespace和object ID不为空,将这二者合并起来作为hash函数的输入;否则将key作为hash函数的输入。
系统扩容时,为了避免重新进行hash分布(rehash),FastDHT引入了逻辑分组的概念。一个物理分组对应一组服务器,一组服务器(物理分组)上可以有多个逻辑分组。FastDHT的一个服务进程支持多个逻辑分组,每个组对应一个BDB的数据文件。这样的设计为以后的扩容提供了便利。在初期估算出今后需要的大致分组数目(逻辑分组数),然后将逻辑分组对应到物理分组中。扩容时,将一个或多个逻辑分组迁移到新增的物理分组上,只需要拷贝对应的BDB数据文件,并修改相应的配置文件,重启服务器端和客户端程序即可。
FastDHT支持超时(timeout),每个key都有超时属性。这样可以使用FastDHT来存储session数据,比传统的数据库存储方案更加高效和简洁。
- 浏览: 300976 次
文章分类
- 全部博客 (308)
- Apple (1)
- MAC (6)
- iPhone (1)
- iOS (1)
- Adobe (3)
- Microsoft (23)
- Windows (12)
- WAP (2)
- CMPP (6)
- Eclipse (5)
- .NET (13)
- Router (3)
- ADO.NET (2)
- C# (11)
- WPF (3)
- SqlServer (4)
- Facebook (2)
- JDBC (1)
- Visual Studio (10)
- ActiveMQ (9)
- Java (112)
- Memcached (2)
- NoSQL (7)
- Hadoop (9)
- GlassFish (2)
- Linux (98)
- CentOS (58)
- Spring (10)
- Oracle (17)
- JBOSS (12)
- Webservice (4)
- EJB (7)
- DFS (1)
- Hibernate (9)
- Redis (3)
- Tomcat (5)
- Python (8)
- FastDFS (6)
- Nginx (6)
- RabbitMQ (0)
- Erlang (0)
- Lucene (8)
- Solr (7)
- MySQL (1)
- JavaScript (0)
最新评论
-
zhangy888:
你好,我正好也遇到了这个问题,按照您的设置有如下几个问题,请帮 ...
CXF SOAP 1.2 SOAP 1.1 问题 -
u011493586:
这个SUBMIT写的还不错,只是有的地方没看懂
CMPP发送超长短信息(JAVA版) -
u011493586:
...
CMPP发送超长短信息(JAVA版)
发表评论
-
遍历Map的四种方法
2015-01-28 11:14 396public static void main(Stri ... -
使用Perf4J进行性能分析和监控
2015-01-13 11:39 646许多开发人员都很熟悉墨菲法则的一个例子:他们发现在花费了大量 ... -
Nexus创建本地Maven仓库
2014-09-22 10:58 12940.安装环境 windows 7 x86-64 jdk1 ... -
HBase vs Cassandra: 我们迁移系统的原因
2014-09-03 21:13 666原文: http://ria101.wordp ... -
开源日志系统比较
2014-09-03 21:11 444作者:Dong | 新浪微博:西成懂 | 可以转载, 但必须 ... -
tokyotyrant-java客户端
2014-07-25 09:48 708目录: 概述 演示 [一]、概述 java实现了 ... -
IntelliJ IDEA 13试用手记(附详细截图)
2014-06-30 16:04 453从去年开始转java以来,一直在寻找一款趁手的兵器,ecl ... -
Heritrix使用的初步总结
2014-06-14 16:45 446一、框架介绍 公司最近项目要用到全文检索,检索对象是 ... -
利用 Heritrix 构建特定站点爬虫
2014-06-14 15:19 452本文由浅入深,详细介 ... -
Errors running builder 'DeploymentBuilder' on project
2014-06-09 14:20 5661.修改java源代码后点击保存,IDE 自动编译并热部署, ... -
开源中间件大舞台
2014-05-22 09:27 608全文主要内容:一、中间件是什么?二、中间件的主要作用三、中间 ... -
log4j使用DailyRollingFileAppender
2014-05-20 15:30 553DailyRollingFileAppender是 ... -
JVM系列四:生产环境参数实例及分析
2014-05-18 11:04 363java application项目(非web项目) ... -
solr中如何定义自己的解析器插件(QParserPlugin)
2014-05-15 13:39 1214/***************************** ... -
Lucene 基础理论
2014-05-15 11:43 6471. 全文检索系统与Lucene简介 1.1 什么是全 ... -
Lucene 4.0升级指南
2014-05-15 11:33 1147Apache Lucene Migration Guide ... -
Lucene的分析过程
2014-05-13 15:18 695回顾倒排索引的构建 收集待建索引的原文档(Do ... -
Lucene中文分析器的中文分词准确性和性能比较
2014-05-13 15:17 463对几种中文分析器,从分词准确性和效率两方面进行比较。分析器 ... -
CharTokenizer对西文字符进行分词处理
2014-05-12 22:00 485CharTokenizer是一个抽象类,它主要是对西文字符进 ... -
LUCENE3.0 自学吧 7 CharTokenizer
2014-05-12 21:58 444CharTokenizer 是一个抽象类,它主要是对 ...
相关推荐
Jemter测试MQ的插件 JMeter-Rabbit-AMQP在github上17年便停止更新了,不支持rabbitmq的交换机类型“x-consistent-hash”,为此我更改了源码使其支持"x-consistent-hash
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
赠送jar包:shiro-crypto-hash-1.4.0.jar; 赠送原API文档:shiro-crypto-hash-1.4.0-javadoc.jar; 赠送源代码:shiro-crypto-hash-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-crypto-hash-1.4.0.pom; ...
内容描述:用于crypto中hash爆破的强大工具。 优势:相较于其他hash工具,具有更快的算力,使用方便简洁。 适用:适用于md5,sha256等典型hash加密方式,反推出所需的源码。
Hash-Hash-Hash
前端开源库-copy-webpack-plugin-hash复制Webpack插件哈希,使用Webpack复制文件和目录
FastDHT是一个基于键值对的高效分布式hash系统, 可以存储文件名和 file_id的映射表 、session数据、用户相关等 ,底层采用erkeley DB做数据库 来持久存储数据 持久存储数据 (也可以使用SSDB),数 据同步方式是使用...
#资源达人分享计划#
Go语言开发的基于DRH(Deep-Re-Hash)深度哈希分区算法的高性能Key-Value嵌入式数据库
Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。Memcached通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及...
7、路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等; 8、故障转移:任务路由策略选择"故障转移"情况下,...
安装与npm npm install webpack-plugin-hash-output --save-dev带纱yarn add webpack-plugin-hash-output --dev为什么? 还有其他的webpack插件可以在那里散列。 但是,当它们运行时,它们不会“看到”代码的最终...
无线安全破解专用WPA-PSK_Hash_Table_DVD下载地址汇总.
pass-the-hash attack theory and implementation
高级密码学报告------Hash算法与RSA算法分析与研究 适合高级密码学期末作业。 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,而在信息安全中起着举足轻重作用的密码学也就成为信息安全...
前端项目-leaflet-hash,linkable location hashes for leaflet
关于hash攻击的国外最新技术,主要是针对域环境下的攻击手段,相信你懂得!
前端开源库-folder-hash文件夹哈希,在文件夹及其内容上创建哈希校验和-其子级及其内容
esp32s3模组重启日志---image hash failed.txt
开源项目-cznic-hash.zip,Map supporting non-comparable key types