1.本发明涉及数据查询技术领域,特别涉及一种基于数据库的数据查询方法及终端。
背景技术:2.目前大部分的互联网系统都使用mysql来进行数据库存储,mysql中一般都使用innodb作为其存储引擎,而innodb存储引擎下库表的数据存储是使用b+树作为存储数据结构的。
3.b+树是一种多路平衡查找树,其在非叶子节点上存储索引字段以及索引指针,在叶子节点上存储整条数据的具体信息。一般每个非叶子节点的容量在16k,每个索引以及索引指针容量可计算,则一般树高在3层左右的b+树能够存储1000w左右的数据量,当超过1000w数据量时,b+树将会自动增加层次,变成4层左右,此时每次查询数据将会变成4次io,增加查询耗时。
4.因此,对于数据量超过1000w的数据一般会进行分表存储,让单表数据量保持在1000w左右,这样能够保持最大的查询效率。但是分表方式将会带来分页查询复杂度的上升,并且有些系统无法支持分表方式,造成改造难度大或者无法改造。
技术实现要素:5.本发明所要解决的技术问题是:提供一种基于数据库的数据查询方法及终端,能够减少多层级数据结构的数据查询耗时,提高数据查询效率。
6.为了解决上述技术问题,本发明采用的技术方案为:
7.一种基于数据库的数据查询方法,包括步骤:
8.接收数据库查询请求,根据所述数据库查询请求得到待查询库表;
9.判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。
10.为了解决上述技术问题,本发明采用的另一种技术方案为:
11.一种基于数据库的数据查询终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
12.接收数据库查询请求,根据所述数据库查询请求得到待查询库表;
13.判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。
14.本发明的有益效果在于:根据数据库查询请求得到待查询库表,当待查询库表存在于配置文件中时,通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询;当待查询库表不存在于配置文件中时,通过缓冲池以及io请
求进行数据查询。因此通过增加了独立缓存进行根节点的存储,以及增加了缓冲池进行树形结构的节点存储,能够减少io请求的数量,对于多层级的树形数据结构,能够减少数据查询耗时,提高数据查询效率。
附图说明
15.图1为本发明实施例的一种基于数据库的数据查询方法的流程图;
16.图2为本发明实施例的一种基于数据库的数据查询终端的示意图;
17.图3为本发明实施例的一种基于数据库的数据查询方法的模块图;
18.标号说明:
19.1、一种基于数据库的数据查询终端;2、存储器;3、处理器。
具体实施方式
20.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
21.请参照图1,本发明实施例提供了一种基于数据库的数据查询方法,包括步骤:
22.接收数据库查询请求,根据所述数据库查询请求得到待查询库表;
23.判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。
24.从上述描述可知,本发明的有益效果在于:根据数据库查询请求得到待查询库表,当待查询库表存在于配置文件中时,通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询;当待查询库表不存在于配置文件中时,通过缓冲池以及io请求进行数据查询。因此通过增加了独立缓存进行根节点的存储,以及增加了缓冲池进行树形结构的节点存储,能够减少io请求的数量,对于多层级的树形数据结构,能够减少数据查询耗时,提高数据查询效率。
25.进一步地,所述先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询包括:
26.在独立缓存中查询待查询库表的根节点,判断所述缓冲池中是否仅存在非叶子节点,若是,则根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据;
27.否则,根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点在缓冲池中查询叶子节点,若未查找到所需的叶子节点,则通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据。
28.由上述描述可知,通过缓冲池与io请求结合的方法,或者独立缓存、缓冲池与io请求结合的方法进行数据查询,均能够减少io请求的次数,以此方式减少数据查询耗时。
29.进一步地,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前包括:
30.根据数据库每一库表的树形结构,从根节点开始依次将节点存储在缓冲池中,直至存储的节点数量达到阈值。
31.由上述描述可知,从根节点开始将节点存储在缓冲池,能够保证根节点能够保存在缓冲池,由于树形结构的数据查询是从根节点开始的,以此方式能够永久保存根节点数据,永久减少一次io请求。
32.进一步地,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前还包括:
33.设置配置文件,若将数据库库表添加至所述配置文件中,则将所述数据库库表中的根节点数据存储在独立缓存中。
34.由上述描述可知,在配置文件的库表,将根节点数据存储在独立缓存中,进一步提高了数据查询效率。
35.进一步地,还包括:
36.在对数据库库表进行更新时,若所述数据库库表存在于配置文件中,则判断所述数据库库表进行更新库表的根节点是否变化,若是,则对独立缓存中的对应的根节点同步更新。
37.由上述描述可知,在数据更新时且根节点变更时,同步更新独立缓存中的根节点,能够保障根节点数据的永久保存。
38.请参照图2,本发明另一实施例提供了一种基于数据库的数据查询终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
39.接收数据库查询请求,根据所述数据库查询请求得到待查询库表;
40.判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。
41.从上述描述可知,根据数据库查询请求得到待查询库表,当待查询库表存在于配置文件中时,通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询;当待查询库表不存在于配置文件中时,通过缓冲池以及io请求进行数据查询。因此通过增加了独立缓存进行根节点的存储,以及增加了缓冲池进行树形结构的节点存储,能够减少io请求的数量,对于多层级的树形数据结构,能够减少数据查询耗时,提高数据查询效率。
42.进一步地,所述先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询包括:
43.在独立缓存中查询待查询库表的根节点,判断所述缓冲池中是否仅存在非叶子节点,若是,则根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据;
44.否则,根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点在缓冲池中查询叶子节点,若未查找到所需的叶子节点,则通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据。
45.由上述描述可知,通过缓冲池与io请求结合的方法,或者独立缓存、缓冲池与io请求结合的方法进行数据查询,均能够减少io请求的次数,以此方式减少数据查询耗时。
46.进一步地,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表
之前包括:
47.根据数据库每一库表的树形结构,从根节点开始依次将节点存储在缓冲池中,直至存储的节点数量达到阈值。
48.由上述描述可知,从根节点开始将节点存储在缓冲池,能够保证根节点能够保存在缓冲池,由于树形结构的数据查询是从根节点开始的,以此方式能够永久保存根节点数据,永久减少一次io请求。
49.进一步地,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前还包括:
50.设置配置文件,若将数据库库表添加至所述配置文件中,则将所述数据库库表中的根节点数据存储在独立缓存中。
51.由上述描述可知,在配置文件的库表,将根节点数据存储在独立缓存中,进一步提高了数据查询效率。
52.进一步地,还包括:
53.在对数据库库表进行更新时,若所述数据库库表存在于配置文件中,则判断所述数据库库表进行更新库表的根节点是否变化,若是,则对独立缓存中的对应的根节点同步更新。
54.由上述描述可知,在数据更新时且根节点变更时,同步更新独立缓存中的根节点,能够保障根节点数据的永久保存。
55.本发明上述的一种基于数据库的数据查询方法及终端,适用于树形数据结构的库表,减少其数据查询的io请求次数,以下通过具体的实施方式进行说明:
56.实施例一
57.请参照图1,一种基于数据库的数据查询方法,包括步骤:
58.存在一个数据查询开关,若数据查询开关开启,则执行步骤s1。
59.s1、接收数据库查询请求,根据所述数据库查询请求得到待查询库表。
60.s11、根据数据库每一库表的树形结构,从根节点开始依次将节点存储在缓冲池中,直至存储的节点数量达到阈值。
61.具体的,在本实施例中,通过缓存重要索引的关键节点至buffer pool(缓冲池)中,当树高超过4层时,优先缓存最高层级的非叶子节点至buffer pool中,则后续该索引查询的次数都将由4次io缩减至3次io。
62.将树的根节点存储至缓冲池中,则每一张已配置的表都只需要永久缓存1个根节点数据。如果缓冲池内存资源充足,可以考虑缓存根节点下一层节点数据,再次提高数据库查询效率。
63.s12、设置配置文件,若将数据库库表添加至所述配置文件中,则将所述数据库库表中的根节点数据存储在独立缓存中。
64.请参照图3,在buffer pool的上层增加一个缓存代理层,缓存代理层通过判断库表是否存在于配置文件中,来判断如何进行数据查询,而存在于配置文件中的库表的根节点数据存储在独立缓存中。
65.s2、判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓
冲池以及io请求进行数据查询。
66.其中,待查询库表存在于配置文件中,在独立缓存中查询待查询库表的根节点,判断所述缓冲池中是否仅存在非叶子节点,若是,执行步骤s21,否则,执行步骤s22。
67.s21、根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据;
68.s22、根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点在缓冲池中查询叶子节点,若未查找到所需的叶子节点,则通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据。
69.待查询库表不存在于配置文件中,执行步骤s23。
70.s23、在缓冲池中查询待查询库表的根节点,根据查询到的根节点在缓冲池中查询非叶子节点,若不存在非叶子节点,则通过io请求在树形库表中查询非叶子节点和叶子节点,若存在非叶子节点,则根据查询到的非叶子节点在缓冲池中查询叶子节点,若不存在叶子节点,则通过io请求在树形库表中查询到叶子节点。
71.在一些实施例中,在对数据库库表进行更新时,若所述数据库库表存在于配置文件中,则判断所述数据库库表进行更新库表的根节点是否变化,若是,则对独立缓存中的对应的根节点同步更新。
72.具体的,每次数据写入时,需要优先判断该b+树是否有进行平衡转化,即判断该树的根节点是否有进行变更,如果未有变更则无需处理,如果有变更,则同步更新该根节点数据至缓存代理层中的独立缓存中,同时无需设置缓存过期时间,以保证该缓存永久存在。
73.因此本实施例,可以支持无论树形数据结构是2层,3层,4层等结构,都可以将根节点数据永久缓存,进而永久减少一次数据io,能够明显提高数据查询效率,提高系统性能。
74.实施例二
75.请参照图2,一种基于数据库的数据查询终端1,包括存储器2、处理器3以及存储在所述存储器2上并可在处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一的一种基于数据库的数据查询方法的各个步骤。
76.综上所述,本发明提供的一种基于数据库的数据查询方法及终端,根据数据库查询请求得到待查询库表,当待查询库表存在于配置文件中时,通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询;当待查询库表不存在于配置文件中时,通过缓冲池以及io请求进行数据查询。其中,从根节点开始将节点存储在缓冲池,能够保证根节点能够保存在缓冲池,由于树形结构的数据查询是从根节点开始的,以此方式能够永久保存根节点数据,永久减少一次io请求;并且在数据更新时且根节点变更时,同步更新独立缓存中的根节点,能够保障根节点数据的永久保存。因此通过增加了独立缓存进行根节点的存储,以及增加了缓冲池进行树形结构的节点存储,能够减少io请求的数量,对于多层级的树形数据结构,能够减少数据查询耗时,提高数据查询效率。
77.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
技术特征:1.一种基于数据库的数据查询方法,其特征在于,包括步骤:接收数据库查询请求,根据所述数据库查询请求得到待查询库表;判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。2.根据权利要求1所述的一种基于数据库的数据查询方法,其特征在于,所述先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询包括:在独立缓存中查询待查询库表的根节点,判断所述缓冲池中是否仅存在非叶子节点,若是,则根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据;否则,根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点在缓冲池中查询叶子节点,若未查找到所需的叶子节点,则通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据。3.根据权利要求1所述的一种基于数据库的数据查询方法,其特征在于,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前包括:根据数据库每一库表的树形结构,从根节点开始依次将节点存储在缓冲池中,直至存储的节点数量达到阈值。4.根据权利要求1所述的一种基于数据库的数据查询方法,其特征在于,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前还包括:设置配置文件,若将数据库库表添加至所述配置文件中,则将所述数据库库表中的根节点数据存储在独立缓存中。5.根据权利要求1至4任一所述的一种基于数据库的数据查询方法,其特征在于,还包括:在对数据库库表进行更新时,若所述数据库库表存在于配置文件中,则判断所述数据库库表进行更新库表的根节点是否变化,若是,则对独立缓存中的对应的根节点同步更新。6.一种基于数据库的数据查询终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:接收数据库查询请求,根据所述数据库查询请求得到待查询库表;判断所述待查询库表是否存在于配置文件中,若是,则先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询,否则,通过缓冲池以及io请求进行数据查询。7.根据权利要求6所述的一种基于数据库的数据查询终端,其特征在于,所述先通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及io请求进行数据查询包括:在独立缓存中查询待查询库表的根节点,判断所述缓冲池中是否仅存在非叶子节点,若是,则根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据;
否则,根据所述根节点在缓冲池中查询非叶子节点,并根据查询到的非叶子节点在缓冲池中查询叶子节点,若未查找到所需的叶子节点,则通过io请求在树形库表中查询到叶子节点,获取叶子节点中的数据。8.根据权利要求6所述的一种基于数据库的数据查询终端,其特征在于,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前包括:根据数据库每一库表的树形结构,从根节点开始依次将节点存储在缓冲池中,直至存储的节点数量达到阈值。9.根据权利要求6所述的一种基于数据库的数据查询终端,其特征在于,所述接收数据库查询请求,根据所述数据库查询请求得到待查询库表之前还包括:设置配置文件,若将数据库库表添加至所述配置文件中,则将所述数据库库表中的根节点数据存储在独立缓存中。10.根据权利要求6至9任一所述的一种基于数据库的数据查询终端,其特征在于,还包括:在对数据库库表进行更新时,若所述数据库库表存在于配置文件中,则判断所述数据库库表进行更新库表的根节点是否变化,若是,则对独立缓存中的对应的根节点同步更新。
技术总结本发明公开了一种基于数据库的数据查询方法及终端,根据数据库查询请求得到待查询库表,当待查询库表存在于配置文件中时,通过独立缓存查询到树形库表的根节点,再基于所述根节点通过缓冲池以及IO请求进行数据查询;当待查询库表不存在于配置文件中时,通过缓冲池以及IO请求进行数据查询。因此通过增加了独立缓存进行根节点的存储,以及增加了缓冲池进行树形结构的节点存储,能够减少IO请求的数量,对于多层级的树形数据结构,能够减少数据查询耗时,提高数据查询效率。提高数据查询效率。提高数据查询效率。
技术研发人员:刘德建 郭孟祺 郭凤英 林斯 陈娟 陈宏
受保护的技术使用者:福建天泉教育科技有限公司
技术研发日:2022.07.06
技术公布日:2022/11/1