一种实现快速查询数据库信息的方法及装置与流程

文档序号:28705949发布日期:2022-01-29 13:36阅读:74来源:国知局
1.本发明涉及数据库查询
技术领域
:,特别是涉及一种通过分组数据来实现快速查询数据库信息的方法及装置。
背景技术
::2.目前,容灾数据库软件的页面前端在收集数据库信息、对数据进行展示或查询时,往往会出现收集数据超时、展示/查询速度缓慢的问题,原因在于如果数据量巨大的情况下,收集信息就需要网络通畅,机器配置好等硬件需求了,当网络不通畅或机器硬件配置不够好的时候,收集、展示或查询数据的速度都会较为缓慢,影响用户的使用。技术实现要素:3.为克服上述现有技术存在的不足,本发明之目的在于提供一种实现快速查询数据库信息的方法及装置,以实现快速展示数据库表单的全部信息,减少收集数据库信息耗费的时间,并加快数据库查询的速度的目的。4.为达上述目的,本发明提供一种实现快速查询数据库信息的方法,包括如下步骤:5.步骤s1,收集数据库表单信息;6.步骤s2,对首次收集的表单信息,根据收集的数据库的名称、数据库的表名称进行分组,将收集的数据库表单信息分别存至本地缓存数据库分组后的对应表中;7.步骤s3,对非首次网络闲时收集的数据库表单信息,进行增量处理,根据增量处理后的增量映射表更新各分组的对应表;8.步骤s4,获取查询的数据库名称或数据库表名称,匹配本地缓存数据库中的索引,根据索引找到对应分组的表进行查询,实现快速查询的目的。9.优选地,于步骤s2中,根据收集的数据库名称、数据库表名称的首字符或首字母进行分组,将收集到的数据库表单信息存至各分组对应的表中。10.优选地,若当前收集的数据库名称或数据库表名称的首字符为数字开头的名称,则将当前收集数据库名称或数据库表名称的数据分组存至数字对应的表中;若当前收集的数据库名称或数据库表名称的首字符为英文字母开头的名称,则根据首字母,将当前收集数据库名称或数据库表名称的数据分组存至相应的26个字符对应的表中;若当前收集的数据库名称或数据库表名称为中文字符,则根据其首字符的中文拼音,将当前收集数据库名称或数据库表名称的数据存至对应中文拼音对应的表中。11.优选地,步骤s3进一步包括:12.步骤s300,将前一次的表单信息收集结果以数据表名称为key值,数据库名称为value值存入第一缓存映射表中,并将其进行分组;13.步骤s301,获取当前收集的数据库表单信息以数据表名称为key值,数据库名称为value值存入第二缓存映射表中,同时以第一缓存映射表的分组规则对该第二缓存映射表进行分组;14.步骤s302,针对第一缓存映射表与第二缓存映射表中对应的每组的数据进行比对,找出每组中不同的数据,将不同数据存入另一个增量映射表,根据增量映射表更新步骤s2的各分组表。15.优选地,于步骤s300中,从所述第一缓存映射表的第一个记录开始遍历,以预设规则将所收集的数据分组。16.优选地,于步骤s302中,针对第一缓存映射表与第二缓存映射表中对应的每组的数据,分别计算其对应字符串的hash值,根据对应组对应字符串hash值的比较结果,找出每组中不同的数据,将不同数据存入所述增量映射表中。17.优选地,对于来自所述第二缓存映射表中的不同数据,于所述增量映射表中添加表示待增加的标记,对于来自所述第一缓存映射表中的不同数据,于所述增量映射表中添加表示待删除的标记,并根据该标记更新步骤s2的各分组表。18.优选地,于步骤s302中,当比对完毕,将所述第二缓存映射表的内容转移至第一缓存映射表,并清空第二缓存映射表。19.优选地,于步骤s1中,于网络闲时收集数据库表单信息。20.为达到上述目的,本发明还提供一种实现快速查询数据库信息的装置,包括:21.表单收集单元,用于收集数据库表单信息;22.分组缓存单元,用于对首次收集的表单信息,根据收集的数据库的名称、数据库的表名称进行分组,将收集的数据库表单信息分别存至本地缓存数据库分组后的对应表中;23.增量处理更新单元,用于对非首次网络闲时收集的数据库表单信息,进行增量处理,根据增量处理后的增量映射表更新各分组的对应表;24.查询处理单元,用于获取查询的数据库名称或数据库表名称,匹配数据库中的索引,根据索引找到对应分组的表进行查询,实现快速查询的目的。。25.与现有技术相比,本发明一种实现快速查询数据库信息的方法及装置通过将数据在网络闲时收集起来,并且存储到本地缓存数据库,并通过分组方式,将数据分组存储到本地缓存数据库当中,最后在容灾软件的页面中,不仅能够通过缓存好的数据,快速展示出来,并且能够根据查询的首个字或者字母,直接到分组的表中获取数据,从而达到了快速获取和查询的实现,解决了在对大数据的获取和查询上,速度慢的问题。附图说明26.图1为本发明一种实现快速查询数据库信息的方法的步骤流程图;27.图2为本发明具体实施例中表单信息分组示意图;28.图3为本发明一种实现快速查询数据库信息的装置的系统结构图;29.图4为本发明实施例中快速查询数据库信息的方法的流程图;30.图5为本发明实施例中容灾软件查询页面示意图;31.图6为本发明实施例中获取数据库信息展示图。具体实施方式32.以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。33.图1为本发明一种实现快速查询数据库信息的方法的步骤流程图。如图1所示,本发明一种实现快速查询数据库信息的方法,包括如下步骤:34.步骤s1,收集数据库的表单信息。35.在本发明中,为了实现快速查询数据库的大数据信息,可在网络闲时进行收集数据库的表单信息,该网络闲时可以制定为每天每隔6个小时一次实现闲时自动收集,本发明的目的则通过闲时收集好数据库的表单信息并予以缓存,这样就能实现缓存内容的不断的自动进行更新操作,从而在查询大数据信息时通过查询缓存内容实现快速查询。36.步骤s2,对首次收集的表单信息,根据收集的数据库的名称、数据库的表名称进行分组,将收集的数据库表单信息分别存至分组后的对应表中。37.在本发明具体实施例中,对于第一次网络闲时收集的数据库表单信息,将其缓存于一本地缓存数据库,并根据收集的数据库的名称、数据库的表名称对其进行分组。38.具体地,于步骤s2中,根据收集的数据库名称、数据库表名称的首字母进行分组,若当前收集的数据库名称或数据库表名称的首字符为数字开头的名称,则将当前收集数据库名称或数据库表名称的数据分组存至number(数字)对应的表num中,若前收集的数据库名称或数据库表名称的首字符为英文字母开头的名称,则根据首字母,将当前收集数据库名称或数据库表名称的数据分组存至对应的26个字符表中,若当前收集的数据库名称或数据库表名称为中文字符,则根据其首字符的中文拼音,将当前收集数据库名称或数据库表名称的数据存至对应中文拼音对应的数据表中,例如,若当前数据库表名称为“学生成绩表”,则根据其首字符“学”的中文拼音“xue”,将其该数据库表名称为“学生成绩表”的表单信息存至中文拼音“xue”对应的表中。在本发明具体实施例中,用于存储收集的数据库的名称、数据库的表名称的表共有429个,其中包括了各中文拼音、英文字母以及数字对应的表,从而将收集的数据库名称、数据库表名称分为429个组,将429组数据信息分为429个表存入本地缓存数据库中,以便后续快速查询表单信息的实现,如图2所示。39.步骤s3,对非首次网络闲时收集的数据库表单信息,进行增量处理,根据增量处理后的增量映射表更新各分组的对应表。40.由于每一次缓存的数据获取后都需要进行一个更新的操作,然而事实上每次更新不可能所有的数据库名称或数据库表名称都会进行更新,而如果每次的更新操作都对上述429个分组表来进行更新,这样会适得其反,反而在查询的时候耗费更多的时间去更新表,因此在每次更新之前需要进行增量处理,将增量的数据库表单信息提取出来。41.具体地,步骤s3进一步包括:42.步骤s300,将前一次的表单信息收集结果以数据表名称为key值,数据库名称为value值存入第一缓存映射表中,并将其进行分组。43.具体地说,首先,对于第一次的表单信息收集结果,按照以数据表名称为key值,数据库名称为value值存入到一个叫cachemap1的缓存映射表中,并进行分组。在本发明具体实施例中,将缓存映射表cachemap1默认分为8组,不足8组则按1组算,例如数据库和表名称的数量为7,那么就分为一组,若为11,那么分为8组,例如分为8个桶,然后从缓存映射表cachemap1中的第一个记录开始遍历,第一个桶装第1+n*8号位置的数据,第二个桶装第2+n*8号位置的数据,以此规则存放,,以数据库和表名称的数量为11为例,则形如{1,9},{2,10}{3,11},{4},{5},{6},{7},{8}进行分组,其中的数字表示所收集的表单信息在第一缓存映射表中的序号。44.步骤s301,获取当前收集的数据库表单信息,以数据表名称为key值,数据库名称为value值存入第二缓存映射表中,以第一缓存映射表的分组规则对该第二缓存映射表进行分组。45.在本发明中,对于后一次的查询结果也会获得数据库表单信息,按照以数据表名称为key值,数据库名称为value值存入到一个叫cachemap2的缓存映射表中,然后根据数据表名称数量,对这个cachemap2进行切割处理。同样,将cachemap2默认分为8组,不足8组则按1组算。例如表名称的数量为7,那么就分为一组。若为11,那么分为8组。46.步骤s302,针对第一缓存映射表与第二缓存映射表中对应的每组的数据,分别进行计算其对应的字符串的hash值,根据对应组对应字符串hash值的比较结果,找出每组中不同的数据,将不同数据存入另一个增量映射表,并根据增量映射表更新步骤s2的各分组表,同时将第二缓存映射表的数据转移至第一缓存映射表,并清空第二缓存映射表。47.具体地说,针对第一缓存映射表和第二缓存映射表分组后的每组内容,本别计算其字符串的hash值,采用的算法是md5算法计算的hash值,如果前一次的缓存映射表(第一缓存映射表)对中某组各字符串hash值与第二缓存映射表中对应组的各字符串hash值,若所有字符串的hash值相同,则说明该组当前与前一次收集的数据库表单信息没有进行变化,若存在有字符串的hash值不同情况,则找出两个对应组中hash值不同的记录,将相应的数据存入到另一个增量映射表incrementalmap中,对于来自第二缓存映射表中的不同数据,于增量映射表incrementalmap中添加“增加”标记,对于来自第一缓存映射表中的不同数据,于增量映射表incrementalmap中添加“删除”标记,该增量映射表incrementalmap结构如下:48.{49.[{[0050]“tablename”:“student”,[0051]″databasename“:“ajax”,[0052]“incremental”:“a”[0053]},[0054]{[0055]“tablename”:“teacner”,[0056]“databasename“:“ajax”,[0057]“incremental”:“d”[0058]}][0059]}[0060]其中a表示增加add,d表示删除,delete。[0061]依照切割两个缓存映射表cachemap的分组进行一一更新增量映射表incrementalmap,最后通过incrementalmap中的值,进行分组的429个数据表中的更新,此时只需要更新变化的部分即可,不需要重新刷一遍数据表,进而增加查询的速度和提高效率。[0062]例如,若第一次收集了20个表单信息,以数据表名称为key值,数据库名称为value值存入第一缓存映射表中,并分为8组,例如分组为{1,9,17},{2,10,19},{3,11,20},{4,12},{5,13}...依次类推,假设第二次获取了40个表单信息,以数据表名称为key值,数据库名称为value值存入第二缓存映射表中,同样也是分为8组{1,9,17,25,33},{2,10,18,26,34},{3,11,19,27,35}依次类推,这样也是8组,分为8组后,然后依次对第一缓存映射表与第二缓存映射表对应组中的数据进行hash值比较,获取每组中不同的数据,存放到增量映射表incrementalmap中,并添加相应的标记,最后将增量映射表incrementalmap中的数据,根据标记更新到分组的429个表中。[0063]步骤s4,获取查询的数据库名称或数据库表名称,匹配数据库中的索引,根据索引找到对应分组的表进行查询,实现快速查询的目的。[0064]具体地说,在容灾软件的页面前端,提供展示数据库以及查询的窗口,在查询数据库名称或者数据表时,通过输入的字符,匹配本地缓存数据库中的索引,然后根据索引找到对应分组,最后找到对应分组的表,进行查询,从而实现提高查询数据库的速度的目的。[0065]图3为本发明一种实现快速查询数据库信息的装置的系统架构图。如图3所示,本发明一种实现快速查询数据库信息的装置,包括:[0066]表单收集单元301,用于收集数据库的表单信息。[0067]在本发明中,为了实现快速查询数据库的大数据信息,可在网络闲时进行收集数据库的表单信息,该网络闲时可以制定为每天每隔6个小时一次实现闲时自动收集,本发明的目的则通过闲时收集好数据库的表单信息并予以缓存,这样就能实现缓存内容的不断的自动进行更新操作,从而在查询大数据信息时通过查询缓存内容实现快速查询。[0068]分组缓存单元302,用于对首次收集的表单信息,根据收集的数据库的名称、数据库的表名称进行分组,将收集的数据库表单信息分别存至分组后的对应表中。[0069]在本发明具体实施例中,对于第一次网络闲时收集的数据库表单信息,将其缓存于一本地缓存数据库,并根据收集的数据库的名称、数据库的表名称对其进行分组。[0070]具体地,分组缓存单元302根据收集的数据库名称、数据库表名称的首字母对收集的表单信息进行分组,若当前收集的数据库名称或数据库表名称的首字符为数字开头的名称,则将当前收集数据库名称或数据库表名称的数据分组存至number(数字)对应的num表中,若前收集的数据库名称或数据库表名称的首字符为英文字母开头的名称,则根据首字母,将当前收集数据库名称或数据库表名称的数据分组存至对应的26个字符表中,若当前收集的数据库名称或数据库表名称为中文字符,则根据其首字符的中文拼音,将当前收集数据库名称或数据库表名称的数据存至对应中文拼音对应的数据表中,例如,若当前数据库表名称为“学生成绩表”,则根据其首字符“学”的中文拼音“xue”,将其该数据库表名称为“学生成绩表”的表单信息存至中文拼音“xue”对应的表中。在本发明具体实施例中,用于存储收集的数据库的名称、数据库的表名称的表共有429个,其中包括了各中文拼音、英文字母以及数字对应的表,从而将收集的数据库名称、数据库表名称分为429个组,将429组数据信息分为429个表存入本地缓存数据库中,以便后续快速查询表单信息的实现。[0071]增量处理更新单元303,用于对非首次网络闲时收集的数据库表单信息,进行增量处理,根据增量处理后的增量映射表更新各分组的对应表。[0072]由于每一次缓存的数据获取后都需要进行一个更新的操作,然而事实上每次更新不可能所有的数据库名称或数据库表名称都会进行更新,而如果每次的更新操作都对上述429个分组表来进行更新,这样会适得其反,反而在查询的时候耗费更多的时间去更新表,因此在每次更新之前需要进行增量处理,将增量的数据库表单信息提取出来。[0073]具体地,增量处理更新单元303具体用于:[0074]将前一次的表单信息收集结果以数据表名称为key值,数据库名称为value值存入第一一缓存映射表中,并将其进行分组。[0075]具体地说,首先,对于第一次的表单信息收集结果,按照以数据表名称为key值,数据库名称为value值存入到一个叫cachemap1的缓存映射表中,并进行分组。在本发明具体实施例中,将缓存映射表cachemap1默认分为8组,不足8组则按1组算,例如数据库和表名称的数量为7,那么就分为一组,若为11,那么分为8组,例如分为8个桶,然后从缓存映射表cachemap1中的第一个记录开始遍历,第一个桶装第1+n*8号位置的数据,第二个桶装第2+n*8号位置的数据,以此规则存放,,以数据库和表名称的数量为11为例,则形如{1,9},{2,10}{3,11},{4},{5},{6},{7},{8}进行分组,其中的数字表示所收集的表单信息在第一缓存映射表中的序号。[0076]获取当前收集的数据库表单信息,以数据表名称为key值,数据库名称为value值存入第二缓存映射表中,以第一缓存映射表的分组规则对该第二缓存映射表进行分组。[0077]在本发明中,对于后一次的查询结果也会获得数据库表单信息,按照以数据表名称为key值,数据库名称为value值存入到一个叫cachemap2的缓存映射表中,然后根据与第一缓存映射表相同的分组规则,对这个cachemap进行切割处理,例如,同样将缓存映射表cachemap2默认分为8组,不足8组则按1组算。例如表名称的数量为7,那么就分为一组。若为11,那么分为8组。[0078]针对第一缓存映射表与第二缓存映射表中对应的每组的数据,分别进行计算其对应的字符串的hash值,根据对应组对应字符串hash值的比较结果,找出每组中不同的数据,将不同数据存入另一个增量映射表,根据增量映射表更新步骤s2的各分组表,同时将第二缓存映射表的数据转移至第一缓存映射表,并清空第二缓存映射表。。[0079]具体地说,针对第一缓存映射表和第二缓存映射表分组后的每组内容,本别计算其字符串的hash值,采用的算法是md5算法计算的hash值,如果前一次的缓存映射表(第一缓存映射表)对中某组各字符串hash值与第二缓存映射表中对应组的各字符串hash值,若所有字符串的hash值相同,则说明该组当前与前一次收集的数据库表单信息没有进行变化,若存在有字符串的hash值不同情况,则找出两个对应组中hash值不同的记录,将相应的数据存入到另一个增量映射表incrementalmap中,同时对于来自第二缓存映射表中的不同数据,于增量映射表incrementalmap中添加“增加”标记,对于来自第一缓存映射表中的不同数据,于增量映射表incrementalmap中添加“删除”标记,该增量映射表incrementalmap结构如下:[0080]{{[0081][{[0082]″tablename”:“student”,[0083]“databasename“:“ajax”,[0084]“incrementak”:“a”[0085]},[0086]{[0087]“tabkename”:″teacner”,[0088]“databasename“:“ajax”,[0089]“incremental”:“d”[0090]}][0091]}[0092]其中a表示增加add,d表示删除,delete。[0093]依照切割两个缓存映射表cachemap的分组进行一一更新增量映射表incrementalmap,最后通过incrementalmap中的值,进行分组的429个数据表中的更新,此时只需要更新变化的部分即可,不需要重新刷一遍数据表,进而增加查询的速度和提高效率。[0094]查询处理单元304,用于获取查询的数据库名称或数据库表名称,匹配数据库中的索引,根据索引找到对应分组的表进行查询,实现快速查询的目的。[0095]具体地说,在容灾软件的页面前端,提供展示数据库以及查询的窗口,在查询数据库名称或者数据表时,通过输入的字符,匹配本地缓存数据库中的索引,然后根据索引找到对应分组,最后找到对应分组的表,进行查询,从而实现提高查询数据库的速度的目的。[0096]实施例[0097]如图4所示,在本发明实施例中,一种快速查询大数据信息的方法的过程如下:[0098]步骤一:在网络闲时将数据库的表单信息收集起来。[0099]步骤二:然后将这些数据库的表单信息保存在本地缓存数据库中,具体地,在本地缓存数据库中,根据收集的数据库的名称,数据库的表名称进行分组,分组的详情如图2所示,本实施例中将收集的数据库名称,数据库表名称分为429组存入本地缓存数据库,分为429个表存入。[0100]步骤三:在容灾软件的页面上,提供选择和查询的窗口,在查询时将获得待查询内容于本地缓存数据库中进行索引,根据索引找到对应分组,最后找到对应分组的表进行查询。本发明之快速查询数据库信息的方法相比与实时获取数据库信息的速率来说增加的速度十分明显,相比与实时获取数据库信息的速率来说,经过测试比较,实时获取数据库信息大概需要20s-120s时间区间来获取,而本发明通过实现缓存在页面的数据库中的方法,只需要1s不到的时间就可以将信息提取出来,这时间的进步是十分明显的。[0101]步骤四:用户可以通过输入表名称“student”可以查询到指定数据库。[0102]通过对输入的名称进行分析得知是找英文字母表,并且这个英文字母是“s”,然后在本地缓存数据库中,找到”s”表中进行查找,最后搜索得到的结果如图5所示。可见通过分组数据实现,增快了查询数据表的时间,将原先需要遍历整个数据表的时间,只需要找到“s”表中的student便可,这样减少的时间因数据量的大小成正比,数据量越大,减少的时间越多。[0103]另外,因为是查询表的操作,本发明每次对于数据库表单信息的收集结果均对数据库缓存表进行一次更新缓存的操作。进行更新缓存的过程如下:[0104]假设第一次获取的数据库表单信息如图6所示,一共有4个表名称。表名称小于8,则只需将cachemap分为1组即可。然后在第二次更新查询的时候,获取到新的cachemap,然后也将cachemap进行分组,假设第二次查询的数据与第一次相同,也是4个表名称,所以也只需要将cachemap分为一组。然后将第一次的cachemap进行计算hash值,第一次的获取的表信息的hash值为“4144d4cecb72327251c531918c8e799a”,第二次计算的表信息的hash值也为“4144d4cecb72327251c531918c8e799a”。说明前后2次查询的数据库信息未进行改变。不需要对分组的缓存表进行更新操作,但是如果hash值不相同,则找到该组差异的字段,然后填充至incrementalmap中,然后在更新缓存数据库中的对应的表的信,这样就能在查询的时候提高查询的效率。[0105]本发明能够快速展示数据库表单的全部信息,能够减少收集数据库信息耗费的时间,以及加快数据库查询的速度,如果按照全部数据来进行查询,那么时间复杂度是o(n),如果按照本发明的实现,那么时间复杂度则变成o(n)/429。[0106]上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1