技术领域
[0001] 本发明涉及通信领域,具体而言,涉及一种查询方法及装置。
相关背景技术
[0002] 目前,网络规模越来越大,网管中管理的网元数目越来越多,数据量也越来越大。用户在操作时,通常都习惯选择一批网元,去查询分析业务数据。
[0003] 但是,由于选择的网元较多,会产生数据库查询语句超长错误。例如:SQL语句为Select*from A Table where neoid in(1,2,3,4……),当有1k个网元时,语句一定超过2k,这将超过某些Oracle SQL语句长度的限制,从而出现语句超长错误,进而导致查询失败。
具体实施方式
[0022] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
[0023] 本发明提供了一种查询方法。图1是根据本发明实施例的查询方法的流程图,如图1所示,包括如下的步骤S102至步骤S106。
[0024] 步骤S102,获取待查询网元的网元标识,其中待查询网元与网元标识一一对应。
[0025] 步骤S104,划分网元标识。
[0026] 步骤S106,使用划分后的网元标识进行查询。
[0027] 相关技术中,大批量网元查询会导致查询失败。本发明实施例中,通过对待查询网元的网元标识进行划分,可以对相关的网元标识进行归类,从而提高查询效率,保证查询成功。
[0028] 优选地,划分网元标识包括:确定网元标识的分段的起点,其中网元标识的分段是划分网元标识得到的;确定网元标识的分段的终点。
[0029] 优选地,确定网元标识的分段的起点包括:按照网元标识从小到大的顺序,排列网元标识;确定第一网元标识是排列后的网元标识中的最小的网元标识;按照所有网元标识从小到大的顺序,排列所有网元标识,其中所有网元标识与所有网元一一对应,待查询网元是所有网元的子集;确定第二网元标识是排列后的所有网元标识中的最小的网元标识;判断第一网元标识是否等于第二网元标识;如果第一网元标识等于第二网元标识,则确定第一网元标识是网元标识的分段的起点。
[0030] 优选地,确定网元标识的分段的起点还包括:如果第一网元标识不等于第二网元标识,则在排列后的所有网元标识中,确定第三网元标识是排列在第二网元标识之后的网元标识;判断第一网元标识是否等于第三网元标识;如果第一网元标识等于第三网元标识,则确定第一网元标识是网元标识的分段的起点。
[0031] 优选地,确定网元标识的分段的终点包括:在排列后的网元标识中,确定第四网元标识是排列在第一网元标识之后的网元标识;在排列后的所有网元标识中,确定第五网元标识是排列在网元标识的分段的起点所对应的网元标识之后的网元标识;判断第四网元标识是否等于第五网元标识;如果第四网元标识不等于第五网元标识,则确定第一网元标识是网元标识的分段的终点。
[0032] 优选地,确定网元标识的分段的终点还包括:如果第四网元标识等于第五网元标识,则在排列后的网元标识中,确定第六网元标识是排列在第四网元标识之后的网元标识;在排列后的所有网元标识中,确定第七网元标识是排列在第六网元标识之后的网元标识;
判断第六网元标识是否等于第七网元标识;如果第六网元标识不等于第七网元标识,则确定第四网元标识是网元标识的分段的终点。
[0033] 优选地,在确定第四网元标识是网元标识的分段的终点之后,上述方法还包括:确定第六网元标识是网元标识的分段的下一个分段的起点。
[0034] 优选地,如果在排列后的网元标识中不存在排列在第四网元标识之后的网元标识,或者在排列后的所有网元标识中不存在排列在第六网元标识之后的网元标识,则确定第四网元标识是网元标识的分段的终点。
[0035] 优选地,使用划分后的网元标识进行查询包括:在网元标识的分段的起点和网元标识的分段的终点之间采用between…and语句;在各个网元标识的分段之间采用or语句。
[0036] 下面将结合实例对本发明实施例的实现过程进行详细描述。
[0037] 首先描述本发明实施例的应用环境进行分析。
[0038] 考虑到网管的使用环境及用户的操作习惯,网管中网元的ID是根据网元的创建时间来生成的。一般来说,同一分组下的网元,都是在相邻时间内创建的,或在相近时间被自动发现出来的,即同一分组下网元在网元标识的层面是连续的。同时,若选择的网元数大于50,用户很少一个个选择,基本是选择分组下所有网元或一批网元。所以可以认为,绝大部分的用户操作,用户选择的网元都是基本连续的。
[0039] 其次描述在本发明实施例的查询前可以进行的准备工作。
[0040] 1、建立一个网元数据的全集维护模块,存储网管中的所有网元标识。本模块可以是缓存或数据库中的一张表,当有网元增加或删除时,本模块能及时更新自身信息,以保持本模块的数据随时和网管中的一致。
[0041] 2、业务表在存储和网元有关联的数据时,采用一列存放网元的ID。
[0042] 下面描述本发明实施例的查询流程。
[0043] 图2是根据本发明优选实施例的查询方法的流程图,其描述了将查询条件中的多个网元标识在全部的网元标识中分段,即网元标识连续的分段就只记录头尾节点。
[0044] 步骤S100和步骤S110,按照递增顺序排序用户选择ID的列表和所有ID的列表。
[0045] 步骤S200和步骤S210,分别取选择ID的列表和所有的ID列表的下一个值(分别取名为S、A)(开始时是选第一个)。若两个列表其中有一个已取到最后一个值,则进行S900。
[0046] 步骤S300,查看是否已经找到一次的起点。若为否,则进行S400;若为是,则进行S600。
[0047] 步骤S400,S>A?若为是,则表明还没有匹配到起始节点,A取下一个值(更大的值),进行步骤S210。若为否,表示S<=A,但由于S所在的集合是A所在集合的子集,且之前S>A,S不变,A递增,所以这里S一定等于A,进行步骤S500。
[0048] 需要说明的是,作为本发明的另一种实施方式,当步骤S100和步骤S110为按照递减顺序排序用户选择ID的列表和所有ID的列表时,步骤S400中可以判断S<A。
[0049] 步骤S500,S=A,即已经匹配到了一个起始节点,进行步骤S610。
[0050] 步骤S600,S=A?若为是,则已经开始匹配一段中的数据了,进行步骤S610;若为否,则表示匹配结束,即一个分段已经结束,进行步骤S620。
[0051] 步骤S610,为了再次匹配,让选择列表和所有列表都取下一个数据,进行步骤S200和步骤S210。
[0052] 步骤S620,记录S的上一个节点为分段的终点,S为新分段的起点,并进行步骤S210。
[0053] 步骤S900、步骤S910,用户选择的列表或所有的列表结束,表示分段已完成。若有起点而无终点,则认为终点为此节点,否则认为起点终点都是此节点。分段到此结束。
[0054] 为了更清楚地理解上述优选实施例,本发明还提供了一个实例。
[0055] 假设选择列表S是1、2、3、7,并假设所有列表A是0、1、2、3、5、7,则本发明的分段流程包括如下的步骤1至步骤12。
[0056] 需要说明的是,下述S(1)的含义是选择列表中的值为1的网元标识,下述冒号之后的步骤是指执行冒号前的操作所需要执行的步骤,下述A(0)-->A(1)的含义是将所有列表中的值为0的网元标识变更为值为1的网元标识。
[0057] 步骤1,判断S(1)>A(0):步骤S200、步骤S210、步骤S300、步骤S400。
[0058] 步骤2,A(0)-->A(1):步骤S210。
[0059] 步骤3,判断S(1)=A(1):步骤S300、步骤S400、步骤S500(即确定1是第一分段的起点)。
[0060] 步骤4,S(1)-->S(2),A(1)-->A(2):步骤S610、步骤S200、步骤S210。
[0061] 步骤5,判断S(2)=A(2):步骤S300、步骤S600。
[0062] 步骤6,S(2)-->S(3),A(2)-->A(3):步骤S610、步骤S200、步骤S210。
[0063] 步骤7,判断S(3)=A(3):步骤S300、步骤S600。
[0064] 步骤8,S(3)-->S(7),A(3)-->A(5):步骤S610、步骤S200、步骤S210。
[0065] 步骤9,判断S(7)>A(5):步骤S300、步骤S600、步骤S620(即确定3是第一分段的终点,7是新的第二分段的起点)。
[0066] 步骤10,A(5)-->A(7):步骤S210。
[0067] 步骤11,判断A(7)=A(7):步骤S300、步骤S600、步骤S610。
[0068] 步骤12,选择列表为空,结束:步骤S200、步骤S900。
[0069] 通过上述的步骤1至步骤12可以确定选择列表的两个分段:1~3,7~7。
[0070] 在上述分段之后,可以在网元标识的分段的起点和网元标识的分段的终点之间采用between…and语句,并且在各个网元标识的分段之间采用or语句,则上述两个分段就变成了between 1and 3or between 7and 7。然后,使用该语句between 1and 3or between7and 7进行查询即可。
[0071] 需要说明的是,在上述分段之后,可以不限于采用between…and语句和or语句,任何能够实现相同功能的语句都可以纳入本发明的保护范围。
[0072] 下述对本发明的有益效果进行描述。
[0073] 本发明的方法适合较为连续的数据查询,即在使用本专利的应用场景里,网元标识分段越少,本方法所能提高的效率就越大。
[0074] 在实际测试中,在数据很多时(百万数据,1千个网元),本方法带来的效率提高能达到300倍。即使在最坏情况下,即用户选择的所有网元都是独立的时候(基本不会出现),查询效率也等同于in语句。
[0075] 对于语句超长问题,本发明的方法已自动解决。其原因是,数据少时(假设以100为分界),分段可能较独立,但语句不会超长,数据多时,都是批量选择,分段自然就变少了,语句也不会超长。
[0076] 需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0077] 本发明实施例提供了一种查询装置,该查询装置可以用于实现上述查询方法。图3是根据本发明实施例的查询装置的结构框图,如图3所示,包括获取模块32,划分模块34和查询模块36。下面对其结构进行详细描述。
[0078] 获取模块32,用于获取待查询网元的网元标识,其中待查询网元与网元标识一一对应;划分模块34,连接至获取模块32,用于划分获取模块32获取的网元标识;查询模块36,连接至划分模块34,用于使用划分模块34划分后的网元标识进行查询。
[0079] 优选地,划分模块34包括:第一确定子模块342,用于确定网元标识的分段的起点,其中网元标识的分段是划分网元标识得到的;第二确定子模块344,用于确定网元标识的分段的终点。
[0080] 需要说明的是,装置实施例中描述的查询装置对应于上述的方法实施例,其具体的实现过程在方法实施例中已经进行过详细说明,在此不再赘述。
[0081] 综上所述,根据本发明的上述实施例,提供了一种查询方法及装置。本发明通过对待查询网元的网元标识进行划分,可以对相关的网元标识进行归类,从而提高查询效率,保证查询成功。
[0082] 显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0083] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。