一种哈希数据库的配置方法和装置制造方法
【专利摘要】本发明实施例公开了一种哈希数据库的配置方法,包括:在磁盘上开辟索引区和数据区,其中,所述索引区由p个大小相等的磁盘页面组成;接收到Key-Value对的分配请求,将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的n个Value分配至所述数据区中,m、n和p均为大于1的整数。本发明实施例还公开了一种哈希数据库的配置装置。采用本发明,提高哈希数据库的访问效率。
【专利说明】一种哈希数据库的配置方法和装置
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种哈希数据库的配置方法和装置。
【背景技术】
[0002]随着网络的发展,信息呈现爆炸性增长,人类的数据达到前所未有的规模,这些超大规模的数据存储和管理已经成为一大挑战。基于DHT (Distributed Hash Table)技术的P2P (Pear to Pear)存储系统拥有很高的扩展性,支持大规模的数据存储,可以较好地应对这一挑战,这种存储系统的底层存储引擎一般是Key-Value数据库,以下简称K-V数据库,即以键值对形式进行数据存储和访问的非关系型数据库。其通常的数据访问操作有插入,查找,删除,数据访问形式一般如下:put (key, &value), get (key, &value), delete(key),其中key为数据的唯一标识,value即为数据内容。下文中put, get, delete分别对应插入,查找和删除操作。
[0003]变长Hash K-V数据库是一种常见的哈希数据库,这种数据库可以存储变长的Key和Value,其基本原理是通过哈希算法确定每个Key和Value的存储位置,当遇到Hash冲突时,使用特定的数据结构和二叉树算法来解决。其逻辑结构如图1所示,图1中,Hash K-V数据库从逻辑上分为四个部分,分别为:Bucket Array:即Hash桶,其大小为Hash空间的大小,其中存储的内容为每个键值对(Key Value pair)所对应的在存储介质的位置;Key:即每个键值对的键,存储key的值;Value:即每个键值对的值,存储value的值;Ptr:即当Hash冲突发生时,存储相同Hash值的下一个键值对的位置(或偏移量);以上部件构成了Hash K-V数据库的通用结构。
[0004]由于使用了哈希算法,根据哈希算法的固有特性,不同的输入得到的哈希值可能相等,这种不定长Hash K-V数据库在性能设计上的关键在于哈希冲突的处理方式。由于该数据库采用二叉树来解决冲突的Key-Value对,当数据量过大时,树的深度会较大,每次需要读取、更新叶子节点上的Key-Value时就需要在磁盘上随机读取整个二叉树上的一些节点,造成了性能抖动过大,形成性能长尾,性能在数据量较大压力较大时会出现急剧下降的情况。
【发明内容】
[0005]本发明实施例所要解决的技术问题在于,提供一种哈希数据库的配置方法和装置。可解决现有哈希数据库的访问效率低的不足。
[0006]为了解决上述技术问题,本发明提供了一种哈希数据库的配置方法,包括:
[0007]在磁盘上开辟索引区和数据区,其中,所述索引区由p个大小相等的磁盘页面组成;
[0008]接收到Key-Value对的分配请求,将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的n个Value分配至所述数据区中,m、n和p均为大于I的整数。[0009]在第一种可能的实现方式中,所述将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中的步骤包括:
[0010]从m个Key中选取一个待分配Key进行哈希运算得到哈希值;
[0011]根据所述哈希值和磁盘页面的数量p进行求模得到落入的磁盘页面的序号;
[0012]将所述待分配Key存储至所述序号对应的磁盘页面。
[0013]结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
[0014]在所述磁盘上开辟扩展区,其中,所述扩展区由q个大小相等的扩展页面组成,q为大于I的整数;
[0015]若所述索引区中的磁盘页面发生溢出时,将溢出的Key存储至所述扩展页面中。
[0016]结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述将待分配Key分配至所述序号对应的磁盘页面的步骤包括:
[0017]若所述序号对应的磁盘页面的剩余容量小于所述待分配Key的长度;
[0018]在所述扩展区中查询其剩余容量大于所述待分配Key长度的扩展页面;
[0019]将所述待分配Key存储至所述扩展页面中。
[0020]结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,还包括:
[0021]采用Bitmap技术管理所述扩展区中q个扩展页面的分配和回收。
[0022]结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,还包括:
[0023]将哈希值相同的磁盘页面及扩展页面组成链表,其中磁盘页面位于所述链表的头部。
[0024]结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,还包括:
[0025]在所述磁盘开辟备份区,并将所述索引区和所述扩展区中的数据的副本拷贝至所述备份区,其中,所述备份区和所述索引区及扩展区不相邻。
[0026]本发明第二方面提供了一种哈希数据库的配置装置,包括:
[0027]开辟模块,用于在磁盘上开辟索引区和数据区,其中,所述索引区由p个大小相等的磁盘页面组成;
[0028]分配模块,用于接收到Key-Value对的分配请求,将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的n个Value分配至所述数据区中,m、n和p均为大于I的整数。
[0029]在第一种可能的实现方式中,所述分配模块包括:
[0030]计算单元,用于从m个Key中选取一个待分配Key进行哈希运算得到哈希值;
[0031]求模单元,用于根据所述哈希值和磁盘页面的数量p进行求模得到落入的磁盘页面的序号;
[0032]分配单元,用于将所述待分配Key存储至所述序号对应的磁盘页面。
[0033]结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
[0034]溢出控制模块,用于在所述磁盘上开辟扩展区,其中,所述扩展区由q个大小相等的扩展页面组成,q为大于I的整数;若所述索引区中的磁盘页面发生溢出时,将溢出的Key存储至所述扩展页面中。
[0035]结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述分配单元用于若所述序号对应的磁盘页面的剩余容量小于所述待分配Key的长度;[0036]在所述扩展区中查询其剩余容量大于所述待分配Key长度的扩展页面;
[0037]将所述待分配Key存储至所述扩展页面中。
[0038]结合第二方面得第三种可能的实现方式,在第四种可能的实现方式中,还包括:
[0039]管理模块,用于采用Bitmap技术管理所述扩展区中q个扩展页面的分配和回收。
[0040]结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,还包括:
[0041]生成模块,用于将哈希值相同的磁盘页面及扩展页面组成链表,其中磁盘页面位于所述链表的头部。
[0042]结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,还包括:
[0043]备份模块,用于在所述磁盘开辟备份区,并将所述索引区和所述扩展区中的数据的副本拷贝至所述备份区,其中,所述备份区和所述索引区及扩展区不相邻。
[0044]实施本发明,具有如下有益效果:
[0045]通过将哈希数据库的Key-Value对中的Key和Value进行分离,分别存储至磁盘上开辟的索引区和数据区,在接收到对哈希数据库的操作请求时,避免产生大量的磁盘IO操作,在Key-Value对的数量较大时,磁盘IO操作的次数稳定,提高了哈希数据库的操作效率。
【专利附图】
【附图说明】
[0046]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047]图1是现有技术中哈希数据库的结构示意图;
[0048]图2是本发明第一实施例的一种哈希数据库的配置方法的流程示意图;
[0049]图3是本发明第二实施例的一种哈希数据库的配置方法的流程示意图;
[0050]图4本发明实施例的磁盘及哈希数据库的空间布局示意图;
[0051]图5是本发明第一实施例的一种哈希数据库的配置装置的结构示意图;
[0052]图6是本发明第二实施例的一种哈希数据库的配置装置的结构示意图;
[0053]图7是图6中分配模块的结构示意图;
[0054]图8是本发明第三实施例的一种哈希数据库的配置装置的结构示意图。
【具体实施方式】
[0055]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056]参见图2,为本发明第一实施例的一种哈希数据库的配置方法的流程示意图,在本实施例中,所述方法包括:
[0057]S101、在磁盘上开辟索引区和数据区,其中,所述索引区由p个大小相等的磁盘页面组成。[0058]具体的,磁盘上的空闲空间处开辟索引区和数据区,索引区用于存储哈希数据库的Key-Value对中的Key,数据区用于存储哈希数据库的Key-Value对中的Value,Key-Value对中的Key和Value分离,其中,索引区由p个大小相等的磁盘页面组成,每个磁盘页面存储哈希值相同的Key。例如,每个磁盘页面的大小均为8K字节
[0059]S102、接收到Key-Value对的分配请求,将所述Key-Value对中的m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的m个Value分配至所述数据区中
[0060]具体的,Key-Value对为哈希数据库中预先配置的,Key与Value是多对一的关系,即至少一个Key与一个Value存在映射关系,Key-Value对中由m个Key和n个Value组成,m > n,将m个Key分配到索引区的p个磁盘页面中,同时将n个Value分配到数据区中。
[0061]每个Key个长度为固定值,假设Key的长度均为IK字节,每个磁盘页面的容量为8K字节,则索引区的每个磁盘页面中可存储8K/1K=8个Key,考虑到Key的描述信息需要占用一定的存储空间,实际上每个磁盘页面可存储的Key的数量为7个;m个Key分配到p个磁盘页面中,具体分配方法为=Key经过哈希运算后求模落在某一个磁盘页面中,如果哈希算法均匀性好,那么每个Key落入到各个磁盘页面的概率是相同的,概率都为1/p,指定某个磁盘页面为空的概率为(1-1/p) ~m,空的磁盘页面(即Key的数量为0的磁盘页面)的数量为p* (1-1/p) ~m,当p, n的值足够大时,空的磁盘页面的数量约等于n* (1/e) ' (m/n);指定某个磁盘页面有k个Key的概率为C(m, k)*(l/p) ~k*(l_l/p) ~ (m-k) ,C(m, k)表示求组合数。假设Key的数量m=8000000,磁盘页面的数量p=2621431,计算结果图表1所示
[0062]
【权利要求】
1.一种哈希数据库的配置方法,其特征在于,包括: 在磁盘上开辟索引区和数据区,其中,所述索引区由P个大小相等的磁盘页面组成; 接收到键-值Key-Value对的分配请求,将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的n个Value分配至所述数据区中,m、n和P均为大于I的整数。
2.如权利要求1所述的方法,其特征在于,所述将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中的步骤包括: 从m个Key中选取一个待分配Key进行哈希运算得到哈希值; 根据所述哈希值和磁盘页面的数量P进行求模得到落入的磁盘页面的序号; 将所述待分配Key存储至所述序号对应的磁盘页面。
3.如权利要求2所述的方法,其特征在于,还包括: 在所述磁盘上开辟扩展区,其中,所述扩展区由q个大小相等的扩展页面组成,q为大于I的整数; 若所述索引区中的磁盘页面发生溢出时,将溢出的Key存储至所述扩展页面中。
4.如权利要求3所述的方法,其特征在于,所述将待分配Key分配至所述序号对应的磁盘页面的步骤包括: 若所述序号对应的磁盘页面的剩余容量小于所述待分配Key的长度; 在所述扩展区中查询其剩余容量大于所述待分配Key长度的扩展页面; 将所述待分配Key存储至所述扩展页面中。
5.如权利要求4所述的方法,其特征在于,还包括: 采用Bitmap技术管理所述扩展区中q个扩展页面的分配和回收。
6.如权利要求5所述的方法,其特征在于,还包括: 将哈希值相同的磁盘页面及扩展页面组成链表,其中磁盘页面位于所述链表的头部。
7.如权利要求6所述的方法,其特征在于,还包括: 在所述磁盘开辟备份区,并将所述索引区和所述扩展区中的数据的副本拷贝至所述备份区,其中,所述备份区和所述索引区及扩展区不相邻。
8.一种哈希数据库的配置装置,其特征在于,包括: 开辟模块,用于在磁盘上开辟索引区和数据区,其中,所述索引区由P个大小相等的磁盘页面组成; 分配模块,用于接收到Key-Value对的分配请求,将所述Key-Value对中m个Key分配至所述索引区的磁盘页面中,且将所述Key-Value对中的n个Value分配至所述数据区中,m、n和p均为大于I的整数。
9.如权利要求8所述的装置,其特征在于,所述分配模块包括: 计算单元,用于从m个Key中选取一个待分配Key进行哈希运算得到哈希值; 求模单元,用于根据所述哈希值和磁盘页面的数量p进行求模得到落入的磁盘页面的序号; 分配单元,用于将所述待分配Key存储至所述序号对应的磁盘页面。
10.如权利要求9所述的装置,其特征在于,还包括: 溢出控制模块,用于在所述磁盘上开辟扩展区,其中,所述扩展区由q个大小相等的扩展页面组成,q为大于I的整数;若所述索引区中的磁盘页面发生溢出时,将溢出的Key存储至所述扩展页面中。
11.如权利要求10所述的装置,其特征在于,所述分配单元用于若所述序号对应的磁盘页面的剩余容量小于所述待分配Key的长度; 在所述扩展区中查询其剩余容量大于所述待分配Key长度的扩展页面; 将所述待分配Key存储至所述扩展页面中。
12.如权利要求11所述的装置,其特征在于,还包括: 管理模块,用于采用Bitmap技术管理所述扩展区中q个扩展页面的分配和回收。
13.如权利要求12所述的装置,其特征在于,还包括: 生成模块,用于将哈希值相同的磁盘页面及扩展页面组成链表,其中磁盘页面位于所述链表的头部。
14.如权利要求13所述的装置,其特征在于,还包括: 备份模块,用于在所述磁盘开辟备份区,并将所述索引区和所述扩展区中的数据的副本拷贝至所述备份区,其中,所述备份区和所述索引区及扩展区不相邻。
【文档编号】G06F17/30GK103593477SQ201310627860
【公开日】2014年2月19日 申请日期:2013年11月29日 优先权日:2013年11月29日
【发明者】张雷, 鲍栋 申请人:华为技术有限公司