一种增量索引数据的处理方法和装置与流程

文档序号:24941362发布日期:2021-05-04 11:34阅读:87来源:国知局
一种增量索引数据的处理方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种增量索引数据的处理方法和装置。



背景技术:

搜索引擎中的索引数据分为全量索引数据和增量索引数据。比如,对于电商搜索数据而言,全量索引是对某一时刻商品库中所有商品数据构建的索引,一般全量索引数据的构建周期为几天或者几周;增量索引则是在两次全量索引构建期间,对商品库中新增或者实时修改的商品数据建立的索引,一般生成两条增量索引数据的时间间隔为几秒或者几毫秒。

为了保证搜索服务的实时性,搜索引擎服务会持续不断地接收实时增量索引数据。当搜索引擎服务更新重启或者故障恢复重新启动时,需要重新依次加载增量索引数据,保证索引数据的完整性和实时性。

增量索引通过磁盘文件的方式将一条或者多条增量索引数据存储在磁盘的增量索引文件中,并对每个文件进行压缩编码,减少对传输过程中的网络带宽以及存储资源的占用。搜索引擎服务启动时,依次加载每个增量索引文件,并根据业务需求对增量索引文件中的每条增量索引数据进行解析,以供搜索引擎服务使用。

在实现本发明过程中,发明人发现现有技术中至少存在如下问题:

当全量索引的构建周期较长时,会在磁盘中产生大量的增量索引文件。当搜索引擎服务重启时,需要重新从磁盘中读取大量的增量索引文件,并根据业务需求对每条增量数据重新进行解析。对于机械盘机器来说,连续的小文件读写会严重影响磁盘的吞吐,增加了加载增量索引数据的耗时,而且重新解析每条增量索引数据也增加了搜索引擎服务恢复启动的耗时。



技术实现要素:

有鉴于此,本发明实施例提供一种增量索引数据的处理方法和装置,以解决搜索引擎服务重启时重新加载、解析增量索引数据导致重启耗时长的技术问题。

为实现上述目的,根据本发明实施例的一个方面,提供了一种增量索引数据的处理方法,包括:

接收增量索引数据,并将所述增加索引数据存储到连续的缓存中;

若所述缓存的空间已满,则将所述缓存中的增量索引数据存储到磁盘的临时子数据集中;

每隔预设时间间隔或者每隔预设增量索引数据条数,将所述临时子数据集封装为只读的子数据集。

可选地,将所述增加索引数据存储到连续的缓存中,包括:

将增量索引数据逐条存储到连续的数据缓存中,并将所述增量索引数据的文档id和所述增量索引数据在所述数据缓存中的位置偏移量记录到索引缓存中。

可选地,将所述缓存中的增量索引数据存储到磁盘的临时子数据集中,包括:

将所述数据缓存中的增量索引数据存储到磁盘的增量数据文件中;

根据所述增量索引数据在所述磁盘中的位置偏移量更新所述索引缓存,并将更新后的所述索引缓存中的数据存储到所述磁盘的数据库引擎文件中;

其中,所述临时子数据集中的文件对象包括增量数据文件和数据库引擎文件。

可选地,针对每条增量索引数据,采用如下方法确定该条增量索引数据在所述磁盘中的位置偏移量:

将所述增量数据文件在所述磁盘中的起始位置与该条增量索引数据在所述数据缓存中的位置偏移量相加之和,作为该条增量索引数据在所述磁盘中的位置偏移量。

可选地,将所述临时子数据集封装为只读的子数据集,包括:

判断所述缓存是否为空;

若是,则将所述临时子数据集封装为只读的子数据集;

若否,则将所述缓存中的增量索引数据存储到所述磁盘的临时子数据集中,并将所述临时子数据集封装为只读的子数据集。

可选地,将所述临时子数据集封装为只读的子数据集,包括:

关闭所述临时子数据集中的所有文件对象;

为所述临时子数据集分配快照id,用快照id重命名所述临时子数据集,并将所述临时子数据集封装为只读的子数据集;

新建临时子数据集,打开新建的所述临时子数据集中的所有文件对象;

其中,所述快照id随着封装次数的增加依次递增。

可选地,在将所述临时子数据集封装为只读的子数据集之后,还包括:

按照快照id由大到小的顺序,依次将各个子数据集加载到内存中;

按照快照id由大到小的顺序,对内存中各个所述子数据集中的数据进行解析,并将解析后的数据存储到内存中。

可选地,针对每个子数据集,采用如下方法将所述子数据集加载到内存中:

将所述子数据集中的数据库引擎文件读取到内存中;

遍历所述数据库引擎文件,按照所述增量索引数据在所述磁盘中的位置偏移量,将键值映射到固定大小的桶中;

按照由小到大的顺序,依次遍历每个桶,将每个桶对应的增量索引数据加载到内存中。

可选地,对各个所述子数据集中的增量索引数据进行解析,并将解析后的增量索引数据存储到内存中,包括:

结合文档id的位图,对内存中各个所述子数据集中的数据进行解析,并将解析结果存储到内存中;

根据解析结果,更新所述文档id的位图;

其中,所述文档id的位图表示各个文档id对应的增量索引数据是否已被解析。

可选地,针对每个子数据集中的各条增量索引数据,采用如下方法进行解析:

判断待解析的增量索引数据在所述文档id的位图中的状态是否为未被解析;

若是,则从内存中获取所述待解析的增量索引数据,对其进行解析;

若否,则跳过所述待解析的增量索引数据。

另外,根据本发明实施例的另一个方面,提供了一种增量索引数据的处理装置,包括:

第一存储模块,用于接收增量索引数据,并将所述增加索引数据存储到连续的缓存中;

第二存储模块,用于若所述缓存的空间已满,则将所述缓存中的增量索引数据存储到磁盘的临时子数据集中;

封装模块,用于每隔预设时间间隔或者每隔预设增量索引数据条数,将所述临时子数据集封装为只读的子数据集。

可选地,所述第一存储模块还用于:

将增量索引数据逐条存储到连续的数据缓存中,并将所述增量索引数据的文档id和所述增量索引数据在所述数据缓存中的位置偏移量记录到索引缓存中。

可选地,所述第二存储模块还用于:

将所述数据缓存中的增量索引数据存储到磁盘的增量数据文件中;

根据所述增量索引数据在所述磁盘中的位置偏移量更新所述索引缓存,并将更新后的所述索引缓存中的数据存储到所述磁盘的数据库引擎文件中;

其中,所述临时子数据集中的文件对象包括增量数据文件和数据库引擎文件。

可选地,所述第二存储模块还用于:针对每条增量索引数据,采用如下方法确定该条增量索引数据在所述磁盘中的位置偏移量:

将所述增量数据文件在所述磁盘中的起始位置与该条增量索引数据在所述数据缓存中的位置偏移量相加之和,作为该条增量索引数据在所述磁盘中的位置偏移量。

可选地,所述封装模块还用于:

判断所述缓存是否为空;

若是,则将所述临时子数据集封装为只读的子数据集;

若否,则将所述缓存中的增量索引数据存储到所述磁盘的临时子数据集中,并将所述临时子数据集封装为只读的子数据集。

可选地,所述封装模块还用于:

关闭所述临时子数据集中的所有文件对象;

为所述临时子数据集分配快照id,用快照id重命名所述临时子数据集,并将所述临时子数据集封装为只读的子数据集;

新建临时子数据集,打开新建的所述临时子数据集中的所有文件对象;

其中,所述快照id随着封装次数的增加依次递增。

可选地,还包括解析模块,用于:

在将所述临时子数据集封装为只读的子数据集之后,按照快照id由大到小的顺序,依次将各个子数据集加载到内存中;

按照快照id由大到小的顺序,对内存中各个所述子数据集中的数据进行解析,并将解析后的数据存储到内存中。

可选地,所述解析模块还用于:针对每个子数据集,采用如下方法将所述子数据集加载到内存中:

将所述子数据集中的数据库引擎文件读取到内存中;

遍历所述数据库引擎文件,按照所述增量索引数据在所述磁盘中的位置偏移量,将键值映射到固定大小的桶中;

按照由小到大的顺序,依次遍历每个桶,将每个桶对应的增量索引数据加载到内存中。

可选地,所述解析模块还用于:

结合文档id的位图,对内存中各个所述子数据集中的数据进行解析,并将解析结果存储到内存中;

根据解析结果,更新所述文档id的位图;

其中,所述文档id的位图表示各个文档id对应的增量索引数据是否已被解析。

可选地,所述解析模块还用于:针对每个子数据集中的各条增量索引数据,采用如下方法进行解析:

判断待解析的增量索引数据在所述文档id的位图中的状态是否为未被解析;

若是,则从内存中获取所述待解析的增量索引数据,对其进行解析;

若否,则跳过所述待解析的增量索引数据。

根据本发明实施例的另一个方面,还提供了一种电子设备,包括:

一个或多个处理器;

存储装置,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例所述的方法。

根据本发明实施例的另一个方面,还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一实施例所述的方法。

上述发明中的一个实施例具有如下优点或有益效果:因为采用将增加索引数据存储到连续的缓存中,若缓存空间已满,则将缓存中的增量索引数据存储到磁盘的临时子数据集中,并将临时子数据集封装为只读的子数据集的技术手段,所以克服了现有技术中搜索引擎服务重启时重新加载、解析增量索引数据导致重启耗时长的技术问题。本发明实施例可以避免每接收一条增量索引数据都触发写磁盘操作,因此减少持久化增量索引数据的耗时。而且将两次相邻的快照操作期间新增的增量索引数据存储到子数据集中,供重启恢复使用,同时保证该子数据集的完整性。服务重启时,通过连续的按块读磁盘操作,提高了子数据集恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的增量索引数据的处理方法的主要流程的示意图;

图2是根据本发明实施例的将增量索引数据存储到磁盘中的示意图;

图3是根据本发明一个可参考实施例的增量索引数据的处理方法的主要流程的示意图;

图4是根据本发明另一个可参考实施例的增量索引数据的处理方法的主要流程的示意图;

图5是根据本发明再一个可参考实施例的增量索引数据的处理方法的主要流程的示意图;

图6是根据本发明实施例的将leveldb文件中的数据映射到磁盘空间的示意图;

图7是根据本发明实施例的增量索引数据的处理装置的主要模块的示意图;

图8是本发明实施例可以应用于其中的示例性系统架构图;

图9是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1是根据本发明实施例的增量索引数据的处理方法的主要流程的示意图。作为本发明的一个实施例,如图1所示,所述增量索引数据的处理方法可以包括:

步骤101,接收增量索引数据,并将所述增加索引数据存储到连续的缓存中。

搜索引擎服务接收到一条增量索引数据后,会将其解析为本地使用的数据格式(一般是自定义的二进制存储格式,为了节省存储空间,且便于快速查找),并存储在缓存中。如果搜索引擎服务再接收到一条增量索引数据,则将这条增量索引数据追加到上一条增量索引数据后,保证这些增量索引数据存储在一段连续的缓存中。

可选地,将所述增加索引数据存储到连续的缓存中,包括:将增量索引数据逐条存储到连续的数据缓存中,并将所述增量索引数据的文档id和所述增量索引数据在所述数据缓存中的位置偏移量记录到索引缓存中。在本发明的实施例中,对于每一条待持久化的增量索引数据:将该条增量索引数据追加到连续的数据缓存中,并返回该条增量索引数据在数据缓存中的偏移量offset1;将增量索引数据的文档id和偏移量offset1记录到索引缓存中。其中,所述增加索引数据的文档id是增量索引数据中携带的,文档id可以是某个物品的id,也可以是这条增量索引数据的id,本发明实施例对此不作限制。

将增量索引数据,文档id和位置偏移量分别存储在数据缓存、索引缓存中,是为了实现键值分离,便于在步骤102中将数据存储和索引缓存中的数据分别写到磁盘的不同文件对象中,以提高增量索引数据的读写效率。

步骤102,若所述缓存的空间已满,则将所述缓存中的增量索引数据存储到磁盘的临时子数据集中。

如果缓存(数据缓存与索引缓存)的空间已满,则要先暂停接收待持久化的增量索引数据,然后触发写磁盘操作,也就是将缓存中的增量索引数据全部写入磁盘的临时子数据集中。

可选地,将所述缓存中的增量索引数据存储到磁盘的临时子数据集中,包括:将所述数据缓存中的增量索引数据存储到磁盘的增量数据文件中;根据所述增量索引数据在所述磁盘中的位置偏移量更新所述索引缓存,并将更新后的所述索引缓存中的数据存储到所述磁盘的数据库引擎文件中。其中,所述临时子数据集中的文件对象包括增量数据文件和数据库引擎文件。本发明实施例基于机械硬盘连续读写的工作特点,采用键值分离的策略,在写磁盘操作时,将增量索引数据存储在连续的磁盘空间中,提高增量索引数据的读写效率,将文档id和增量索引数据在磁盘中的位置偏移量存储在数据库引擎文件(比如leveldb文件)中,实现实时增量索引数据的持久化存储功能。

可选地,针对每条增量索引数据,采用如下方法确定该条增量索引数据在所述磁盘中的位置偏移量:将所述增量数据文件在所述磁盘中的起始位置与该条增量索引数据在所述数据缓存中的位置偏移量相加之和,作为该条增量索引数据在所述磁盘中的位置偏移量。

可选地,步骤102可以包括以下步骤:

检查缓存空间,如果已满,则将所述数据缓存中的增量索引数据追加到磁盘的增量数据文件中,同时返回增量数据文件在磁盘中的起始位置base;根据增量索引数据在磁盘中的位置偏移量offset2=offset1+base,更新索引缓存中每条增量索引数据的offset,并将更新后的索引缓存中的数据(文档id和offset2)存储到磁盘的leveldb文件中。如果缓存空间未满,则执行步骤101。将数据存储到临时子数据集(增量数据文件和leveldb文件)后,清空缓存。

采用步骤101和步骤102进行持久化存储,可以避免每接收一条增量索引数据都触发写磁盘操作,因此本发明实施例可以减少持久化增量索引数据的耗时。

步骤103,每隔预设时间间隔或者每隔预设增量索引数据条数,将所述临时子数据集封装为只读的子数据集。

时间间隔和增量索引数据的条数可以预先配置,比如每隔10秒、30秒、1分钟、5分钟、10分钟等,将所述临时子数据集封装为只读的子数据集;也可以每接收100条、1000条或者2000条等增量索引数据,将所述临时子数据集封装为只读的子数据集。需要指出的是,在任意时刻,磁盘上只有一个临时子数据集。搜索引擎通过快照功能,将磁盘上当前的临时子数据集封装为只读的子数据集,保证持久化存储的完整性,并且在搜索引擎服务重启后可完整恢复所有的增量索引数据。

可选地,将所述临时子数据集封装为只读的子数据集,包括:判断所述缓存是否为空;若是,则将所述临时子数据集封装为只读的子数据集;若否,则将所述缓存中的增量索引数据存储到所述磁盘的临时子数据集中,并将所述临时子数据集封装为只读的子数据集。快照操作可以保证截至此次快照操作前的所有增量索引数据都成功存储到磁盘中。需要指出的是,快照操作会阻塞增量索引数据的存储操作(即步骤101和步骤102)。快照操作可以将临时子数据集中的数据连续、批量地持久化写入磁盘。

可选地,将所述临时子数据集封装为只读的子数据集,包括:关闭所述临时子数据集中的所有文件对象;为所述临时子数据集分配快照id,用快照id重命名所述临时子数据集,并将所述临时子数据集封装为只读的子数据集;新建临时子数据集,打开新建的所述临时子数据集中的所有文件对象;其中,所述快照id随着封装次数的增加依次递增。

可选地,每次执行快照操作后都会返回一个6位数的快照id,初始快照id为“000000”,依次递增。并以该快照id重命名所述临时子数据集。如图2所示,t0时刻执行的第一次快照操作,在磁盘中生成只读的子数据集“000000”,t1时刻执行的第二次快照操作,在磁盘中生成只读的子数据集“000001”,以此类推。

由于增量数据文件和数据库引擎放在同一目录下,因此在两次相邻的快照操作期间,新增的增量索引数据及其对应的文档id、磁盘中的位置偏移量都存储在了一个只读的子数据集。在本发明的实施例中,分快照id的过程就是将临时子数据集切换成只读的子数据集的过程。

根据上面所述的各种实施例,可以看出本发明通过将增加索引数据存储到连续的缓存中,若缓存空间已满,则将缓存中的增量索引数据存储到磁盘的临时子数据集中,并将临时子数据集封装为只读的子数据集的技术手段,从而解决了现有技术中搜索引擎服务重启时重新加载、解析增量索引数据导致重启耗时长的技术问题。本发明实施例可以避免每接收一条增量索引数据都触发写磁盘操作,因此减少持久化增量索引数据的耗时。而且将两次相邻的快照操作期间新增的增量索引数据存储到子数据集中,供重启恢复使用,同时保证该子数据集的完整性。服务重启时,通过连续的按块读磁盘操作,提高了子数据集恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。

图3是根据本发明一个可参考实施例的增量索引数据的处理方法的主要流程的示意图。步骤101和步骤103为存储过程,具体可以包括以下步骤:

步骤301,接收增量索引数据。

步骤302,将增量索引数据存储到连续的数据缓存中,返回该条增量索引数据在数据缓存中的偏移量offset1。

步骤303,将所述增量索引数据的文档id和所述增量索引数据在所述数据缓存中的位置偏移量,即<文档id,offset1>,记录到索引缓存中。

步骤304,判断缓存空间是否已满;若是,则执行步骤305;若否,则执行步骤301。

步骤305,将数据缓存中的增量索引数据追加到磁盘的增量数据文件中,返回增量数据文件在磁盘中的起始位置base。

步骤306,根据增量索引数据在磁盘中的位置偏移量offset2=offset1+base,更新索引缓存中每条增量索引数据的offset。

步骤307,将更新后的索引缓存中的数据<文档id,offset2>存储到磁盘的数据库引擎文件中。

采用步骤301-307进行持久化存储,可以避免每接收一条增量索引数据都触发写磁盘操作,因此本发明实施例可以减少持久化增量索引数据的耗时。

另外,在本发明一个可参考实施例中增量索引数据的处理方法的具体实施内容,在上面所述增量索引数据的处理方法中已经详细说明了,故在此重复内容不再说明。

图4是根据本发明另一个可参考实施例的增量索引数据的处理方法的主要流程的示意图。以图2中tn时刻的快照操作为例,步骤103可以包括以下步骤:

步骤401,判断缓存是否为空;若是,则执行步骤405;若否,则执行步骤402。

步骤402,将数据缓存中的增量索引数据追加到临时子数据集的增量数据文件中,返回增量数据文件在磁盘中的起始位置base。

步骤403,根据增量索引数据在磁盘中的位置偏移量offset2=offset1+base,更新索引缓存中每条增量索引数据的offset。

步骤404,将更新后的索引缓存中的数据<文档id,offset2>存储到临时子数据集的数据库引擎文件中。

步骤405,关闭所述临时子数据集中的所有文件对象。

步骤406,为所述临时子数据集分配快照id,用快照id重命名所述临时子数据集,并将所述临时子数据集封装为只读的子数据集。

步骤407,新建临时子数据集,打开新建的所述临时子数据集中的所有文件对象(即增量数据文件和数据库引擎文件),用于存储下一次快照操作前(tn+1时刻前)新增的增量索引数据。

快照操作既可以保证持久化增量索引数据的完整性,同时也避免频繁写磁盘对步骤101和步骤102的影响。如果两次快照操作期间没有持久化新的增量索引数据,则两次快照操作将被视为同一个操作,第二次的快照操作将不执行任何操作,从而避免频繁的快照操作阻塞其它操作。

另外,在本发明另一个可参考实施例中增量索引数据的处理方法的具体实施内容,在上面所述增量索引数据的处理方法中已经详细说明了,故在此重复内容不再说明。

图5是根据本发明再一个可参考实施例的增量索引数据的处理方法的主要流程的示意图。

在将所述临时子数据集封装为只读的子数据集之后,还包括:按照快照id由大到小的顺序,依次将各个子数据集加载到内存中;按照快照id由大到小的顺序,对内存中各个所述子数据集中的数据进行解析,并将解析后的数据存储到内存中。搜索引擎服务重启时,通过快照id即可获取到指定时刻对应的子数据集,并将小于等于该快照id的子数据集依次进行恢复。如图2所示,通过快照id“000001”可以恢复t1时刻之前的所有增量数据,也就是,子数据集“000001”和子数据集“000000”中的所有增量索引数据。

可选地,如图5所示,针对每个子数据集,采用如下方法将所述子数据集加载到内存中:

步骤501,将所述子数据集中的数据库引擎文件读取到内存中。

可选地,将存储在leveldb文件中的键值对“<文档id,offset2>”读取到内存中。

步骤502,遍历所述数据库引擎文件,按照所述增量索引数据在所述磁盘中的位置偏移量,将键值映射到固定大小的桶中。

可选地,遍历leveldb文件,按照offset2将键值对映射到固定大小(如1m、64m或128m等)的桶中,此时每个桶中的文档id对应的增量数据存储在连续的(如1m、64m或128m等)磁盘空间中。如图6所示,id-1、id-3、id-4映射到第一个桶中,对应的增量索引数据都在磁盘文件的0~1m、0~64m或者0~128m的空间内。

步骤503,按照由小到大的顺序,依次遍历每个桶,将每个桶对应的增量索引数据加载到内存中。

在该步骤中,从小到大依次遍历每个桶(即依次遍历第一个桶到最后一个桶),对每个桶中的所有增量索引数据,通过一次连续的读磁盘操作(如1m、64m或128m等),即可将该桶对应的所有增量索引数据都加载到内存中。

因此,通过上述步骤501-503,依次遍历这些子数据集,从而将这些子数据集中的增量索引数据拷贝到内存中。

可选地,对各个所述子数据集中的增量索引数据进行解析,并将解析后的增量索引数据存储到内存中,包括:结合文档id的位图,对内存中各个所述子数据集中的数据进行解析,并将解析结果存储到内存中;根据解析结果,更新所述文档id的位图。其中,所述文档id的位图表示各个文档id对应的增量索引数据是否已被解析。

需要指出的是,在文档id的位图中,每一个文档id用一个bit位表示。解析增量索引数据前,将该增量索引数据的文档id对应的bit位标记为0,解析完成后,将该增量索引数据的文档id对应的bit位标记为1。当解析下一个子数据集中的增量索引数据时,如果检查该文档id对应的bit位1,说明这条增量索引数据的已被解析并存储在内存中,则跳过这条增量索引数据。

由于是按照快照id由大到小的顺序,对内存中各个所述子数据集中的数据进行解析,因此通过文档id的位图表示增量索引数据是否已被解析,方便判断是否解析下一个子数据集中的同一个文档id的增量索引数据。一个文档id可能会被存储了多次(比如一个文档被更新了多次),而解析到内存的时候只解析最后一次存储在磁盘中的(也就是最新的增量索引数据)。

可选地,针对每个子数据集中的各条增量索引数据,采用如下方法进行解析:判断待解析的增量索引数据在所述文档id的位图中的状态是否为未被解析;若是,则从内存中获取所述待解析的增量索引数据,对其进行解析;若否,则跳过所述待解析的增量索引数据。遍历当前桶中的每条增量数据,检查当前解析的增量索引数据的文档id的位图,如果该文档id的位图标记为0(说明未被解析),则从内存中获取所述待解析的增量索引数据,对其进行解析,并将该文档id的位图标记为1(说明已被解析);否则,跳过该条增量索引数据。

