CN106777003B - 一种面向Key-Value存储系统的索引查询方法和系统 - Google Patents

一种面向Key-Value存储系统的索引查询方法和系统 Download PDF

Info

Publication number
CN106777003B
CN106777003B CN201611114427.XA CN201611114427A CN106777003B CN 106777003 B CN106777003 B CN 106777003B CN 201611114427 A CN201611114427 A CN 201611114427A CN 106777003 B CN106777003 B CN 106777003B
Authority
CN
China
Prior art keywords
value
key
block
nodes
prefix
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201611114427.XA
Other languages
English (en)
Other versions
CN106777003A (zh
Inventor
孙辉
陈国栋
徐殷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anhui University
Original Assignee
Anhui University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Anhui University filed Critical Anhui University
Priority to CN201611114427.XA priority Critical patent/CN106777003B/zh
Publication of CN106777003A publication Critical patent/CN106777003A/zh
Application granted granted Critical
Publication of CN106777003B publication Critical patent/CN106777003B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种面向Key‑Value存储系统的索引查询方法和系统,该方法包括:S1、获取Key‑Value数据项存入block,根据block节点生成前缀完全二叉树;S2、获取key值,根据二叉树高度确定key值运用位数k,key值为二进制;S3、获取key值前k位,从key值前k位首位遍历,检索key值前k位中第一个“1”,记录第一个“1”前的位数j;S4、判断j是否小于k,若j小于k,则目标结果i=2j,执行S5;若j不小于k,则目标结果i=2k‑1‑1,执行S6;S5、从key值第j+2位循环检索,检索到“1”时,i=2×(i+1);否则,i=2×i+1;直到j=k,停止检索得到目标结果i,执行S6;S6、通过所述i值,在前缀完全二叉树中检索block[i],判断block[i]是否非空,若block[i]非空,输出目标结果i值;若block[i]为空,将k=k‑1后执行S3,直到k=0。

Description

一种面向Key-Value存储系统的索引查询方法和系统
技术领域
本发明涉及数据索引查询技术领域,尤其涉及一种面向Key-Value存储系统的索引查询方法和系统。
背景技术
随着互联网的快速发展,当今世界已经进入了“大数据”时代,国际数据公司IDC的最新报告预测,从2014年开始的十年内,全球每年产生的数据总量均将增加40%,即约每两年数据总量就将翻一番,到2020年全球数据总量将达到44ZB。伴随着数据量的飞速增长,数据的形式也由传统的结构化数据向着非结构化或半结构化的数据形式方向发展,传统的关系数据库对于这些数据的存储能力显得捉襟见肘,例如为海量文档建立索引、高流量网站的网页服务,以及发送流式媒体数据。除此之外,很多时候对于特定的系统,绝大部分的检索都是基于主键的查询,在这种情况下,关系数据库不能有效地建立索引,使得查询效率低下。在这样的大背景下,非关系型数据库对这些数据存储上的优势日益显现,越来越多应用选择采用非关系型数据库对数据进行存储。近年来,一种可用来管理非关系型数据、具有高可扩展性的数据索引系统:键值(Key-Value,即KV)数据库在众多的数据库系统中脱颖而出。
Key-Value数据库普遍采用树形结构对数据进行组织,随着大数据时代的到来,要在海量的数据中寻找特定的数据,如果采用传统的树的遍历形式无疑将会造成的巨大的时间开销,因此一种能够对特定数据进行快速索引的算法是必不可少的。
尽管当今计算机相关各领域都在飞速发展并取得了巨大的进步,但是不可否认的是高性能存储器的存储容量仍然是影响计算机系统性能的一个瓶颈,例如在基于DRAM内存的Cache缓存系统中,如果有限的存储空间能存储更多的数据,将能够大幅度的提高数据检索的命中率,减少系统到存取速度较慢的磁盘中检索数据,提高系统的整体性能。
为了更好的提高数据的存储空间效率,一种高效的策略是将数据分批的进行压缩处理,即将键值数据项(KV item)分批存放到多个block块中并以block为单位进行压缩处理,关于块间的组织,充分考虑到空间和时间效率,应该将其组织成前缀二叉树的形式。
发明内容
基于背景技术存在的问题,本发明提出了一种面向Key-Value存储系统的索引查询方法和系统,通过将Key-Value数据项存入block中,并将根据block的节点生成前缀完全二叉树,在处理大规模Key-Value存储系统数据时,能够快速准确地通过给定的key值定位其所在的前缀完全二叉树的block节点序号,从而可以快速的从该block节点中获取该key对应的value值。
本发明提出的一种面向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。
其中,在S1中,根据所述block节点生成前缀完全二叉树,具体包括:
S11、初始生成一个block节点作为根节点,并设置该block前缀为0;将获取的键值数据项逐个存入所述节点;
S12、将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
S13、通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
一种面向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。
其中,所述生成模块,具体包括:根节点生成子模块、父节点分裂子模块、虚拟节点补全子模块;
根节点生成子模块,用于初始生成一个block节点作为根节点,并设置该block前缀为“0”;
父节点分裂子模块,用于将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
虚拟节点补全子模块,用于通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
本发明中,通过将Key-Value键值数据项存入block中,并将根据block的节点生成前缀完全二叉树,在处理大规模Key-Value存储系统数据时,能够快速准确地通过给定的key值定位其所在的前缀完全二叉树的block节点序号,从而可以快速的从该block节点中获取该key对应的value值,大大提高数据查询速度及系统的存取性能,减少了不必要的查找,进一步降低了系统的读写延迟。
附图说明
图1为本发明提出的一种面向Key-Value存储系统的索引查询方法实施例1的流程图;
图2为本发明提出的一种面向Key-Value存储系统的索引查询系统的结构图;
图3为本发明提出的一种面向Key-Value存储系统的索引查询系统的前缀完全二叉树的生成模块图;
图4为本发明提出的一种面向Key-Value存储系统的索引查询系统的block节点前缀完全二叉树结构示意图;
图5为本发明提出的一种面向Key-Value存储系统的索引查询方法的实施例2方法流程图;
图6为本发明提出的一种面向Key-Value存储系统的索引查询方法的实施例2实施图;
图7为本发明提出的一种面向Key-Value存储系统的索引查询方法的实验结果对比图。
具体实施方式
参照图1,图1为本发明提出的一种面向Key-Value存储系统的索引查询方法的流程图;
参照图4,图4为本发明提出的一种面向Key-Value存储系统的索引查询系统的block节点前缀完全二叉树结构示意图;
如图1所示,本发明提出的一种面向Key-Value存储系统的索引查询方法,该方法包括以下步骤:
步骤S1,获取Key-Value键值数据项存入block中,并根据所述block节点生成前缀完全二叉树,其中,所述前缀完全二叉树包含真实节点和虚拟节点;
如图4所示,步骤S1包括以下步骤:
S11、初始生成一个block节点作为根节点,并设置该block前缀为0;将获取的键值数据项逐个存入所述节点;
S12、将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
S13、通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树;
在本发明实施例中,为了更好的提高数据的存储空间效率,一种高效的策略是将数据分批的进行压缩处理,即将键值数据项分批存放到多个block块中并以block为单位进行压缩处理,关于块间的组织,充分考虑到空间和时间效率,应该将其组织生成前缀完全二叉树的形式。
步骤S2,获取用户输入的需要检索的key值,并根据所述前缀完全二叉树高度确定所述key值需要运用的位数k,其中所述key值数制为二进制;
在本发明实施例中,所述的key值统一采用二进制数值,其中所述key若非二进制需首先通过hash函数将其转换为二进制,通过完全二叉树性质及该树最大节点序号计算得该树最大深度k。
步骤S3,获取所述key值的前k位,从所述key值前k位中第一位开始遍历,检索到所述key值前k位中第一个“1”,并记录所述第一个“1”前的位数j,其中j,k初始值均为1;
其中,所述key值中每一位上数值只有“1”或“0”,当检索到第一个“1”时,记录所述第一个“1”前的位数j。
步骤S4,判断j是否小于k,如果j小于k,则得到目标结果i,执行S5,其中i=2j,所述i表示block序号;如果j不小于k,则得到目标结果i,执行S6,其中i=2k-1-1,所述i表示block序号;
具体的,S4具体实施方式包括:
如果j小于k,即j<k,此时计算出i=2j
如果j不小于k,说明key的前k位全为0,此时计算出i=2k-1-1;
步骤S5,从所述key值第j+2位即第一个“1”的后一位开始往后循环检索,当检索到“1”时,则将所述i值改变为2×(i+1);否则,就将所述i值改变为2×i+1;直到位数j等于k时,停止检索并得到目标结果i,执行S6;
在该步骤中,从第j+2位开始循环检索直到其位数等于k:
在此期间,若遇到的是“0”,则将i值改变为2×i+1;若遇到的是“1”,将i值改变为2×(i+1);通过循环检索直到key值前k位的值全部检索完,确定此时的i值,得到目标结果i的值。
步骤S6,通过所述目标结果i的值,在前缀完全二叉树中检索到对应的block节点block[i],判断所述block[i]是否为虚拟节点,当判断结果为否时输出所述目标结果i的值,当判断结果为是时则将所述k值减1后执行S3,直到k=0;
在该步骤中,最终的i值代表要检索的block的序号,在前缀完全二叉树中检索block序号,找到对应的block[i],由于在生成block节点的前缀完全二叉树过程中,使用了虚拟节点来补充叶子节点,所以block[i]有可能是虚拟节点,即值为空;当block[i]节点为虚拟节点时,将key值所用的位数k减1,重新进入S3,重新检索,直到k=0时,停止检索。
参照图2,图2为本发明提出的一种面向Key-Value存储系统的索引查询系统的结构图;
参照图3,图3为本发明提出的一种面向Key-Value存储系统的索引查询系统的前缀完全二叉树的生成模块图;
如图2所示,本发明提出的一种面向Key-Value存储系统的索引查询系统,该系统包括:
生成模块201,用于将获取的Key-Value键值数据项存入block中,并根据所述block节点生成前缀完全二叉树,其中,所述前缀完全二叉树包含真实节点和虚拟节点;
如图3所示,在本发明实施例中,生成模块201具体包括:根节点生成子模块、父节点分裂子模块、虚拟节点补全子模块;
根节点生成子模块,用于初始生成一个block节点作为根节点,并设置该block前缀为“0”;
父节点分裂子模块,用于将获取的键值数据项逐个存入所述节点,当所述节点容量达到上限时,将所述节点分裂为两个子block节点,并根据前缀树规则为所述两个子block节点设置相应的前缀,然后将所述两个子block节点的父节点内的键值数据项逐个取相应位数的前缀与所述两个子block节点前缀匹配,若匹配成功,则将所述键值数据项存入所述两个子block节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
虚拟节点补全子模块,用于通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
在本发明实施例中,为了更好的提高数据的存储空间效率,一种高效的策略是将数据分批的进行压缩处理,即将键值数据项分批存放到多个block块中并以block为单位进行压缩处理,关于块间的组织,充分考虑到空间和时间效率,应该将其组织生成前缀完全二叉树的形式。
获取模块202,与生成模块201连接,用于获取用户输入的需要检索的key值,并根据所述前缀完全二叉树高度确定所述key值需要运用的位数k,其中所述key值数制为二进制;
具体的,所述的key值统一采用二进制数值,其中所述key若非二进制需首先通过hash函数将其转换为二进制,通过完全二叉树性质及该树最大节点序号计算得该树最大深度k。
遍历模块203,与获取模块202连接,用于获取所述key值的前k位,从所述key值前k位中第一位开始遍历,检索到所述key值前k位中第一个“1”,并记录所述第一个“1”前的位数j,其中j,k初始值均为1;;
在本发明实施例中,遍历模块203具体用于:所述key值中每一位上数值只有“1”或“0”,当检索到第一个“1”时,记录所述第一个“1”前的位数j。
第一判断模块204,分别与遍历模块203、循环检索模块205、第二判断模块206连接,用于判断j是否小于k,如果j小于k,则得到目标结果i并将所述目标结果i发送到循环检索模块,其中i=2j,所述i表示block序号;如果j不小于k,则得到目标结果i并将所述目标结果i发送到第二判断模块,其中i=2k-1-1,所述i表示block序号;
其中,第一判断模块204具体用于:
如果j小于k,即j<k,此时计算出i=2j
如果j不小于k,说明key的前k位全为0,此时计算出i=2k-1-1;
循环检索模块205,分别与第一判断模块204和第二判断模块206连接,用于从所述key值第j+2位即第一个“1”的后一位开始往后循环检索,当检索到“1”时,则将所述i值改变为2×(i+1);否则,将所述i值改变为2×i+1;直到位数j等于k时,停止检索并得到目标结果i,将目标结果i发送到第二判断模块;
具体的,循环检索模块,具体用于:
从第j+2位即第一个“1”的后一位开始循环检索直到其位数等于k:
在此期间,若遇到的是“0”,则将i值改变为2×i+1;若遇到的是“1”,将i值改变为2×(i+1);通过循环检索直到key值前k位的值全部检索完,确定此时的i值,得到目标结果i的值。
第二判断模块206,分别与第一判断模块204、循环检索模块205、遍历模块203连接,用于通过所述目标结果i的值,在前缀完全二叉树中检索到对应的block节点block[i],判断所述block[i]是否为虚拟节点,当判断结果为否时输出所述目标结果i的值,当判断结果为是时则将所述k值减1后,将k值发送到遍历模块,直到k=0。
具体的,在前缀完全二叉树中检索block序号,找到对应的block[i],由于在生成block节点的前缀完全二叉树过程中,使用了虚拟节点来补充叶子节点,所以block[i]有可能是虚拟节点,即值为空;当block[i]节点为虚拟节点时,将key值所用的位数k减1,将所述k值发送到遍历模块203,重新检索,直到k=0时,停止检索。
参照图5,图5为本发明提出的一种面向Key-Value存储系统的索引查询方法的实施例2方法流程图;
参照图6,图6为本发明提出的一种面向Key-Value存储系统的索引查询方法的实施例2实施图;
如图5和图6所示,本发明提出的实施例2的具体步骤为:
(1)首先检索最深一层block节点;
(1.1)获取要检索键值数据项的key值,假设要检索的key为:001010010...,通过完全二叉树性质及该树最大节点序号计算得该树最大深度k为5,故先取key的前五位00101;
(1.2)00101在第一次出现“1”前共有2个“0”,令个数j=2,故先设置一个变量i,通过公式2j计算出结果并赋值给i得i=4;
(1.3)观察“1”后边的第一个数字为“0”,故利用公式i×2+1计算并将结果赋值给i得i=9;
(1.4)继续观察到下一位数字为“1”,故利用公式2×(i+1)计算并将结果赋值给i得i=20,此时计算结束;
(2)通过上述过程发现该key要检索的数据存在20号block节点内,直接定位发现20号节点并不存在,故继续取key的前四位0010,继续步骤(1)操作,直到找到合适的节点。
参照图7,图7为本发明提出的一种面向Key-Value存储系统的索引查询方法的实验结果对比图;
如图7所示,将本发明提出的面向Key-Value存储系统的索引查询方法和普通检索方法进行检索对比实验,在850次不同数据检索实验中,本发明提出的面向Key-Value存储系统的索引查询方法有71%的次数所花费的数据检索时间低于普通检索方法所花费的数据检索时间。
本发明的技术方案中,通过将Key-Value键值数据项存入block中,并将根据block的节点生成前缀完全二叉树,在处理大规模Key-Value存储系统数据时,能够快速准确地通过给定的key值定位其所在的前缀完全二叉树的block节点序号,从而可以快速的从该block节点中获取该key对应的value值,大大提高数据查询速度及系统的存取性能,减少了不必要的查找,进一步降低了系统的读写延迟。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

Claims (4)

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节点中,重复该操作,直到将父节点所有键值数据项存入到相应的子节点中,此时父节点变空,继续向前缀树中添加键值数据项,直到所有键值数据项存入所述前缀树中;
虚拟节点补全模块,用于通过使用虚拟节点补全所述前缀树使其成为一棵前缀完全二叉树。
CN201611114427.XA 2016-12-07 2016-12-07 一种面向Key-Value存储系统的索引查询方法和系统 Active CN106777003B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611114427.XA CN106777003B (zh) 2016-12-07 2016-12-07 一种面向Key-Value存储系统的索引查询方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611114427.XA CN106777003B (zh) 2016-12-07 2016-12-07 一种面向Key-Value存储系统的索引查询方法和系统

Publications (2)

Publication Number Publication Date
CN106777003A CN106777003A (zh) 2017-05-31
CN106777003B true CN106777003B (zh) 2020-04-03

Family

ID=58874733

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611114427.XA Active CN106777003B (zh) 2016-12-07 2016-12-07 一种面向Key-Value存储系统的索引查询方法和系统

Country Status (1)

Country Link
CN (1) CN106777003B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107330094B (zh) * 2017-07-05 2020-06-16 湖南大学 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法
CN109388641B (zh) * 2018-10-22 2019-10-18 无锡华云数据技术服务有限公司 一种检索键值数据库中键的共同前缀的方法、设备、介质
CN109614411B (zh) * 2018-11-19 2022-03-04 杭州复杂美科技有限公司 数据存储方法、设备和存储介质
CN109450715B (zh) * 2018-12-26 2022-01-25 新华三技术有限公司 消息处理方法和装置
US10541711B1 (en) * 2019-03-29 2020-01-21 Mitsubishi Electric Research Laboratories, Inc. Short block length distribution matching algorithm
CN110473082B (zh) * 2019-08-15 2022-09-23 中国银行股份有限公司 基于标签和判定树的科目处理方法及系统
CN114896620A (zh) * 2022-07-07 2022-08-12 安徽华典大数据科技有限公司 一种基于量子加密数据库索引方法、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211346A (zh) * 2006-12-30 2008-07-02 上海意渊信息科技有限公司 一种优化存储器性能的方法
CN104424222A (zh) * 2013-08-23 2015-03-18 华为技术有限公司 数据库索引方法及装置
CN106095952A (zh) * 2016-06-15 2016-11-09 公安部第三研究所 基于键值云存储的时空范围内海量过车记录快速查询方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8700670B2 (en) * 2010-04-12 2014-04-15 Symantec Corporation Insert optimization for B+ tree data structure scalability

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211346A (zh) * 2006-12-30 2008-07-02 上海意渊信息科技有限公司 一种优化存储器性能的方法
CN104424222A (zh) * 2013-08-23 2015-03-18 华为技术有限公司 数据库索引方法及装置
CN106095952A (zh) * 2016-06-15 2016-11-09 公安部第三研究所 基于键值云存储的时空范围内海量过车记录快速查询方法

Also Published As

Publication number Publication date
CN106777003A (zh) 2017-05-31

Similar Documents

Publication Publication Date Title
CN106777003B (zh) 一种面向Key-Value存储系统的索引查询方法和系统
US11762876B2 (en) Data normalization using data edge platform
Yangui et al. Automatic transformation of data warehouse schema to NoSQL data base: comparative study
JP3849279B2 (ja) インデクス作成方法および検索方法
CN107368527B (zh) 基于数据流的多属性索引方法
CN103678550B (zh) 一种基于动态索引结构的海量数据实时查询方法
Song et al. Solutions for processing k nearest neighbor joins for massive data on mapreduce
CN106874425B (zh) 基于Storm的实时关键词近似搜索算法
CN107357843B (zh) 基于数据流结构的海量网络数据查找方法
CN107330094B (zh) 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法
CN108009265B (zh) 一种云计算环境下的空间数据索引方法
CN111801665A (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
CN104933143A (zh) 获取推荐对象的方法及装置
CN108717448B (zh) 一种面向键值对存储的范围查询过滤方法和键值对存储系统
CN110020001A (zh) 字符串数据的存储、查询方法以及相应的设备
WO2013097065A1 (zh) 一种索引数据处理方法及设备
CN112148830A (zh) 一种基于最大区域网格的语义数据存储与检索的方法及装置
CN113495901A (zh) 一种面向可变长数据块的快速检索方法
Zhong et al. A distributed index for efficient parallel top-k keyword search on massive graphs
Нікітін et al. Combined indexing method in nosql databases
CN103853796B (zh) 数据插入方法和装置
CN113946580B (zh) 一种海量异构日志数据检索中间件
Song et al. FacetsBase: A key-value store optimized for querying on scholarly data
Santhi et al. PFB+ _ Tree For Big Data Memory Management System
Krylov et al. Metrized Small World Properties Based Data Structure.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant