[发明专利]一种面向Key-Value存储系统的索引查询方法和系统有效
申请号: | 201611114427.X | 申请日: | 2016-12-07 |
公开(公告)号: | CN106777003B | 公开(公告)日: | 2020-04-03 |
发明(设计)人: | 孙辉;陈国栋;徐殷 | 申请(专利权)人: | 安徽大学 |
主分类号: | G06F16/22 | 分类号: | G06F16/22 |
代理公司: | 合肥市长远专利代理事务所(普通合伙) 34119 | 代理人: | 屈科辉;傅磊 |
地址: | 230000*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 key value 存储系统 索引 查询 方法 系统 | ||
1.一种面向Key-Value存储系统的索引查询方法,其特征在于,所述方法包括以下步骤:
S1、获取Key-Value键值数据项存入block中,并根据block节点生成前缀完全二叉树,其中,所述前缀完全二叉树包含真实节点和虚拟节点;
S2、获取用户输入的需要检索的key值,并根据所述前缀完全二叉树高度确定所述key值需要运用的位数k,其中所述key值数制为二进制;
S3、获取所述key值的前k位,从所述key值前k位中第一位开始遍历,检索到所述key值前k位中第一个“1”,并记录所述第一个“1”前的位数j,其中j,k初始值均为1;
S4、判断j是否小于k,如果j小于k,则得到目标结果i,执行S5,其中i=2j,所述i表示block序号;如果j不小于k,则得到目标结果i,执行S6,其中i=2k-1-1,所述i表示block序号;
S5、从所述key值第j+2位即第一个“1”的后一位开始往后循环检索,当检索到“1”时,则将所述目标结果i值改变为2×(i+1);否则,将所述i值改变为2×i+1;直到位数j等于k时,停止检索并得到目标结果i,执行S6;
S6、通过所述目标结果i的值,在前缀完全二叉树中检索到对应的block节点block[i],判断所述block[i]是否为虚拟节点,当判断结果为否时输出所述目标结果i的值,当判断结果为是时则将所述k值减1后执行S3,直到k=0。
2.根据权利要求1所述的面向Key-Value存储系统的索引查询方法,其特征在于,在S1中,根据block节点生成前缀完全二叉树,具体包括:
S11、初始生成一个block节点作为根节点,并设置该block前缀为0;将获取的键值数据项逐个存入所述节点;
S12、将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
S13、通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
3.一种面向Key-Value存储系统的索引查询系统,其特征在于,所述系统包括:
生成模块,用于将获取的Key-Value键值数据项存入block中,并根据block节点生成前缀完全二叉树,其中,所述前缀完全二叉树包含真实节点和虚拟节点;
获取模块,用于获取用户输入的需要检索的key值,并根据生成模块生成的前缀完全二叉树高度确定所述key值需要运用的位数k,其中所述key值数制为二进制;
遍历模块,用于获取所述key值的前k位,从所述key值前k位中第一位开始遍历,检索到所述key值前k位中第一个“1”,并记录所述第一个“1”前的位数j,其中j,k初始值均为1;
第一判断模块,用于判断j是否小于k,如果j小于k,则得到目标结果i并将所述目标结果i发送到循环检索模块,其中i=2j,所述i表示block序号;如果j不小于k,则得到目标结果i并将所述目标结果i发送到第二判断模块,其中i=2k-1-1,所述i表示block序号;
循环检索模块,用于从所述key值第j+2位即第一个“1”的后一位开始往后循环检索,当检索到“1”时,则将所述i值改变为2×(i+1);否则,将所述i值改变为2×i+1;直到位数j等于k时,停止检索并得到目标结果i,将目标结果i发送到第二判断模块;
第二判断模块,用于通过所述目标结果i的值,在前缀完全二叉树中检索到对应的block节点blcok[i],判断所述block[i]是否为虚拟节点,当判断结果为否时输出所述目标结果i的值,当判断结果为是时则将所述k值减1后,将k值发送到遍历模块,直到k=0。
4.根据权利要求3所述的面向Key-Value存储系统的索引查询系统,其特征在于,所述生成模块,具体包括:根节点生成模块、父节点分裂模块、虚拟节点补全模块;
根节点生成模块,用于初始生成一个block节点作为根节点,并设置该block前缀为0;
父节点分裂模块,用于将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
虚拟节点补全模块,用于通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于安徽大学,未经安徽大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611114427.X/1.html,转载请声明来源钻瓜专利网。