一种数据库联合索引编码方法和系统与流程

文档序号:32306241发布日期:2022-11-23 10:05阅读:56来源:国知局
一种数据库联合索引编码方法和系统与流程

1.本技术涉及数据库管理领域,特别是涉及一种数据库联合索引编码方法、系统、计算机设备和计算机可读存储介质。


背景技术:

2.数据库通常会对表中某些属性创建索引,索引是一种有序数据结构。当查询语句使用索引时,可以让数据库不需要扫描数据,即可直接定位到满足条件的索引记录,从而加速查询速度。
3.在相关技术中,由于联合索引涉及多个属性,当使用kv(key-value)引擎进行存储时,被索引的多个属性在编码时会被放在连续的空间内,因此,可能会使多条数据的索引编码值相同,进而导致在查询时扫描到不必要的数据,影响查询效率。
4.目前,针对相关技术中的联合索引编码方式,由于多个原始数据的索引编码相同,导致查询效率较低的问题,尚未提出有效的解决方案。


技术实现要素:

5.本技术实施例提供了一种数据库联合索引编码方法、系统电子设备和计算机可读存储介质,以至少解决相关技术中联合索引编码方式查询效率较低的问题。
6.第一方面,本技术实施例提供了一种数据库联合索引编码方法,所述方法包括:确定数据库中目标数据表的各条原始数据;获取各条原始数据对应的识别id、属性信息,其中,所述属性信息包括属性类型和属性值,且一条所述原始数据包括至少一组所述属性信息;对各条原始数据分别建立联合索引,其中,所述联合索引中,将各条原始数据和其对应的属性值编码结果存储为键值对形式,且不同属性类型的属性值编码结果之间设置有间隔mark。
7.在其中一些实施例中,对各条原始数据分别建立联合索引包括:对各条原始数据对应的属性值,根据所述属性类型进行字典序排序;对排序完成的属性值进行编码,编码过程中,在不同属性类型的属性值之间添加预设识别符以生成所述间隔mark;将所述原始数据和其对应的属性值编码结果存储为键值对形式,其中,所述属性值编码结果为键,所述原始数据为值。
8.在其中一些实施例中,对各条原始数据分别建立联合索引之后,所述方法还包括:通过预设查询语句在所述数据库中查询目标原始数据,其中,查询方式包括等值查询和范围查询,所述预设查询语句包括属性值和预设标识符,所述预设标识符添加在相邻属性值之间,且不同属性值之间按照字典序排序。
9.在其中一些实施例中,在等值查询的情况下,通过预设查询语句,在所述数据库中
查询目标数据包括:通过在所述数据库的kv存储引擎中,查找与查询语句中的属性值和预设标识符相等的目标键,并根据该目标键确定对应的目标值,得到所述目标数据;在范围查询的情况下,通过预设查询语句,在所述数据库中查询目标数据包括:通过在所述数据库的kv存储引擎中,查找与所述查询语句中的属性值和预设标识符满足特定判别条件的至少一个目标键,并根据所述目标键确定对应的目标值,得到所述目标数据。
10.在其中一些实施例中,所述预设标识符是\0\0。
11.在其中一些实施例中,在任意一条原始数据的所述属性值中包括\0的情况下,对所述属性值进行编码包括:在不同属性类型的属性值之间,添加所述预设识别符\0\0作为所述间隔mark,并对属性值内部的\0,将其重新编码为\0\1。
12.第二方面,本技术实施例提供了一种数据库联合索引编码系统,所述系统包括:确定模块、获取模块和索引建立模块,其中,所述确定模块用于,确定数据库中目标数据表的各条原始数据;所述获取模块用于,获取各条原始数据对应的识别id、属性信息,其中,所述属性信息包括属性类型和属性值,且一条所述原始数据包括至少一组所述属性信息;所述索引建立模块用于,对各条原始数据分别建立联合索引,其中,所述联合索引中,将各条原始数据和其对应的属性值编码结果存储为键值对形式,且不同属性类型的属性值编码结果之间设置有间隔mark。
13.在其中一些实施例中,所述索引建立模块对各条原始数据分别建立联合索引包括:对各条原始数据对应的属性值,根据所述属性类型进行字典序排序;对排序完成的属性值进行编码,编码过程中,在不同属性类型的属性值之间添加预设标识符以生成所述间隔mark;将所述原始数据和其对应的属性值编码结果存储为键值对形式,其中,所述属性值编码结果为键,所述原始数据为值。
14.第三方面,本技术实施例提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的方法。
15.第四方面,本技术实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的方法。
16.相比于相关技术,本技术实施例提供的一种数据库联合索引编码方法,通过确定数据库中目标数据表的各条原始数据;获取各条原始数据对应的识别id、属性信息,其中,属性信息包括属性类型和属性值,且一条原始数据包括至少一组属性信息;对各条原始数据分别建立联合索引,其中,联合索引中,将各条原始数据和其对应的属性值编码结果存储为键值对形式,且不同属性类型的属性值编码结果之间设置有间隔mark。解决了相关技术中联合索引编码方式查询效率较低的问题,极大程度地减少了无关数据的扫描量,提升了查询效率。
附图说明
17.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:图1是根据本技术实施例的一种数据库联合索引编码方法的应用环境示意图;图2是根据本技术实施例的一种数据库联合索引编码方法的流程图;图3是根据本技术实施例的一种数据库联合索引编码系统的结构框图;图4是根据本技术实施例的电子设备的内部结构示意图。
具体实施方式
18.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。基于本技术提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
19.显而易见地,下面描述中的附图仅仅是本技术的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本技术应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本技术公开的内容相关的本领域的普通技术人员而言,在本技术揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本技术公开的内容不充分。
20.在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本技术所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
21.除非另作定义,本技术所涉及的技术术语或者科学术语应当为本技术所属技术领域内具有一般技能的人士所理解的通常意义。本技术所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本技术所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本技术所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本技术所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本技术所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
22.本技术提供的一种数据库联合索引编码方法,可以应用在如图1所示的应用环境中,图1是根据本技术实施例的一种数据库联合索引编码方法的应用环境示意图。如图1所示,用户可以通过客户端10对服务器11发送查询请求(查询语句),以指示服务器11中的该
数据库根据索引查找用户所需的目标数据。本实施例中,通过在索引中不同类型属性值之间增加特定的标识符,以及采用特定结构的查询语句,有效避免了多个原始数据的索引编码相同导致查询效率低下的问题,在不额外增加运算量的情况下,提升了查询效率。
23.在本文中,需要理解的是,所涉及的术语可以是用于实现本发明一部分的技术手段或者其它总结性技术术语。例如,术语可以包括:数据库:数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合;索引:针对数据库中的某个或者某几个属性创建的一种有序数据结构。使用索引可以让数据库不需要扫描数据,而是直接定位到满足条件的索引记录,加速查询速度;联合索引:数据库中对某个表中的多个属性同时创建的索引;kv存储:基于key-value的存储,按照键值对形式进行组织,是一种常用的数据库存储结构;字典序排序:是基于字母顺序排列的单词按字母顺序排列的方法。
24.由于联合索引同时涉及多个属性,当使用kv引擎进行存储时,被索引的多个属性在编码时会被放在连续的空间内,在这种情况下,就有可能造成多个数据的索引编码值相同,从而导致搜索到不相关的数据影响查询效率。
25.结合实例具体分析总结发现,存在如下原因导致上述问题:首先,如下表1(原始数据表)所示:表中有p1和p2两个属性,这两个属性的数据类型都是字符串。另外,除了属性之外,还有原始数据对应的全局唯一的识别id;表1:原始数据表索引建立:对属性p1和p2建立联合索引,记为indexa,该联合索引相当于对p1和p2的排序,其中优先对p1进行字典序排序,如果p1相同,再对p2进行字典序排序,最后,保存索引到id的映射,如下表2所示:表2:联合索引indexa
进一步的,通常会将该联合索引indexa中的被索引属性(p1+p2)按照某种编码方式保存为key,索引指向的原始数据的id保存为value,常见的编码格式如下表3所示:表3:联合索引indexa的编码格式可以看出,采用传统的编码方式,id为3,2,1,4,6的原始数据,其indexa的key都完全相同。因此,在使用该种方式的联合索引时,会将这些被索引属性作为查询条件,从而导致在查询时扫描不必要的数据。
26.例如,使用indexa中的p1进行等值查询,找到满足p1为a的所有数据。在查询时,查询指令会被转换为在索引中查找前缀为a的数据,由于id为1-6都满足前缀条件为a,因此,采用上述编码方式,会将id为1-6的6条数据都扫描出来。但是,实际原始数据只有id为2的一条数据(p1为a,p2为bcd)满足这个条件,因此,这种编码方式在查询时比较低效。
27.同理,在使用indexa中的p1进行范围查询,查找满足p1大于等于abc的数据时,由于所有原始数据的key都大于abc,也会将所有数据都扫描出来,而实际原始数据表中只有id为4、5、6的三个数据满足该条件(p1分别为abc、apple和abcd)。
28.综上,现有技术中,将多个被索引属性无缝的连接在一起,类似这样的编码方式会导致多个原始数据的索引编码完全相同,进而影响了查询性能,无论是等值查询还是范围查询,其查询效率均较低。
29.图2是根据本技术实施例的一种数据库联合索引编码方法的流程图,如图2所示,该流程包括如下步骤:s201,确定数据库中目标数据表的各条原始数据;其中,数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
30.本实施例中,数据库可以但不限于是mysql 、sql server、oracle等关系型数据,也可以是分布式数据库;数据库中保存有多个数据表,这些数据表可以是人员信息表、财税账单表等;。
31.s202,获取各条原始数据对应的识别id、属性信息,其中,属性信息包括属性类型和属性值,且一条原始数据对应至少一组属性信息;其中,在数据库中,每条数据都对应一个全局唯一的识别id,该识别id可以是1.2.3
……
n的数字;进一步的,该属性信息反映各条数据在多个维度上的属性,例如,数据库中保存有一个班级学生信息表,其中,各个学生的学号对应上述识别id。而属性信息包括属性类型和属性值,可以理解,属性类型可以是学生的性别、身高和年龄等类型,属性值是各个学生在各个属性类型下的具体值,例如性别(男)、身高(175cm)。另外,每条原始数据均至少包括一组属性信息。
32.需要说明的是,上述班级学生信息表仅是一种具体的举例,本技术技术方案在实际应用中,并不局限于应用在某一种数据表上,无论是对于数据量较大货较小、数据复杂程度高或低,或者不同领域的数据表,本技术实施例提供的技术方案都可灵活应用。
33.s203,对各条原始数据分别建立联合索引,其中,联合索引中,将各条原始数据和其对应的属性值编码结果存储为键值对形式,且不同属性类型的属性值编码结果之间设置有间隔mark。
34.其中,“联合索引”已在术语解释部分和相关技术缺陷分析部分进行解释说明。此处需要说明的是,本技术中虽然与传统技术类似也采用联合索引,但是具体的,联合索引中“键”的编码方式与现有方式不同,且正是由于编码方式上的不同,本技术相比较于传统方式具备提高查询效率的有益效果。
35.在现有联合索引编码的基础上,通过在不同属性类型的属性值之间添加预设识别符作为间隔mark,通过该间隔mark有效的将不同原始数据的编码区分开来,从而在查询时,帮助用户在最便捷高效的前提下,有效提取出最匹配的目标数据。
36.采用本实施例中的联合索引方式如下表4所示:表4:改进联合索引编码key(p1+p2)value(id)\0\0abcd\0\03a\0\0bcd\0\02ab\0\0cd\0\01abc\0\0d\0\04abcd\0\0\0\06apple\0\0apple\0\05根据表4可以得知;采用本技术方案的的编码结果中,首先,各条数据条目的顺序,以及数据条目中属性值的排列顺序与现有联合索引完全一致;其次,在不同类型的属性值之间(例如p1和p2之间),通过预设识别符区分开,从而解决现有编码方式导致多条数据编码结果相同,降低查询效率的问题。
37.通过上述步骤s201至s203,相比较于相关技术中的联合索引编码方法,本技术实施例在编码时通过在被索引属性值之间添加预设表示符作为mark,进而区分开不同类型的属性值,避免不同属性的编码结果重合;在查询时,对应的只能匹配到正确的目标数据,从而较好的提升查询效率。
38.在其中一些实施例中,对各条原始数据分别建立联合索引,具体包括:1.对各条原始数据对应的属性值,根据属性类型进行字典序排序;2.对排序完成的属性值进行编码,编码过程中,在不同属性类型的属性值之间添加预设识别符作为间隔mark;引入间隔mark之后,能够将不同类别的属性值区分,避免不同原始数据的索引编码相同,同时,还能完整保存索引的排序信息。在后续查询中,能够最大程度的减少查询量。
39.该预设标识符可以是“\0\”。需要说明的是,本实施例中,采用字符“\0\”作为预设标识符,还具备如下有益效果:

采用“\0\”作为预设标识符,能够在编码和解码阶段,利用特殊的cpu指令(例如
sse2、avx等)对索引进行向量化编码和解码,从而加速索引编解码效率。具体的,向量化处理可以一次在一个cpu指令周期内对多个字节进行处理,cpu指令集中也有很多指令能够方便的处理“\0”(例如判断将要处理的这几个字节内是否有\0)。
40.②
由于字符“\0\”本身占用极小存储空间,因此,也能够在引入极小放大空间的前提下,提升查询效率。
41.3.将原始数据和其对应的属性值编码结果存储为键值对形式,其中,属性值编码结果为键,原始数据为值。
42.在其中一些实施例中,对各条原始数据分别建立联合索引之后,用户可以通过预设查询语句,在数据库中查询所需的目标原始数据,具体的:可选的查询方式包括等值查询和范围查询,其中,等值查询就是根据“等于关系”来判断过滤条件,范围查询就是用“大于小于等数学上的条件”来判断过滤条件。
43.由于编码方式有所改变,在查询的时候,同样需要将查询条件做转换。本实施例中,预设查询语句包括属性值和预设标识符,预设标识符添加在相邻属性值之间作为查询语句的间隔mark,属性值的不同序列对应不同属性类型,在等值查询的情况下,通过预设查询语句,在所述数据库中查询目标数据包括:通过在所述数据库的kv存储引擎中,查找与查询语句中的属性值和预设标识符相等的目标键,并根据该目标键确定对应的目标值,得到所述目标数据;在范围查询的情况下,通过预设查询语句,在所述数据库中查询目标数据包括:通过在所述数据库的kv存储引擎中,查找与所述查询语句中的属性值和预设标识符满足特定判别条件的至少一个目标键,并根据所述目标键确定对应的目标值,得到所述目标数据。具体的:等值查询举例如下:在查询满足p1属性为a的数据时,通过在索引中查找编码前缀为a\0\0的数据,拆分该段字符得到p1属性为“a”;进一步的,在kv存储引擎中查找key等于a的数据,由于只有id为2的数据的索引编码“a\0\0bcd\0\0”满足该条件,所以查询结果能够精准匹配。也并不会出现有技术中,由于所有数据的编码都是“abcd”导致匹配到多个无关条目的问题。
44.范围查询举例如下:在查询满足p1大于等于abc的数据时,通过在索引中查找编码大于等于abc的数据,在kv存储引擎中查找key大于等于abc的数据,可以直接发现id为4、5、6的三个索引满足该条件,而不会去扫描不满足这个条件的相应数据。
45.在其中一些实施例中,在某条原始数据对应的属性值本身包含与预设标识符“0\0”部分相同的字符时,为避免索引建立错误,在编码时需要对该中类型的属性值做特殊处理,具体的,例如:在不同属性类型的属性值之间,添加预设识别符\0\0作为间隔mark,并将属性值内部的\0,将其重新编码为\0\1,具体的,举例说明如下:数据库中某个表中有两个字符串属性p1和p2,原始数据如下表5所示:表5:idp1p21applebanana
2apple\0banana其编码结果如下表6所示:表6:keyvalueapple\0\0banana\0\01apple\0\1\0\0banana\0\02可以看出,id为1的数据由于属性中没有\0,将按方式进行编码。而id为2的数据,其p1属性值包含一个\0,若直接进行编码就会导致和预设标识符无法区分,因此,需要将其编码为apple\0\1,使用\0\1代表原始数据中的\0,之后,再按上述方法进行编码,最终联合索引的编码值为apple\0\1\0\0banana\0\0。
46.与此对应的,在查询索引的过程中,系统也会固定将查询语言中的“\0\1”解码为\0,也能够得到原始属性值。
47.本实施例还提供了一种分布式图数据库的身份认证系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
48.图3是根据本技术实施例的一种数据库联合索引编码系统的结构框图,如图3所示,该系统包括:确定模块30、获取模块31和索引建立模块32,其中,确定模块30用于,确定数据库中目标数据表的各条原始数据;获取模块31用于,获取各条原始数据对应的识别id、属性信息,其中,所述属性信息包括属性类型和属性值,且一条所述原始数据包括至少一组所述属性信息;索引建立模块32用于,对各条原始数据分别建立联合索引,其中,联合索引中,将各条原始数据和其对应的属性值编码结果存储为键值对形式,且不同属性类型的属性值编码结果之间设置有间隔mark。
49.在其中一些实施例中,索引建立模块对各条原始数据分别建立联合索引包括:对各条原始数据对应的属性值,根据所述属性类型进行字典序排序;对排序完成的属性值进行编码,编码过程中,在不同属性类型的属性值之间添加预设识别符以生成所述间隔mark;将所述原始数据和其对应的属性值编码结果存储为键值对形式,其中,所述属性值编码结果为键值对中的键,所述原始数据为键值对中的值。
50.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据库联合索引编码方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
51.在一个实施例中,图4是根据本技术实施例的电子设备的内部结构示意图,如图4所示,提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图4所示。该电子设备包括通过内部总线连接的处理器、网络接口、内存储器和非易失性存储器,其中,该非易失性存储器存储有操作系统、计算机程序和数据库。处理器用于提供计算和控制能力,网络接口用于与外部的终端通过网络连接通信,内存储器用于为操作系统和计算机程序的运行提供环境,计算机程序被处理器执行时以实现一种数据库联合索引编码方法,数据库用于存储数据。
52.本领域技术人员可以理解,图4中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
53.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
54.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1