本申请涉及计算机技术领域,尤其涉及一种索引建立的方法及装置。
背景技术:
随着网络技术的不断发展,人们通过网络获取数据已经变得越来越普遍了。
目前,为了能够让用户更方便快捷的查找到所需的数据,通常需要根据数据库中存储的数据,在索引库中建立数据对应的索引,并把索引库对外提供给用户,后续,用户可以通过使用该索引库,搜索自己所需的数据。
在建立索引库的整个过程中,索引管理器首先向索引库发送携带有待建立索引的数据的建立索引请求,而索引库在接收到建立索引请求后,直接根据建立索引请求中携带的数据,建立索引。
后续,数据库中的数据有可能会存在更新的情况,如,新增了数据,为了提高索引库建立索引的效率,因此,当数据库中的数据更新后,直接采用增量索引的方式,对数据库中的更新的数据建立索引,增量索引指的是只对数据库中有增加、更改、删除的数据,建立索引。
索引管理器会每隔一定的时间向索引库发送携带有每个数据的最后更新时间的增量索引请求,索引库在接收到索引管理器发送的增量索引请求后,直接将增量索引请求中携带的每个数据的最后更新时间,与索引库中每个数据的最后建立索引时间进行对比,如果增量索引请求中携带的每个数据的最后更新时间不超过索引库中每个数据的最后建立索引时间,则说明数据库中的数据都已经在索引库中建立了索引,也就是说,数据库中的数据未出现更新的情况,索引库根据该增量索引请求不做任何处理,如果增量索引请求中携带的每行数据的最后更新时间超过索引库中每个数据的最后建立索引时间,则说明数据库 中存在未在索引库建立索引的数据,也就是说,数据库中的数据出现了更新的情况,索引库直接从数据库中获取更新的数据,并根据更新的数据建立索引。
但是,在现有技术中,如果数据库中的数据出现更新的情况,索引管理器会将全部更新的数据同时添加到索引库中,使索引库根据全部更新的数据建立索引,这样在数据库中有大量的数据同时出现更新的情况时,势必会给索引库带来很大的运行压力。
技术实现要素:
本申请实施例提供一种索引建立的方法及装置,用以解决现有技术中在数据库中有大量的数据出现更新的情况时,势必会给索引库带来很大的运行压力的问题。
本申请实施例提供的一种索引建立的方法,所述方法包括:
确定待建立索引的各数据;
确定所述各数据的数据类型;
根据所述各数据的数据类型,确定各数据的优先级;
根据所述各数据的优先级,确定为所述各数据建立索引的时间,其中,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引的时间也不同;
针对所述各数据,在确定的为该数据建立索引的时间到达时,为该数据建立索引。
本申请实施例提供的一种索引建立的装置,所述装置包括:
数据确定模块,用于确定待建立索引的各数据;
数据类型确定模块,用于确定所述各数据的数据类型;
优先级确定模块,用于根据所述各数据的数据类型,确定各数据的优先级;
索引时间确定模块,用于根据所述各数据的优先级,确定为所述各数据建立索引的时间,其中,针对任意两个数据,若两个数据的优先级不同,则为两 个数据建立索引的时间也不同;
索引建立模块,用于针对所述各数据,在确定的为该数据建立索引的时间到达时,为该数据建立索引。
本申请实施例提供一种索引建立的方法及装置,该方法在建立索引时,首先确定待建立索引的各数据,再确定各数据的数据类型,据此确定各数据的优先级,并根据各数据的优先级,确定为各数据建立索引的时间,其中,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引的时间也不同,针对各数据,在确定的为该数据建立索引的时间到达时,为该数据建立索引。通过上述方法,即使在数据库中有大量的数据同时出现更新时,通过优先级的方式将各数据按照不同的时间分别在索引库中建立索引,有效的降低了索引库的运行压力。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的索引建立的过程;
图2为本申请实施例提供的索引建立系统的示意图;
图3为本申请实施例提供的索引建立的装置结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的索引建立的过程,具体包括以下步骤:
s101:确定待建立索引的各数据。
在实际应用中,为了能够让用户更加快捷的查找到所需的数据,通常需要根据数据库中存储的数据,在索引库建立数据对应的索引,并把索引库对外提供给用户。
在本申请实施例中,整个索引建立的系统,如图2所示。
进一步的,在为数据建立索引的整个过程中,本申请首先确定待建立索引的各数据,而确定待建立索引的各数据由图2中所示的索引管理器完成的。
由于索引管理器需要知道到底为哪个数据建立索引,因此,在本申请中,可以通过索引管理器提取所有数据对应的索引信息表,确定提取的各索引信息表中包含的索引状态,将索引状态为待索引状态或失败状态的数据,作为待建立索引的数据。
在此需要说明的是,索引信息表存储于图2中的索引信息表库,每个数据均对应对一个索引信息表,该索引信息表中记录了数据的索引状态,不同的索引状态反映了为数据建立索引的情况,可以分为三种索引状态,即,待索引状态、成功状态、失败状态,也就是说,通过索引状态能够知道该索引信息表对应的数据是否已经在索引库中建立了索引,并且,为了降低索引信息表库的存储压力,因此,索引信息表中记录了数据的标识,后续,索引管理器可在为该索引信息表中对应的数据进行索引时,直接根据数据的标识在数据库中查找到数据。
例如,假设某企业的为了方便企业内部人员方便快捷的获取企业内部的业务数据,则建立了索引库提供给企业内部人员,为了简单清楚的说明本发明的实施步骤,假设索引信息表库中只包含有如表1所示的索引信息表:
表1
索引管理器扫描索引信息表库中如表1所示的索引信息表,提取出表1中包含的待索引状态(即,索引状态),并将待索引状态的业务数据a作为待建立索引的数据,并执行步骤s102。
s102:确定所述各数据的数据类型。
s103:根据所述各数据的数据类型,确定各数据的优先级。
由于在实际应用中,数据通常是有类型的,如,每个数据对应着不同的业务类型,而不同类型的数据是有重要性之分的,也有实时性之分的,因此,在本申请中,为了降低索引库为数据建立索引的压力,可将数据按照重要性,实时性区分出优先级,也就是说,重要性较高、实时性较高的数据优先级就高,重要性较低、实时性较低的数据优先级就较低,而在本申请中,可以采用p0、p1、p2……pn的方式来表示优先级,其中,n越大,说明优先级越低。
另外,在确定各数据的优先级时,也可以不根据数据的类型确定各数据的优先级,如,可以人工预先根据经验设定各数据的优先级,后续,同步管理器可直接确定预设的各数据的优先级。
因此,同步管理器在确定出待建立索引的各数据后,可确定各数据的数据 类型,并根据各数据的数据类型,确定各数据的优先级。
延续上例,假设同步管理器确定出业务数据a的数据类型,并根据该数据类型,确定出业务数据a的优先级为p1,也就是如表1中所示的优先级。
s104:根据所述各数据的优先级,确定为所述各数据建立索引的时间。
在本申请中,每个数据的优先级不同,则为该数据建立索引的时间就不同,也就是说,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引的时间也不同。
因此,在本申请中,同步管理器在确定出各数据的优先级后,索引管理器需要根据每个数据的优先级不同,确定为各数据建立索引的时间,而本申请在此提供了一种确定各数据建立索引的时间的方式:根据预设的各优先级对应的周期,确定为各数据建立索引对应的周期,根据为各数据建立索引对应的周期以及当前时刻,确定为各数据建立索引的时间,也就是说,每个数据对应的为该数据建立索引的时间为在当前时刻的基础上,加上优先级对应的周期,其中,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引对应的周期也不同。
延续上例,假设p0的周期为0分钟,p1的周期为1分钟,p2的周期为2分钟……pn的周期为n分钟,相邻两个优先级之间差1分钟,因此,同步管理器在确定出业务数据a的优先级p1后,假设当前时刻为12:10,则索引管理器根据业务数据a的优先级p1,确定为业务数据a建立索引的时间为12:11。
s105:针对所述各数据,在确定的为该数据建立索引的时间到达时,为该数据建立索引。
在本申请中,针对已经确定出优先级的各数据,当为该数据建立索引的时间到达时,索引管理器会根据该数据对应的索引信息表中的数据标识,从数据库中查询出该数据标识对应的数据,并将该数据发送给索引库中,索引库为该数据建立索引。
另外,由于在实际应用中,不同类型的数据在建立索引时,建立的方式通 常是不一样的,从而导致了在编写用于建立索引的索引处理工具的代码不同,也就是说,如果新增一个数据类型的数据,则需要重新编写索引处理工具的代码,因此,在为数据建立索引时,可以针对不同类型的数据,采用不同的索引处理器建立索引,这样,后续即使新增加一种类型的数据,只需要针对该类型的数据,新增一个索引处理器即可,无需修改原来的索引处理器的代码。
在此需要说明的是,索引处理器可以是如图2所示的indexhandler,针对不同类型的数据,可以创建不同的indexhandler,后续,可以将各不同的indexhandler共同连接在如图2所示的任务分配器上,每次当需要为数据建立索引时,可以通过该任务分配器确定出到底需要哪一个indexhandler来为该数据建立索引。
延续上例,索引管理器在确定出为业务数据a建立索引的时间为12:11后,直到索引管理器当前查询出当前时刻为12:11,即,在确定的为该业务数据a建立索引的时间到达时,索引管理器采用业务数据a对应的索引处理工具,根据索引信息表中的业务数据a以及用户a,在数据库中查询到业务数据a的全部数据,将业务数据a的全部数据发送给索引库,索引库为业务数据a的全部数据建立索引。
通过上述方法,即使在数据库中有大量的数据同时出现更新时,通过优先级的方式将各数据按照不同的时间分别在索引库中建立索引,有效的降低了索引库的运行压力。
由于在实际应用中,数据库中的数据会出现更新的情况,即,出现新增、更改、删除的情况,因此,在本申请中,由图2中所示的同步管理器来定时监测数据库中数据的变化,具体的,针对数据库中的任一数据,通过同步管理器监测数据库中的该数据对应的最后更新时间是否超过该数据对应的索引信息表中包含的最后更新时间,当监测到数据库中的该数据对应的最后更新时间超过该数据对应的索引信息表中包含的最后更新时间时,如果该数据在对应的索引信息表中不存在,则在索引信息表中新增该数据并将该数据的索引状态设置 为待索引状态,如果该数据已经存在于索引信息表中,则直接将该数据对应的索引信息表中的索引状态更改为待索引状态。
例如,同步管理器监测数据库中数据的变化,假设数据库中的数据b已经存在索引信息表中,并且在120:00被更新,此时同步管理器监测到数据b对应的最后更新时间12:00超过了该数据b对应的索引信息表中包含的最后更新时间11:50,因此,将该数据b对应的索引信息表中的索引状态更改为待索引状态。
考虑到实际应用中,为了能够便于后续管理和查询为数据建立索引的情况,因此,在本申请中,针对任一待建立索引的数据,当为该数据建立索引失败时,通过同步管理器将该数据对应的索引信息表中的索引状态更改为失败状态,并且将该数据对应的索引信息表中包含的失败次数加1,当为该数据建立索引成功时,通过同步管理器将该数据对应的索引信息表中的索引状态更改为成功状态,并且将该数据对应的索引信息表中包含的失败次数置为0,当该数据对应的索引信息表中的索引状态为失败状态,且失败次数超过预设的阈值时,不为该数据建立索引。
在此需要说明的是,针对任一待建立索引的数据,当为该数据建立索引失败,但失败次数没有超过预设的阈值时,可以通过索引管理器根据该数据的优先级对应的周期,确定再次为该数据建立索引的时间(如,可以直接在之前为该数据建立索引失败时所对应时刻的基础上,直接加上该数据的优先级对应的一个周期),并在再次为该数据建立索引的时间到达时,为该数据建立索引。
延续步骤s105中的例子,索引管理器在为业务数据a的全部数据建立索引的过程中,可能由于系统不稳定导致建立索引失败,则将该业务数据a对应的索引信息表中的索引状态更改为失败状态,并将该业务数据a对应的索引信息表中包含的失败次数加1,如表2所示:
表2
后续,索引管理器确定出为业务数据a建立索引失败的失败次数没有超过3次(假设预设的阈值为3次),根据业务数据a的优先级对应的周期,即,1分钟,确定再次为业务数据a建立索引的时间为12:12(假设采用上述提到的确定再次为该数据建立索引的时间的方式),在为业务数据a建立索引的时间到达时,即,12:12,再次为业务数据a的全部数据建立索引,并成功的建立了索引,则将该业务数据a对应的索引信息表中的索引状态更改为成功状态,且将该业务数据a对应的索引信息表中包含的失败次数置为0,如表3所示:
表3
另外,针对任一待建立索引的数据,当为该数据建立索引失败时,可以在该数据对应的索引信息表中添加建立索引失败的原因,后续,可根据该索引信息表中的建立索引失败的原因,采取相应的措施来防止再次出现这样的索引失败。
在实际应用中,有可能存在数据库中的某数据被删除,而索引库中还存在该数据的情况,因此,在本申请中,可以通过同步管理器确定数据库中待删除的各数据,根据确定出的待删除的各数据,通过同步管理器将待删除的各数据对应的索引信息表进行标记,后续,通过索引管理器确定标记的索引信息表对应的数据的索引,对确定出的索引进行标记,索引库可按照设定的时间间隔扫描具有标记的索引,并将扫描出的具有标记的索引删除,从而可有效的减少索引库的高峰压力。
例如,假设数据库将数据a删除掉了,此时同步管理器开始扫描数据库,确定出待删除的业务数据a,并根据确定出待删除的业务数据a,直接对待删除的业务数据a对应的索引信息表进行标记,如表4所示:
表4
索引管理器在索引库中确定索引信息表(即,表4)对应的业务数据a的索引,对确定出的索引进行标记,后续,索引库可按照设定的时间间隔扫描具有标记的索引,并将扫描出的具有标记的索引删除。
在此需要说明的是,以上之所以采用将待删除的各数据对应的索引信息表进行标记的方式,主要是因为为了不给整个索引建立的系统增加额外的运行压力,只是在索引库中对确定出的索引进行标记,表示该数据在索引库中已经删除,但并不是真正的删除了,只是用户在搜索与该数据相关的数据时,不会向用户提供该数据。
以上为本申请实施例提供的一种索引建立的方法,基于同样的思路,本申请实施例还提供了一种索引建立的装置,如图3所示。
图3为本申请实施例提供的索引建立的装置结构示意图,所述装置包括:
数据确定模块301,用于确定待建立索引的各数据;
数据类型确定模块302,用于确定所述各数据的数据类型;
优先级确定模块303,用于根据所述各数据的数据类型,确定各数据的优先级;
索引时间确定模块304,用于根据所述各数据的优先级,确定为所述各数据建立索引的时间,其中,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引的时间也不同;
索引建立模块305,用于针对所述各数据,在确定的为该数据建立索引的时间到达时,为该数据建立索引。
所述数据确定模块301具体用于,通过索引管理器提取所有数据对应的索引信息表,确定提取的各索引信息表中包含的索引状态,将索引状态为待索引状态或失败状态的数据,作为待建立索引的数据。
所述装置还包括:
监测模块306,用于针对数据库中的任一数据,通过同步管理器监测数据库中的该数据对应的最后更新时间是否超过该数据对应的索引信息表中包含的最后更新时间,当监测到数据库中的该数据对应的最后更新时间超过该数据对应的索引信息表中包含的最后更新时间时,如果该数据在对应的索引信息表中不存在,则在索引信息表中新增该数据并将该数据的索引状态设置为待索引状态,如果该数据已经存在于索引信息表中,则直接将该数据对应的索引信息表中的索引状态更改为待索引状态。
所述索引时间确定模块304具体用于,根据预设的各优先级对应的周期,确定为所述各数据建立索引对应的周期,其中,针对任意两个数据,若两个数据的优先级不同,则为两个数据建立索引对应的周期也不同,根据为所述各数据建立索引对应的周期以及当前时刻,确定为所述各数据建立索引的时间。
所述装置还包括:
索引状态更改模块307,用于针对任一待建立索引的数据,当为该数据建立索引失败时,通过同步管理器将该数据对应的索引信息表中的索引状态更改为失败状态,并且将该数据对应的索引信息表中包含的失败次数加1,当为该数据建立索引成功时,通过同步管理器将该数据对应的索引信息表中的索引状态更改为成功状态,并且将该数据对应的索引信息表中包含的失败次数置为0, 当该数据对应的索引信息表中的索引状态为失败状态,且失败次数超过预设的阈值时,不为该数据建立索引。
所述装置还包括:
原因添加模块308,用于所述索引建立模块305为该数据建立索引失败时,在该数据对应的索引信息表中添加建立索引失败的原因。
所述装置还包括:
删除模块309,用于通过同步管理器确定数据库中待删除的各数据,根据确定出的待删除的各数据,通过同步管理器将待删除的各数据对应的索引信息表进行标记,通过索引管理器确定标记的索引信息表对应的数据的索引,对确定出的索引进行标记,按照设定的时间间隔扫描具有标记的索引,并将扫描出的具有标记的索引删除。
所述索引建立模块305具体用于,针对不同类型的数据,采用不同的索引处理工具建立索引。
在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信 息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。