一种键值数据库的多键查找实现方法

文档序号:6377454阅读:632来源:国知局
专利名称:一种键值数据库的多键查找实现方法
技术领域
本发明涉及计算机技术领域,特别涉及一种键值数据库的多键查找实现方法。
背景技术
经过几十年的发展,关系数据库管理系统(RDBMS)被广泛应用,但是同时暴露出很多先天缺陷,其性能无法适应最新的很多类型的应用需求。NoSQL是近年来发展壮大的新的数据存储管理技术,它试图避免RDBMS在超大数据量和大量多表连接的情况下性能低下的缺点。键值存储引擎(key/value storage engine)是NoSQL的一种技术方案,它存储无模式的键值数据(key/value pair),键值数据在存储引擎内部都是无结构的字节串,存储引擎内部不理解键值数据的内部结构,而由应用程序负责解析和处理键值数据。键值存储引
擎需要支持完整的ACID事务语义和高效的键值数据的存储和访问方法,并且通过用户注册的回调函数理解键值数据的内部结构并且操作键值数据。—般的key-value数据库只能进行单键值的查找,例如可以查找key=某个值的value,而不能查找key (I) =某个值并且key (2)=某个值…并且key (η) =某个值的value。个别的key-value数据库实现了多键的查找功能,例如,berkeleyDB实现了多键值的查找,其通过secondary database (可以理解为主数据表的索引)实现的多键查找。berkeleyDB单键查找是直接通过key的值访问primary database(可以理解为主数据表)来得到value的。参阅图I。图I示出了一种现有技术中的多键查找技术方案。例如,若primarydatabase中存储了用户的信息,key为用户id, value为用户的详细信息,假设为“名字年龄住址”组成的字符串。那么现在可以通过用户的ID在primary database中得到用户的详细信息。若现在的需求是查询所有住址为北京,年龄为20岁的用户,这就需要进行多键查找,也即需要设置key (1)=20并且key (2)=“北京”。那么就需要在primary database上建立 secondary database,在 secondary database 中,key 就是年龄和住址,value 则为用户ID。上述的多键查找的实现实际上是通过先访问secondary database得到用户ID,再通过访问primary database通过用户的ID来实现的。由此,本技术领域的技术人员可以理解的是上述的解决方案总共进行了两次的数据访问,由此带来的缺陷是导致了较多的10开销,因此,这种多键查找的实现方案具有性能低下的缺陷。

发明内容
为解决上述问题,本发明技术方案提供了一种键值数据库的多键查找实现方法,包括为所述键值数据库中的主数据表注册第一键的划分结构,并为所述主数据表索引表注册第二键的划分结构,所述主数据表和索引表的第一键的划分结构和所述第二键的划分结构分别设置所述主数据表和所述索引表的每一行数据的划分方法和每一列数据的比较函数,从而为所述主数据表创建索引时创建出满足多列查找的索引表;
通过所述比较函数以构建出节点间存在多列大小关系的树;通过所述树的根节点查找存有满足查询条件的记录指针的第一个叶节点;以所述第一个叶节点作为起点经过一次遍历找到同时满足查询条件的所有节占.其中,每个节点的查询步骤为如果前一列的比较结果满足查找条 件,则使用下一列的比较函数,直至判断出该节点是否满足多列查询条件。可选地,所述的第一键的划分结构为包columnlnfo结构,所述columnlnfo结构包括以下的参数Keys :数值型,其表示所述主数据表的一行数据划分的列的数目;col_number :空;rd_comfunction:函数的数组,存放了每个列的比较函数;spIit_function:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度可选地,所述的第二键的划分结构为columnlnfo结构,所述columnlnfo结构包括以下的参数Keys :数值型,其表示所述索引表的一行数据划分的列的数目;col_number :数值的数组,表达了所述索引键和所述主数据表的列的对应关系;rd_comfunction:函数的数组,存放了每个列的比较函数;sp I i t_f unct ion:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度。可选地,所述的为所述键值数据库中的主数据表和索引表注册键的划分结构具体为在创建表和索引的函数中增加columnlnfo类型的参数,并且在创建主数据表和索引时导入将所述columnlnfo结构体。可选地,所述的键值数据库为NoSQL数据库。可选地,所述的索引表为一 B树。与现有技术相比,上述技术方案具有下优点本发明的技术方案可以有效、合理地提高多键值查找的效率,其所采用的技术方案简单、高效,开销可以忽略不计,有效节约了资源,并且采用本发明的技术方案提供的这种方法实现的多键值查找,只进行一次索引的查询就可以得到所有符合查询条件的条目,使用方便、高效。