在本发明的实施例中,在重启服务时,仅将新增的增量索引数据解析到内存中,供服务使用,避免对每条增量索引数据进行解析,这样可以显著提高服务更新重启和故障恢复的效率;而且将随机读磁盘改进为连续的按块读磁盘操作,符合机械盘读磁盘的特性,提高了增量索引数据恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。相比于现有技术中的小文件存储方案,本发明的搜索引擎服务启动耗时降低了一倍,显著提升了服务更新重启和故障恢复的效率。

需要指出的是,搜索引擎服务重启时不会对临时子数据集进行恢复,而是对只读的子数据集进行恢复。通过快照功能,将临时子数据集封装成只读的子数据集,供重启恢复使用,同时保证该子数据集的完整性。服务重启时,通过遍历每个子数据集,执行连续的按块读磁盘操作,将存储在磁盘中的增量索引数据拷贝到内存中供服务使用,提高了子数据集恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。

另外,在本发明另一个可参考实施例中增量索引数据的处理方法的具体实施内容,在上面所述增量索引数据的处理方法中已经详细说明了,故在此重复内容不再说明。

图7是根据本发明实施例的增量索引数据的处理装置的主要模块的示意图,如图7所示,所述增量索引数据的处理装置700包括第一存储模块701、第二存储模块702和封装模块703。其中,第一存储模块701用于接收增量索引数据,并将所述增加索引数据存储到连续的缓存中;第二存储模块702用于若所述缓存的空间已满,则将所述缓存中的增量索引数据存储到磁盘的临时子数据集中;封装模块703用于每隔预设时间间隔或者每隔预设增量索引数据条数,将所述临时子数据集封装为只读的子数据集。

可选地,所述第一存储模块701还用于:

将增量索引数据逐条存储到连续的数据缓存中,并将所述增量索引数据的文档id和所述增量索引数据在所述数据缓存中的位置偏移量记录到索引缓存中。

可选地,所述第二存储模块702还用于:

将所述数据缓存中的增量索引数据存储到磁盘的增量数据文件中;

根据所述增量索引数据在所述磁盘中的位置偏移量更新所述索引缓存,并将更新后的所述索引缓存中的数据存储到所述磁盘的数据库引擎文件中;

其中,所述临时子数据集中的文件对象包括增量数据文件和数据库引擎文件。

可选地,所述第二存储模块702还用于:针对每条增量索引数据,采用如下方法确定该条增量索引数据在所述磁盘中的位置偏移量:

将所述增量数据文件在所述磁盘中的起始位置与该条增量索引数据在所述数据缓存中的位置偏移量相加之和,作为该条增量索引数据在所述磁盘中的位置偏移量。

可选地,所述封装模块703还用于:

判断所述缓存是否为空;

若是,则将所述临时子数据集封装为只读的子数据集;

若否,则将所述缓存中的增量索引数据存储到所述磁盘的临时子数据集中,并将所述临时子数据集封装为只读的子数据集。

可选地,所述封装模块703还用于:

关闭所述临时子数据集中的所有文件对象;

为所述临时子数据集分配快照id,用快照id重命名所述临时子数据集,并将所述临时子数据集封装为只读的子数据集;

新建临时子数据集,打开新建的所述临时子数据集中的所有文件对象;

其中,所述快照id随着封装次数的增加依次递增。

可选地,还包括解析模块,用于:

在将所述临时子数据集封装为只读的子数据集之后,按照快照id由大到小的顺序,依次将各个子数据集加载到内存中;

按照快照id由大到小的顺序,对内存中各个所述子数据集中的数据进行解析,并将解析后的数据存储到内存中。

可选地,所述解析模块还用于:针对每个子数据集,采用如下方法将所述子数据集加载到内存中:

将所述子数据集中的数据库引擎文件读取到内存中;

遍历所述数据库引擎文件,按照所述增量索引数据在所述磁盘中的位置偏移量,将键值映射到固定大小的桶中;

按照由小到大的顺序,依次遍历每个桶,将每个桶对应的增量索引数据加载到内存中。

