一种数据查询方法及系统与流程

文档序号:14394454阅读:153来源:国知局
本发明实施例涉及数据库查询
技术领域
:,尤其涉及一种数据查询方法及系统。
背景技术
::在信息技术高速发展和普及的今天,网络通信作为信息传输的主要通道已经渗透到每一个行业和业务领域,成为重要的生产力因素。网络通信服务是由大量的底层网络设备比如交换机、路由器等提供的,这些网络设备的工作状态的好坏直接影响网络通信服务质量。所以为了提升网络服务质量或者其他业务用途,需要对底层网络设备性能进行监控、分析。为达此目的,往往需要对在网设备的历史性能数据进行大跨度的查询。基于oracle数据库的查询服务的查询效率则显得格外重要。现有技术中数据的查询和补充完全基于sql,导致其结构复杂难以维护扩展,并在某些场景下效率低下。原有逻辑主要在一次事务中,分别以三个基础sql构建过滤网元数据集、基准实体时间数据集、指标数据。但在网元过滤、属性展示、聚合等场景下,由于各sql的业务逻辑耦合严重,导致了不必要的数据操作。并且原有的处理流程类进行了简单的事务控制和结果数据标准化的操作,完全依靠数据库进行查询和数据完善,未发挥代码的灵活优势,从而导致查询效率低下的问题。技术实现要素:针对现有技术存在的问题,本发明实施例提供一种数据查询方法及系统。第一方面,本发明实施例提供一种数据查询方法,包括:s1、获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;s2、根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;s3、构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;s4、将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。第二方面,本发明实施例提供一种数据查询系统,包括:获取模块,用于获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;查询模块,用于根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;第一关联模块,用于构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;第二关联模块,用于将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。第三方面,本发明实施例提供一种电子设备,包括:处理器、存储器和总线,其中,所述处理器和所述存储器通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行第一方面的方法步骤。第四方面,本发明实施例提供一种非暂态计算机可读存储介质,包括:所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行第一方面的方法步骤。本发明实施例提供的一种数据查询方法及系统,通过将查询到的网元数据存储在第一临时表、将网元数据与时间条件的关联关系存储在第二临时表,根据第二临时表和指标表获得第二关联结果数据,解决了现有技术中各查询条件的业务逻辑耦合严重的问题,提高了数据查询的效率。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种数据查询方法流程示意图;图2为本发明实施例提供的一种数据查询系统结构示意图;图3为本发明实施例提供的电子设备实体结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明实施例提供的一种数据查询方法流程示意图,如图1所示,所述方法,包括:s1、获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;具体的,用户通过查询条件对数据库进行数据查询操作,查询条件中包括了要查询的条件,可以是要查询某个时间段内的某些实体网元的指标数据,且,查询条件可以为sql查询条件。且获取到的多个查询条件查询的结果的组合是用户最终要查询的数据。其中,每一条查询条件中都包括有实体、时间和指标。实体是该条查询条件中要查询的网元,可以是实体名称,也可以是实体id;时间是该条查询条件中要查询的时间范围,可以是某个时间点,也可以是某一时间段;指标是该条查询条件中要查询的网元对应的指标。s2、根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;具体的,首先需要构建网元数据,该步骤中将按天查询出查询条件中的对应时间和实体的带版本的网元数据,将获取到的网元数据存储到第一临时表中。例如:查询条件中实体为a,时间为10月1日-10月3日,因此,获取10月1日中实体a对应的网元数据、10月2日中实体a对应的网元数据和10月3日中实体a对应的网元数据,然后,分别将10月1日-10月3日获取到的网元数据存储到第一临时表中。s3、构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;具体的,构建第一临时表中的网元数据与时间条件之间的关联关系,获得第一关联结果数据,其中,主要会处理不同粒度的区分以及工作日/休息日等场景,时间条件是用户预先设置的,可以是工作日中工作时间段内,且以小时为粒度等。将获得到的第一关联结果数据存储到第二临时表中。例如:时间条件为以小时为粒度,获取10月1日到10月3日中每天9:00-17:00各个网元的网元数据,此时,可以获取到每一天中某个网元在各小时粒度中对应的数据。应当说明的是,第二临时表中的字段可以包括网元名称、时间以及该网元对应的指标。s4、将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。具体的,将第二临时表中的第一关联结果数据与指标表进行关联,获得第二关联结果数据,应当说明的是,指标表中包括了各个网元在各时间点中各个指标对应的指标值,因此,第二关联结果数据中包括网元名称、时间、网元对应的指标以及各个指标对应的指标值。将获得到的第二关联结果数据存储到第三临时表中,第二关联结果数据就是用户所要查询的结果数据。还应当说明的是,第一临时表、第二临时表和第三临时表可以是动态建立也可以是预先建立,在查询过程中,还可能创建其他临时表,所谓动态建表就是在查询过程中,需要使用临时表时临时创建,之后在进行数据的插入。所谓预先建立是预先创建n张固定预留字段的临时表,通过临时表池进行统一调配管理,在使用时,直接向表池申请临时表,使用结束后归还。预先建表的优势在于降低了查询时的开销,并且将数据库的表数量维持在一个稳定可控的水平。而动态建表的优势在于实现简单,代码逻辑执行相对稳定,不会受维护机制限制导致异常。两者相互辅助,在表池中的表不可用时,使用动态建表逻辑保证查询正常。本发明实施例通过将查询到的网元数据存储在第一临时表、将网元数据与时间条件的关联关系存储在第二临时表,根据第二临时表和指标表获得第二关联结果数据,解决了现有技术中各查询条件的业务逻辑耦合严重的问题,提高了数据查询的效率。在上述实施例的基础上,所述将所述网元数据存储在第一数据表中,包括:根据用户配置的过滤规则对所述网元数据进行过滤,并将过滤后的网元数据存储在第一数据表中。具体的,在根据实体和时间从数据库中查询到对应的网元数据后,根据用户配置的过滤规则对网元数据进行筛选过滤,获取过滤后的网元数据,将过滤后的网元数据存储在第一数据表中。其中过滤规则包括网元名称搜索或网元属性等。本发明实施例通过用户配置的过滤规则再次对查询到的网元数据进行筛选过滤,获得更加精准的数据,从而进一步提高了查询的效率。在上述实施例的基础上,所述方法,还包括:预先创建索引表,将所述第一临时表对应的第一临时表信息、所述第二临时表对应的第二临时表信息和所述第三临时表对应的第三临时表信息插入到所述索引表中。具体的,为了便于对临时表的管理,预先创建一个索引表,该索引表用来维护时间表。在每一个临时表创建后都会将临时表对应的临时表信息插入在索引表中,且,应当说明的是,临时表包括第一临时表、第二临时表和第三临时表等。且索引表中会记录的临时表信息主要包括以下字段中的任意一项或其组合:表名(tablename)、表类型(tabletype)、哈希值(hashcode)、锁定值(lock)、表状态(status)、插入时间(datainittime)、使用时间(lastusedtime)和web实例标识(webinstance)。各字段的详细含义如下:tablename:临时表的表名,唯一索引,以“tmpx_web实例标识_毫秒时间戳_序列”的方式创建,由于创建时使用定时任务或手动刷入,每次创建序列默认总是从0开始编号,保证不会冲突即可。tabletype:表类型,用于区分第一临时表(tmp0)、第二临时表(tmp1)、第三临时表(tmp2)。hashcode:哈希值,用于缓存重用。lock:锁定值,用于保证在使用过程中不会被回收,使用包括插入和查询,以累加器方式,使用时+1,用完后-1,0代表没有被使用,不能为负值,该字段为表池维护的过期、超时时使用的字段,与缓存重用无关。status:临时表的表状态,未使用、插入数据中、可查询状态、清理中状态(用于解决清理时同步问题),临时表表的缓存重用和过期以该字段为准(与使用rpt_tmptable_index时的逻辑一致)。datainittime:在数据被正常插入后更新为当前时间,缓存重用和过期时的参照字段,tmp0/tmp1的表池管理的过期操作参考该字段(tmp2没有过期,只有超时)。lasteusedtime:在使用和使用完成后更新为当前时间,在表池管理分发时,该字段时间最早的优先被分发(nullfirst),表池管理的超时操作以该字段为准超过最大查询时间视为过期,此时会重刷lock和status并自动进行回收(tmp0/tmp1/tmp2均有超时操作)。webinstance:web实例标识,当有多个web实例时,共享tmppooltable表会导致查询可用状态和更新可用状态在并发时出现问题,用该字段予以区分可以简单避免冲突。动态建表后,会在索引表中插入一条记录。此时表状态为0表示初始化,插入数据后,表状态为1,表示完成使用可复用。若查询以知异常失败,表状态置为-1,表示不可复用,超出次数会阻止后续查询。查询未知异常失败,表状态为-2,不阻塞后续查询。清理程序会定时查询索引表中未加锁,且状态不为0的,超过有效期的表进行drop操作。预建表逻辑下的分发,同步方法,查询当前web实例下,status为未使用状态,并对lasteusedtime进行升序排列(nullfirst),获取第一条记录返回,更新lock+1,hashcode、lasteusedtime、status更新为插入数据中,无可用的表时走原建表逻辑,归还操作直接在更新状态的同时对lock-1。本发明实施例通过构建索引表来对建立的临时表进行维护,显示其当前状态,作为判断是否可复用的基础。在上述实施例的基础上,所述方法,还包括:获取用户的查询条件,根据所述查询条件计算对应的哈希值;若根据所述哈希值判断获知存在可复用的所述第三临时表,则直接复用所述可复用的第三临时表;若根据所述哈希值判断获知不存在可复用的所述第一临时表、所述第二临时表和所述第三临时表,则执行s1。具体的,查询系统首先会接收到用户配置的查询条件,将查询条件生成xml格式的字符串,然后进行哈希计算,获得对应的哈希值,根据该哈希值从索引表中查找可复用的第三临时表。如果在索引表里存在可复用的第三临时表则直接复用该可复用的第三临时表。如果判断得到索引表中没有可复用的第三临时表,则判断是否存在可复用的第一临时表,如果存在则直接复用,如果不存在,则判断是否存在可复用的第二临时表,如果判断得知没有第一临时表、第二临时表和第三临时表可复用,则执行s1。在获取可复用的第三临时表前,还需要查询当前web实例下,表状态为可查询的第三临时表,且时间在过期范围内,且插入时间离当前最近的第三临时表进行复用,复用时,将被复用的第三临时表的锁定值+1、更新使用时间,查询结束后,将该第三临时表的锁定值-1、再次更新使用时间。若发现相同查询的临时表,且该临时表的表状态为1时,则直接复用;若表状态为0时,定时轮询等待,直至有1状态表时进行复用,或者没有发现可服用查询表时,重新建表查询。当相同查询失败状态的表超出限制,则直接返回空结果,阻止查询,防止不必要的性能消耗。应当说明的是,在临时表的有效期内,发现在当前查询之前查询过临时表a,且当前查询也是查询临时表a,那么称为相同查询的临时表。临时表包括第一临时表、第二临时表和第三临时表。对于不存在复用的缓存的情况,通过表池管理service的分发操作获得可用的表名,然后进行数据插入操作,插入后更新状态为可查询状态,并更新datainittime、lasteusedtime,查询结束后更新lock-1,lasteusedtime。本发明实施例通过在查询表之前,根据查询条件生成的哈希值从索引表中查询是否存在可复用的临时表,如果存在则不需要进行查询,直接复用即可,避免了相同查询场景的重复查询操作造成成倍的消耗多余时间,因此,提高了查询速率,降低了资源消耗。在上述实施例的基础上,所述若根据所述哈希值判断获知不存在可复用的所述第一临时表、所述第二临时表和所述第三临时表,则执行s1,包括:若根据所述哈希值判断获知不存在可复用的所述第一临时表、所述第二临时表和所述第三临时表,则根据最大并行线程数和实体id对所述查询条件进行拆分,获得多个拆分后的查询条件;根据每一所述拆分后的查询条件生成对应的所述查询条件,并采用多线程执行s1。具体的,在第一临时表、第二临时表和第三临时表均不可复用时,需要从数据库中进行表查询,对于用户的一个比较复杂的查询,单一的sql结构非常复杂,查询数据量过大,执行需要较长的时间,因此,在进行查询之前,首先需要将获取到的查询条件进行拆分,在拆分时,根据系统允许的最大并行线程数和查询条件中的实体id进行拆分,从而获得多个拆分后的查询条件。例如:系统允许的最大并行线程数为10,查询条件中要查询的实体个数为10个,此时,可以根据实体id,将每个实体id分成一组,共分为10组,因此,将查询条件进行拆分后,得到10个拆分后的查询条件。根据每一个拆分后的查询条件生成对应的查询条件,并采用多线程来执行s1,应当说明的是,s2-s4也都用多线程来执行。在非网元汇聚到all的场景下,指标查询时均可以以多线程的方式进行查询。每个线程中仅包含固定数量的实体,减少单个线程查询的数据量,以提高查询效率。系统仅作最大并发执行线程数的限制,不限制待执行线程数。最后通过查询耗时上限来约束和结束异常查询。其中线程拆分的原则按照不同的场景略有不同。无聚合场景下,指标性能数据的查询,各实体之间没有相关性,因此随意拆分,但是考虑到实际的指标表分区情况,会按照实体id进行拆分。尽最大可能保证一个线程中,查询的实体均在一个数据块中,提高检索效率。在时间聚合场景下,实体拆分逻辑同上。在网元汇聚场景下,实体分组必须要按照上层网元来进行分组。同一分组内的实体均有相同的上层网元,且实体列表完整。拆分的多个线程在执行时,均会向第三临时表中插入结果数据,为了保证并发执行,会在建表示创建为n个分区的分区表,n为最大并线程数。并在执行时插入特定分区。无论在查询实体数据还是性能数据时,sql可以按照表分区(一般为天)进行拆分,每天一个进行完全关联后查询,提高单个sql的执行效率。本发明实施例通过多线程拆分将原本复杂的查询条件按照一定规则进行拆分,通过多线程的方式并发执行查询并插入结果数据到第三临时表中,既提高了查询速度,也提高了查询的成功率。在上述各实施例的基础上,所述方法还包括:根据实体id将所述指标表进行分区处理。具体的,一般情况下,数据库中的表数据都是按天进行存储的,假如用户需要查询最近7天内实体a和实体b的指标数据,此时,需要查询7个指标表中所有的数据,需要查的指标表很多,从而导致查询速度非常慢。此时,可以预先根据实体id将指标表进行分区倒换,即将根据每个实体id进行建立一个临时表,此时在查询实体a和实体b的指标数据时,从这两个实体的临时表中即可获得,大大减少了查询指标表的个数,从而缩短了查询时间,提高了查询速率。图2为本发明实施例提供的一种数据查询系统结构示意图,如图2所示,所述系统,包括:获取模块201、查询模块202、第一关联模块203和第二关联模块204,其中:获取模块201用于获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;查询模块202用于根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;第一关联模块203用于构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;第二关联模块204用于将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。具体的,用户通过查询条件对数据库进行数据查询操作,查询条件中包括了要查询的条件,可以是要查询某个时间段内的某些实体网元的指标数据,且,查询条件可以为sql查询条件。且获取模块201获取到的多个查询条件查询的结果的组合是用户最终要查询的数据。其中,每一条查询条件中都包括有实体、时间和指标。实体是该条查询条件中要查询的网元,可以是实体名称,也可以是实体id;时间是该条查询条件中要查询的时间范围,可以是某个时间点,也可以是某一时间段;指标是该条查询条件中要查询的网元对应的指标。首先查询模块202需要构建网元数据,按天查询出查询条件中的对应时间和实体的带版本的网元数据,将获取到的网元数据存储到第一临时表中。第一关联模块203构建第一临时表中的网元数据与时间条件之间的关联关系,获得第一关联结果数据,其中,主要会处理不同粒度的区分以及工作日/休息日等场景,时间条件是用户预先设置的,可以是工作日中工作时间段内,且以小时为粒度等。将获得到的第一关联结果数据存储到第二临时表中。第二关联模块204将第二临时表中的第一关联结果数据与指标表进行关联,获得第二关联结果数据,应当说明的是,指标表中包括了各个网元在各时间点中各个指标对应的指标值,因此,第二关联结果数据中包括网元名称、时间、网元对应的指标以及各个指标对应的指标值。将获得到的第二关联结果数据存储到第三临时表中,第二关联结果数据就是用户所要查询的结果数据。本发明提供的系统的实施例具体可以用于执行上述各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。本发明实施例通过将查询到的网元数据存储在第一临时表、将网元数据与时间条件的关联关系存储在第二临时表,根据第二临时表和指标表获得第二关联结果数据,解决了现有技术中各查询条件的业务逻辑耦合严重的问题,提高了数据查询的效率。图3为本发明实施例提供的电子设备实体结构示意图,如图3所示,所述电子设备,包括:处理器(processor)301、存储器(memory)302和总线303;其中,所述处理器301和存储器302通过所述总线303完成相互间的通信;所述处理器301用于调用所述存储器302中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:s1、获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;s2、根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;s3、构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;s4、将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:s1、获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;s2、根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;s3、构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;s4、将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:s1、获取用户的多个查询条件,每一所述查询条件包括实体、时间和指标;s2、根据每一所述查询条件对应的实体和所述时间从数据库中查询网元数据,并将所述网元数据存储在第一临时表中;s3、构建所述网元数据与时间条件的关联关系获得第一关联结果数据,将所述第一关联结果数据存入第二临时表中;s4、将所述第一关联结果数据与指标表进行关联,获得第二关联结果数据,将所述第二关联结果数据存入第三临时表中,以完成数据查询。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。以上所描述的系统等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1