图I是现有技术中的一种键值数据库实现多键查找方法的示意图;图2是本发明实施方式的键值数据库的多键查找实现方法的流程图。
具体实施例方式为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式
做详细的说明。在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式
的限制。本技术领域的技术人员知道,一般的key-value数据库只能进行单键值的查找,例如可以查找key=某个值的value,而不能查找key (I) =某个值并且key (2) =某个值…并且key (η) =某个值的value。个别的key-value数据库实现了多键的查找功能,例如,berkeleyDB实现了多键值的查找,其通过secondarydatabase (可以理解为主数据表的索弓I)实现的多键查找。berkeleyDB单键查找是直接通过key的值访问primary database(可以理解为主数据表)来得到value的。参阅图I。图I示出了一种现有技术中的多键查找技术方案。例如,若primary database中存储了用户的信息,key为用户id, value为用户的详细信息,假设为“名字年龄住址”组成的字符串。那么现在可以通过用户的ID在primarydatabase中得到用户的详细信息。若现在的需求是查询所有住址为北京,年龄为20岁的用户,这就需要进行多键查找,也即需要设置key(l)=20并且key(2)= “北京”。那么就需要在 primary database 上建立 secondary database,在 secondary database 中,key 就是年龄和住址,value则为用户ID。上述的多键查找的实现实际上是通过先访问secondarydatabase得到用户ID,再通过访问primary database通过用户的ID来实现的。由此,本 技术领域的技术人员可以理解的是上述的解决方案总共进行了两次的数据访问,由此带来的缺陷是导致了较多的IO开销,因此,这种多键查找的实现方案具有性能低下的缺陷。为解决现有技术中的问题,本发明的发明人经过研究,提出了一种本发明实施方式的键值数据库的多键查找实现方法。参阅图2,图2示出了本发明实施方式的键值数据库的多键查找方法。如图2所示,本发明实施方式键值数据库的多键查找实现方法,包括步骤SlO :为所述键值数据库中的主数据表注册第一键的划分结构,并为所述主数据表索引表注册第二键的划分结构,所述主数据表和索引表的第一键的划分结构和所述第二键的划分结构分别设置所述主数据表和所述索引表的每一行数据的划分方法和每一列数据的比较函数,从而为所述主数据表创建索引时创建出满足多列查找的索引表;步骤S20 :通过所述比较函数以构建出节点间存在多列大小关系的树;步骤S30 :通过所述树的根节点查找存有满足查询条件的记录指针的第一个叶节占.步骤S40 :以所述第一个叶节点作为起点经过一次遍历找到同时满足查询条件的所有节点;其中,每个节点的查询步骤为如果前一列的比较结果满足查找条件,则使用下一列的比较函数,直至判断出该节点是否满足多列查询条件。其中,所述的第一键的划分结构为columnlnfo结构,所述columnlnfo结构包括以下的参数Keys :数值型,其表示所述主数据表的一行数据划分的列的数目;col_number :空(主数据表不用);rd_comfunction:函数的数组,存放了每个列的比较函数;spIit_function:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度。所述的第二键的划分结构为columnlnfo结构,所述columnlnfo结构包括以下的
参数
Keys :数值型,其表示所述索引表的一行数据划分的列的数目;col_number :数值的数组,表达了索引键和主数据表的列的对应关系;rd_comfunction:函数的数组,存放了每个列的比较函数;sp I i t_f unct ion:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度。其中,所述键值数据库中的主数据表和索引表注册第一键的划分结构和第二键的划分结构方式为在创建表和索引的函数中增加columnlnfo类型的参数,并并且在创建主数据表和索引时导入所述columnlnfo结构体。另外,本发明实施方式中的键值数据库优选为NoSQL数据库。·本技术领域人员知道的是,创建索引需要排序,而排序的实现则需要该种数据类型的比较函数,从而构建出节点间存在大小关系的树。索引的查找就是通过在这棵树上遍历来实现的。支持多列查找的索引排序使用的比较函数是所有列的比较函数,排序时按照次序如果前一列的比较结果相等那么继续使用下一列的比较函数,直到得出比较结果。例如,三个数据条目=2308:09 ;1212:12 ;1220:40 ;我们的列划分的规则是前两个字节为第一列,剩下的字节为一列,那么我们规定第一列为整数,第二列为时间,整数和时间有着不同的比较函数。那么按照上边的排序原则从小到大的排序结果应该为1212:12 ; 1220:40 ;2308:09。实现了多列的排序,从而实现了多列索引的构建,从而实现了多列数据的查找。如上述的例子,若数据表中存储了用户的信息,现在数据库中为每一个用户存储一行字节串,所存储的字节串的内容为“ ID名字年龄住址”,数据连续存储。在为主数据表和索引表注册键值数据库目前并不理解“ID名字年龄住址”是要被分为4个列的。现在我们要为主数据表注册一个columnlnfo结构,columnlnfo结构表达“主数据表的每一行数据怎样划分,每一列数据的比较规则是什么”。所述的columnlnfo结构的内
容如下
成W名称成
keys4 (共分I P, % :f . -5:龄》往i.:丨4 5'j )
col number空(主敎据表:/、用)
rd cunifunctian S令比较扃教,按次序泠:致值比较為ft.字仔忠比较 函敦,数圮比较字圩岛比较函敦
^ P· I i I i'anci ion 行的切分A. ft: 货K I、2, 3.七分.?+丨能.;€'沿正碎的1Π.名字,I龄.住址折&的起始地址和长度为了满足查询所有住址为北京,年龄为20岁的用户的需求,我们需要对查询键住址,年龄两个列创建索引,需要给该索引注册类似的columnlnfo结构
权利要求
1.一种键值数据库的多键查找实现方法,其特征在于,包括 为所述键值数据库中的主数据表注册第一键的划分结构,并为所述主数据表索引表注册第二键的划分结构,所述主数据表和索引表的第一键的划分结构和所述第二键的划分结构分别设置所述主数据表和所述索引表的每一行数据的划分方法和每一列数据的比较函数,从而为所述主数据表创建索引时创建出满足多列查找的索引表; 通过所述比较函数以构建出节点间存在多列大小关系的树; 通过所述树的根节点查找存有满足查询条件的记录指针的第一个叶节点; 以所述第一个叶节点作为起点经过一次遍历找到同时满足查询条件的所有节点; 其中,每个节点的查询步骤为如果前一列的比较结果满足查找条件,则使用下一列的比较函数,直至判断出该节点是否满足多列查询条件。
2.如权利要求I所述键值数据库的多键查找实现方法,其特征在于, 所述的第一键的划分结构为columnlnfo结构,所述columnlnfo结构包括以下的参数 Keys :数值型,其表示所述主数据表的一行数据划分的列的数目; col_number :空; rd_comfunction:函数的数组,存放了每个列的比较函数; split_function:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度。
3.如权利要求I所述的键值数据库的多键查找实现方法,其特征在于,所述的第二键的划分结构为columnlnfo结构,所述columnlnfo结构包括以下的参数 Keys :数值型,其表示所述索引表的一行数据划分的列的数目; col_number :数值的数组,表达了所述索引键和所述主数据表的列的对应关系; rd_comfunction:函数的数组,存放了每个列的比较函数; split_function:行的切分函数,传入行数据和列号,返回该列的起始地址和列的长度。
4.如权利要求2或3所述的键值数据库的多键查找实现方法,其特征在于,所述的为所述键值数据库中的主数据表和索引表注册键的划分结构具体为在创建表和索引的函数中增加columnlnfo类型的参数,并且在创建主数据表和索引时导入将所述columnlnfo结构体。
5.如权利要求I所述的键值数据库的多键查找实现方法,其特征在于,所述的键值数据库为NoSQL数据库。
6.如权利要求I所述的键值数据库的多键查找实现方法,其特征在于,所述的索引表为一 B树。
全文摘要
本发明提供了一种键值数据库的多键查找实现方法,包括为所述键值数据库中的主数据表注册第一键的划分结构并为所述主数据表索引表注册第二键的划分结构,所述的主数据表和索引表的第一键的划分结构和所述第二键的划分结构分别规定了所述主数据表和所述索引表的每一行数据的划分方法和每一列数据的比较规则,从而为所述主数据表创建索引时创建出满足多列查找的索引表。本发明的技术方案可以有效、合理地提高多键值查找的效率,其所采用的技术方案简单、高效,开销可以忽略不计,有效节约了资源,并且采用本发明的技术方案提供的这种方法实现的多键值查找,只进行一次索引的查询就可以得到所有符合查询条件的条目,使用方便、高效。
文档编号G06F17/30GK102955843SQ20121035275
公开日2013年3月6日 申请日期2012年9月20日 优先权日2012年9月20日
发明者郑程光, 赵伟, 赖铮, 孙伟丰, 李泉, 李 浩, 李书淦, 程仁波 申请人:北大方正集团有限公司, 上海方正数字出版技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1