一种面向海量数据检索的多级桶哈希索引方法 【技术领域】
本发明涉及一种面向海量数据检索的多级桶哈希索引方法,属于数据存储、检索技术领域。
背景技术
检索效率是海量数据存储、服务应用系统的一个重要指标,索引技术在数据空间组织和检索中具有重要的作用,目前大型数据库和数据存储应用系统都支持哈希表索引技术,数据来源迅速增长,如何快捷准确地获取感兴趣的信息,成为人们关注的主要问题,因此对海量等特性对检索技术提出了更高的要求,各种信息检索、过滤、提取技术逐渐成为研究的重点。哈希索引的一个非常重要的优点是检索效率不随数据量的增长而增加,影响哈希性能的主要因素是磁盘读写次数和哈希冲突问题。目前哈希索引主要有两种方式,静态哈希索引和动态哈希索引。
【发明内容】
针对现有技术的不足,本发明提供一种面向海量数据检索的多级桶哈希索引方法。
一种面向海量数据检索的多级桶哈希索引方法,包括哈希索引的创建方法和检索方法,哈希索引的创建方法如下:
1)对创建索引的信息确定一个关键字;
2)在计算机内存中建立索引桶的映射表,即关键字的哈希值h和索引桶在磁盘上的存储位置c;
3)判断索引桶是否在磁盘上,即判断存储位置的值是否等于8个字节的最大值;如果等于8个字节的最大值,说明磁盘上没有已存储的索引桶,继续步骤4);如果不等于8个字节的最大值,说明磁盘上已有已存储的索引桶,转步骤(7);
4)磁盘上没有已存储的索引桶时,在磁盘上创建一个新的磁盘块d并存储信息,建立一个新的索引桶,确定新的索引桶在磁盘块d内的序号;
5)更新映射表,使c=d;
6)更新磁盘,反复存储;
7)磁盘上已有已存储的索引桶时,确定该索引桶在磁盘块内的序号;
8)判断该索引桶是否有足够的空间存储新的关键字,如果有足够的空间,转步骤(6);如果没有足够的空间,关键字在该索引桶溢出,存储到磁盘块内溢出桶;如果磁盘块内溢出桶也没有足够的空间,关键字在磁盘块内溢出桶溢出,存储到全局溢出桶。
哈希索引的检索方法如下:
1)对待检索索引的信息确定一个关键字;
2)读映射表;
3)判断待检索索引桶是否在磁盘上,即判断存储位置的值是否等于8个字节的最大值;如果等于8个字节的最大值,说明磁盘上没有已存储的待检索索引桶,检索结束;如果不等于8个字节的最大值,说明磁盘上已有已存储的待检索索引桶,转步骤(4);
4)如果不等于8个字节的最大值,从映射表内获取待检索索引桶号和该索引桶所在磁盘块的磁盘块号;
5)桶内检索,如果检索到,则检索结束;如果检索不到,在磁盘块内溢出桶检索;
6)在磁盘块内溢出桶检索到,检索结束;如果在磁盘块内溢出桶检索不到,则在全局溢出桶检索,检索结束。
当存储和检索海量数据时,索引文件本身较大,哈希索引占用空间较大,为了尽量减小哈希索引文件,提高磁盘利用效率和文件读性能,本发明提供了桶映射表,避免了哈希索引文件中的空桶;数据检索时,为了减少磁盘读次数,本发明提供了缓存管理,提高了内存的利用率,当桶的数据在内存中时,直接从内存取数据,避免了磁盘的读操作;为了减少哈希冲突引起的性能下降,本发明提供了基于磁盘块结构的块内溢出桶和全局溢出桶,减少了冲突引起的磁盘读写操作,提高了效率,实验证明本发明具有很高的实用价值。
本发明能充分利用磁盘和内存,并减少磁盘读写次数,提高海量数据存储、检索效率。
【附图说明】
图1为索引创建流程图。
图2为索引检索流程图。
具体实施方式:
实施例:
一种面向海量数据检索的多级桶哈希索引方法,包括哈希索引的创建方法和检索方法,哈希索引的创建方法如下:
1)对创建索引的信息确定一个关键字;
2)在计算机内存中建立索引桶地映射表,即关键字的哈希值h和索引桶在磁盘上的存储位置c;
3)判断索引桶是否在磁盘上,即判断存储位置的值是否等于8个字节的最大值;如果等于8个字节的最大值,说明磁盘上没有已存储的索引桶,继续步骤4);如果不等于8个字节的最大值,说明磁盘上已有已存储的索引桶,转步骤(7);
4)磁盘上没有已存储的索引桶时,在磁盘上创建一个新的磁盘块d并存储信息,建立一个新的索引桶,确定新的索引桶在磁盘块d内的序号;
5)更新映射表,使c=d;
6)更新磁盘,反复存储;
7)磁盘上已有已存储的索引桶时,确定该索引桶在磁盘块内的序号;
8)判断该索引桶是否有足够的空间存储新的关键字,如果有足够的空间,转步骤(6);如果没有足够的空间,关键字在该索引桶溢出,存储到磁盘块内溢出桶;如果磁盘块内溢出桶也没有足够的空间,关键字在磁盘块内溢出桶溢出,存储到全局溢出桶。
哈希索引的检索方法如下:
1)对待检索索引的信息确定一个关键字;
2)读映射表;
3)判断待检索索引桶是否在磁盘上,即判断存储位置的值是否等于8个字节的最大值;如果等于8个字节的最大值,说明磁盘上没有已存储的待检索索引桶,检索结束;如果不等于8个字节的最大值,说明磁盘上已有已存储的待检索索引桶,转步骤(4);
4)如果不等于8个字节的最大值,从映射表内获取待检索索引桶号和该索引桶所在磁盘块的磁盘块号;
5)桶内检索,如果检索到,则检索结束;如果检索不到,在磁盘块内溢出桶检索;
6)在磁盘块内溢出桶检索到,检索结束;如果在磁盘块内溢出桶检索不到,则在全局溢出桶检索,检索结束。