一种索引建立装置和方法
技术领域
本发明涉及互联网数据处理领域,尤其涉及一种索引建立装置和方法。
背景技术
目前的搜索引擎主要是以百度、google为代表的传统搜索引擎,这些搜索引擎通过对互联网的网页进行抓取和分析后,每隔一段时间对数据建立一次索引。
这些搜索引擎在数据的实时性方面最多能达到分钟级的更新速度,当面对微博这类新兴的互联网应用时,其涉及的数据更新速度非常快,如在热门新闻事件时每秒就有数以千计篇报道,这些传统的搜索引擎则明显有些力不从心,需要有更快的数据实时搜索技术进行补充。
发明内容
本发明实施例所要解决的技术问题在于,提供一种索引建立装置和方法。可以实现数据索引的快速建立,以便实现数据的实时搜索。
为了解决上述技术问题,本发明实施例提供了一种数据检索系统,其包括索引建立装置和检索模块;
其中,所述检索模块用于根据所述N个数据库的索引提供检索服务。
数据索引建立装置包括:
索引模块,用于将数据实时写入N个数据库中的一个,当所述N个数据库写满时将在所述数据库中存在时间较长的数据用最新数据覆盖,并建立所述N个数据库的索引,其中,所述数据库具有预定义的数据容量上限,N为预定义的大于等于1的自然数;
传输模块,用于将建立的所述N个数据库的索引通过网络传输给所述数据检索系统中的检索模块,以便检索模块提供检索服务。
优选的,所述索引模块可包括:
数据库维护子模块,用于维护N个数据库;
数据库写入子模块,用于将数据实时写入第n个数据库,并当第n个数据库写满且n+1<=N时,将新数据写入第n+1个数据库,当第n个数据库写满且n+1>N时,将新数据写入第1个数据库并覆盖第1个数据库中的原数据,n为大于等于1的自然数;
索引生成子模块,用于根据N个数据库中的数据建立索引。
优选的,所述索引模块还用于当检测到N个数据库中一个或多个数据库中的数据发生变动后,建立变动后的数据库的新的索引;
所述传输模块还用于将新的索引传输给所述检索模块。
优选的,所述数据包括微博数据,所述数据容量上限包括文档篇数上限。
优选的,所述系统还包括普通索引建立装置,所述普通索引建立装置用于维护普通数据库,并根据所述普通数据库建立普通索引,其中,所述普通数据库中存储有在所述N个数据库中存在时间较长的被最新数据覆盖的数据。
优选的,所述检索模块还用于根据所述普通索引装置建立的普通索引提供检索服务。
相应的,本发明实施例还提供了一种索引建立方法,用于数据检索系统中,所述方法包括:
将数据实时写入N个数据库中的一个,当所述N个数据库写满时将在所述数据库中存在时间较长的数据用最新数据覆盖,并建立所述N个数据库的索引,其中,所述数据库具有预定义的数据容量上限,N为预定义的大于等于1的自然数;
将建立的所述N个数据库的索引通过网络传输给所述数据检索系统中的检索模块,以便检索模块提供检索服务。
其中,所述将数据实时写入N个数据库中的一个,当所述N个数据库数据写满时将在所述数据库中存在时间较长的数据用最新数据覆盖包括:
将数据实时写入第n个数据库,并当第n个数据库写满且n+1<=N时,将新数据写入第n+1个数据库,当第n个数据库写满且n+1>N时,将新数据写入第1个数据库并覆盖第1个数据库中的原数据,n为大于等于1的自然数。
优选的,所述方法还可包括
当检测到N个数据库中一个或多个数据库中的数据发生变动后,建立变动后的数据库的新的索引;
将新的索引传输给所述检索模块。
在本发明实施例中,建立特殊的N个数据库,这些数据库有预定义的容量上限,当数据库写满时则进行循环的数据覆盖,这样一方面可以基于这种有预定义容量的数据库实现索引的快速建立,另一方面对旧数据进行覆盖,符合实时检索的目的,即默认旧的数据的时效性低,不是实时检索的检索对象。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的数据检索系统的一个具体组成示意图;
图2是本发明实施例中的索引建立装置的一个具体组成示意图;
图3是图2中的索引模块的一个具体组成示意图;
图4是本发明实施例中的数据检索系统的另一个具体组成示意图;
图5是本发明实施例中的索引建立方法的一个具体流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中,为了实现实时检索,需要快速的建立数据库索引,因而先将数据容量划分为N个都具有固定容量上限的数据库,这样,为每个数据库生成索引时速度可以很快,同时,当N个数据库满容的时候,则将“最旧”的数据覆盖,保证了最新的数据可以被检索,同时舍弃旧的数据也符合实时检索的目的,即默认旧的数据的时效性低,不是实时检索的检索对象。
如图1所示为,本发明实施例中的数据检索系统的一个具体组成示意图,其包括索引建立装置1和检索模块2;其中,所述检索模块2用于根据所述N个数据库的索引提供检索服务。如图2所示,则为本发明实施例中的索引建立装置的一个具体组成示意图,也是上述系统中的索引建立装置的组成示意图。该装置1包括如下模块。
索引模块10,用于将数据实时写入N个数据库中的一个,当所述N个数据库写满时将在所述数据库中存在时间较长的数据用最新数据覆盖,并建立所述N个数据库的索引,其中,所述数据库具有预定义的数据容量上限,N为预定义的大于等于1的自然数(其中,当等于1时就是这个数据库装满时就覆盖掉自身的数据,重新开始);传输模块12,用于将建立的所述N个数据库的索引通过网络传输给所述数据检索系统中的检索模块2,以便检索模块2提供检索服务。所述数据包括微博数据,所述数据容量上限包括文档篇数上限。
同时,对于N个数据库的数据容量上限在定义时,可以是统一大小的数据容量上限,也可以是各个数据库的数据容量上限不同。同时,N的具体数值也可以根据实际情况进行设定,N设定过小则可能导致总体容量小而单个数据库容量又太大,N设定过大则可能导致要生成的索引过多不利于后续的检索。在一些具体实施例中N值一般可跟系统的条件挂钩,比如根据多核cpu的多核数目、内存及具体的数据规模灵活配置的,可以从1开始,原则上没有上限,但是基于机器,性能等原因,这个上限一般是个经验或实验值
其中,为了有效的提高实时性,所述索引模块10还用于当检测到N个数据库中一个或多个数据库中的数据发生变动后,建立变动后的数据库的新的索引;所述传输模块12还用于将新的索引传输给所述检索模块2。
对于旧数据覆盖和新数据写入,可以采用循环写技术来实现,则如图3所示,此时所述索引模块10可包括:数据库维护子模块100,用于维护N个数据库;数据库写入子模块102,用于将数据实时写入第n个数据库,并当第n个数据库写满且n+1<=N时,将新数据写入第n+1个数据库,当第n个数据库写满且n+1>N时,将新数据写入第1个数据库并覆盖第1个数据库中的原数据,n为大于等于1的自然数;索引生成子模块104,用于根据N个数据库中的数据建立索引。
如,当N=1时,n从1开始循环,数据写入第1个数据库中,当第1个数据库写满时,1+1>1,则数据仍写入第1个数据库中覆盖原数据;当N=3时,n从1开始循环,数据写入第1个数据库中,当第1个数据库写满时,1+1<3,则数据写入第1+1个(即第2个)数据库中,同时n+1=2,当第2个数据库写满时,2+1=3,则新的数据写入第2+1个数据库中,同时n+1=3,当第3个数据库写满时,3+1>3,则新的数据写入第1个数据库并覆盖该数据库中的原数据。
当然,也可以不是上述的循环写技术,如循环写时先写奇数数据库再写偶数数据库,或是随机写入未写满的数据库中;覆盖时也可以任意选择一个已写满的数据库;当然,也可以按照与各个数据库有关的软硬件性能对N个数据库进行区别对待,某些数据库可能采用一些特定的设置具有特定的性能(如,采用读写数据快的硬件存储的数据库),则写入时优先写入这些数据库;在对旧数据库进行覆盖时,优先覆盖这些读写速度快的数据库等。
而被新数据覆盖的旧数据也不见得是最旧的数据,可能是次旧的数据等,如对数据重要级别进行区别对待,一些比较重要的数据可以相对存在得久一点,如微博中转发频率较高的文档可以存在久一点,则将这类数据存入某一个数据库中,并在覆盖时可以在存其他较旧数据的数据库被覆盖后再覆盖这一数据库等。
在上述描述可知,由于旧数据会被新数据覆盖,为了提高检索的全面性,可将上述的实时检索系统和已有的普通检索系统相结合。如图4所示,在本发明实施例中的数据检索系统中还包括普通索引建立装置3,所述普通索引建立装置3用于维护普通数据库,并根据所述普通数据库建立普通索引,其中,所述普通数据库中存储有在所述N个数据库中存在时间较长的被最新数据覆盖的数据。相应的,所述检索模块2还用于根据所述普通索引装置建立的普通索引提供检索服务。
这样,所有数据都存在相应的数据库中,只不过最新的数据存在N个数据库中某一个,而较旧的数据则转移到普通数据库中存储。在检索时,最新的数据就可以被实时的检索到,同时,旧的数据也能被检索到。
相应的,本发明实施例还提供了一种索引建立方法,用于数据检索系统中,如图5所示,所述方法包括如下步骤。
501、将数据实时写入N个数据库中的一个,当所述N个数据库写满时将在所述数据库中存在时间较长的数据用最新数据覆盖,并建立所述N个数据库的索引,其中,所述数据库具有预定义的数据容量上限,N为预定义的大于等于1的自然数。
在本步骤中进行写入时,可采用循环写入方法,即将数据实时写入第n个数据库,并当第n个数据库写满且n+1<=N时,将新数据写入第n+1个数据库,当第n个数据库写满且n+1>N时,将新数据写入第1个数据库并覆盖第1个数据库中的原数据,n为大于等于1的自然数。
502、将建立的所述N个数据库的索引通过网络传输给所述数据检索系统中的检索模块,以便检索模块提供检索服务。
进一步的,所述方法还可包括(图中虚线所示)步骤503、当检测到N个数据库中一个或多个数据库中的数据发生变动后,建立变动后的数据库的新的索引;504、将新的索引传输给所述检索模块。
在本发明实施例中,建立特殊的N个数据库,这些数据库有预定义的容量上限,当数据库写满时则进行循环的数据覆盖,这样一方面保证了数据库大小可以实现快速建立索引,另一方面对于旧数据进行覆盖,也符合实时检索的目的,即默认旧的数据的时效性低不是实时检索的检索对象。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。