可选地,所述解析模块还用于:

结合文档id的位图,对内存中各个所述子数据集中的数据进行解析,并将解析结果存储到内存中;

根据解析结果,更新所述文档id的位图;

其中,所述文档id的位图表示各个文档id对应的增量索引数据是否已被解析。

可选地,所述解析模块还用于:针对每个子数据集中的各条增量索引数据,采用如下方法进行解析:

判断待解析的增量索引数据在所述文档id的位图中的状态是否为未被解析;

若是,则从内存中获取所述待解析的增量索引数据,对其进行解析;

若否,则跳过所述待解析的增量索引数据。

根据上面所述的各种实施例,可以看出本发明通过将增加索引数据存储到连续的缓存中,若缓存空间已满,则将缓存中的增量索引数据存储到磁盘的临时子数据集中,并将临时子数据集封装为只读的子数据集的技术手段,从而解决了现有技术中搜索引擎服务重启时重新加载、解析增量索引数据导致重启耗时长的技术问题。本发明实施例可以避免每接收一条增量索引数据都触发写磁盘操作,因此减少持久化增量索引数据的耗时。而且将两次相邻的快照操作期间新增的增量索引数据存储到子数据集中,供重启恢复使用,同时保证该子数据集的完整性。服务重启时,通过连续的按块读磁盘操作,提高了子数据集恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。

需要说明的是,在本发明所述增量索引数据的处理装置的具体实施内容,在上面所述增量索引数据的处理方法中已经详细说明了,故在此重复内容不再说明。

图8示出了可以应用本发明实施例的增量索引数据的处理方法或增量索引数据的处理装置的示例性系统架构800。

如图8所示,系统架构800可以包括终端设备801、802、803,网络804和服务器805。网络804用以在终端设备801、802、803和服务器805之间提供通信链路的介质。网络804可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备801、802、803通过网络804与服务器804交互,以接收或发送消息等。终端设备801、802、803上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。

终端设备801、802、803可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器805可以是提供各种服务的服务器,例如对用户利用终端设备801、802、803所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的物品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、物品信息——仅为示例)反馈给终端设备。

需要说明的是,本发明实施例所提供的增量索引数据的处理方法一般由服务器805执行,相应地,所述增量索引数据的处理装置一般设置在服务器805中。

应该理解,图8中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

下面参考图9,其示出了适于用来实现本发明实施例的终端设备的计算机系统900的结构示意图。图9示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图9所示,计算机系统900包括中央处理单元(cpu)901,其可以根据存储在只读存储器(rom)902中的程序或者从存储部分908加载到随机访问存储器(ram)903中的程序而执行各种适当的动作和处理。在ram903中,还存储有系统900操作所需的各种程序和数据。cpu901、rom902以及ram903通过总线904彼此相连。输入/输出(i/o)接口905也连接至总线904。

以下部件连接至i/o接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至i/o接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序物品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(cpu)901执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序物品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括第一存储模块、第二存储模块和封装模块,其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:接收增量索引数据,并将所述增加索引数据存储到连续的缓存中;若所述缓存的空间已满,则将所述缓存中的增量索引数据存储到磁盘的临时子数据集中;每隔预设时间间隔或者每隔预设增量索引数据条数,将所述临时子数据集封装为只读的子数据集。

根据本发明实施例的技术方案,因为采用将增加索引数据存储到连续的缓存中,若缓存空间已满,则将缓存中的增量索引数据存储到磁盘的临时子数据集中,并将临时子数据集封装为只读的子数据集的技术手段,所以克服了现有技术中搜索引擎服务重启时重新加载、解析增量索引数据导致重启耗时长的技术问题。本发明实施例可以避免每接收一条增量索引数据都触发写磁盘操作,因此减少持久化增量索引数据的耗时。而且将两次相邻的快照操作期间新增的增量索引数据存储到子数据集中,供重启恢复使用,同时保证该子数据集的完整性。服务重启时,通过连续的按块读磁盘操作,提高了子数据集恢复时的读盘效率,减少了搜索引擎服务恢复启动的耗时。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1