索引加载方法和装置制造方法及图纸

技术编号:18444605 阅读:21 留言:0更新日期:2018-07-14 10:15
本发明专利技术公开了一种索引加载方法和装置,所述方法包括以下步骤:将存储数据拆分为至少两组;创建至少两个加载线程;利用各个加载线程并行扫描各组存储数据进行索引加载。本发明专利技术实施例所提供的一种索引加载方法,通过将存储数据拆分成多组,并创建多个加载线程,利用多个加载线程并行扫描多组存储数据,实现了多线程并发加载,使得加载速度成倍提高,从而大大提升了缓存服务重启后的索引加载速度,解决了存储的数据量较大时缓存服务重启时间过久的技术问题。

Index loading method and device

The present invention discloses an index loading method and device, which includes the following steps: splitting the stored data into at least two groups; creating at least two load threads; using each load thread to scan each storage data in parallel for index loading. An index loading method provided in the implementation of this invention is to split the storage data into multiple groups, create multiple load threads, and use multiple load threads to scan multiple groups of storage data in parallel, realizing multithread concurrent loading, making the loading speed multiplied, thus greatly improving the cache service restarted. The loading speed solves the technical problem that the cache service restart time is too large when the amount of data storage is large.

【技术实现步骤摘要】
索引加载方法和装置
本专利技术涉及数据处理
,尤其是涉及一种索引加载方法和装置。
技术介绍
在基于磁盘或者共享内存的存储系统里,索引是相对原始存储而言,相对独立的内存存储数据结构。以缓存系统为例,索引的存储内容一般是对应存储数据值的指针,其中,指针可以理解为存储一个变量地址的的对象。为了方便维护和高效使用,索引一般存储在服务器的缓存服务进程的内存里,所以当缓存服务重启时(即杀死原服务进程,重新启动新服务进程时),内存里的索引需要从零开始加载。目前的索引加载方法,是遍历扫描存储空间中的全部存储数据,根据存储数据在缓存服务进程的内存中重建索引结构。现有的索引加载方法,当存储数据的数量不大时,加载速度尚可接受。但是,当数据量特别大时,比如存储了50G字节(Bbyte)的数据,每个数据占用50字节的空间,则一共是10亿条数据记录,遍历10亿次的开销是巨大的,一般的2.0Ghz主频的Linux服务器完成这样的重建至少需要几十分钟,对于缓存服务重启来说,这样的时间消耗是不可以接受的。因此,如何提升缓存服务重启时的索引加载速度,避免存储的数据量较大时缓存服务重启时间过久,是当前亟需解决的技术问题。
技术实现思路
本专利技术实施例的主要目的在于提供一种索引加载方法和装置,旨在提高缓存服务重启时的索引加载速度,解决存储的数据量较大时缓存服务重启时间过久的技术问题。为达以上目的,一方面提出一种索引加载方法,所述方法包括以下步骤:将存储数据拆分为至少两组;创建至少两个加载线程;利用各个加载线程并行扫描各组存储数据进行索引加载。可选地,所述将存储数据拆分为至少两组包括:将存储空间拆分为至少两个子空间;建立存储数据的键值与子空间的映射关系;根据所述映射关系将存储数据分组写入各个子空间内。可选地,所述创建至少两个加载线程包括:获取每一组存储数据的存储地址;为每一组存储数据创建一个加载线程,并指向该组存储数据的存储地址。可选地,所述为每一组存储数据创建一个加载线程的步骤的同时还包括:为每一组存储数据分配一个加载索引的内存空间。可选地,所述利用各个加载线程并行扫描各组存储数据进行索引加载包括:利用每个加载线程扫描一组存储数据进行索引加载得到一个索引表,最终获得至少两个索引表。另一方面,提出一种索引加载装置,所述装置包括:拆分模块,用于将存储数据拆分为至少两组;创建模块,用于创建至少两个加载线程;扫描模块,用于利用各个加载线程并行扫描各组存储数据进行索引加载。可选地,所述拆分模块用于:将存储空间拆分为至少两个子空间,建立存储数据的键值与子空间的映射关系,根据所述映射关系将存储数据分组写入各个子空间内。可选地,所述创建模块用于:获取每一组存储数据的存储地址;为每一组存储数据创建一个加载线程,并指向该组存储数据的存储地址。可选地,所述创建模块还用于:为每一组存储数据分配一个加载索引的内存空间。可选地,所述扫描模块用于:利用每个加载线程扫描一组存储数据进行索引加载得到一个索引表,最终获得至少两个索引表。本专利技术实施例所提供的一种索引加载方法,通过将存储数据拆分成多组,并创建多个加载线程,利用多个加载线程并行扫描多组存储数据,实现了多线程并发加载,使得加载速度成倍提高,从而大大提升了缓存服务重启后的索引加载速度,解决了存储的数据量较大时缓存服务重启时间过久的技术问题。附图说明图1是本专利技术第一实施例的索引加载方法的流程图;图2是本专利技术实施例中存储数据被拆分后的示意图;图3是本专利技术实施例中将存储数据拆分为至少两组的步骤的具体流程图;图4是本专利技术实施例中并发加载索引的示意图;图5是本专利技术实施例中通过主线程控制索引加载流程的示意图;图6是本专利技术第二实施例的索引加载装置的模块示意图。本专利技术目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。具体实施方式应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术的一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。需要说明,本专利技术实施例中所有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。另外,在本专利技术中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本专利技术要求的保护范围之内。实施例一参见图1,提出本专利技术第一实施例的索引加载方法,所述方法包括以下步骤:S11、将存储数据拆分为至少两组。本步骤S11中,对整个存储数据进行拆分,可以根据需要拆分成两组或者多组,优选每一组存储数据的大小相等。如图2所示,可以将整个存储数据等分为K(K≥2)组,每一组有n(n≥2)条数据。如图3所示,本专利技术实施例中,优选通过以下方式进行存储数据拆分:S111、将整个存储空间拆分为至少两个子空间。假设整个存储空间的大小为50G字节,拆分为K个子空间,则每个子空间的大小为50G/K字节,这里的拆分为逻辑拆分,因此K个子空间可以是一整块物理连续存储空间。S112、建立存储数据的键值与子空间的映射关系。比如按号段划分子空间(即子空间1、子空间2…子空间K),映射关系的函数表达式为f(x)=x%K,其中,f(x)为子空间的号段,x为存储数据的键值(key)。S113、根据映射关系将存储数据分组写入各个子空间内。本专利技术实施例中,在进行数据写入时,不像现有技术那样直接将所有存储数据均写入同一个存储区域,而是先根据存储数据的键值确定其对应的子空间,然后顺序写入对应的子空间中,从而将不同的存储数据分别写入不同的存储区域内,实现对存储数据的分组存储。以映射关系为f(x)=x%K为例,假设存储数据的键值x为100004(如微信号),K=1000,则f(100004)=4,即键值为100004的存储数据对应子空间4,从而将该存储数据顺序写入子空间4内。其中,每一个子空间可以存储一个键值或多个键值的存储数据。从而,通过对存储空间进行拆分,再将存储数据分组写入拆分的各个子空间内,就实现了对存储数据的分组。由于事先建立了存储数据的键值与子空间的映射关系,后续查找存储数据时,则可以根据该映射关系确定存储数据对应哪一个索引表,从而可以快速查找存储数据。在其它实施例中,也可以直接对已经写入了存储数据的存储空间进行拆分,拆分为至少两个子空间,每个子空间内的存储数据为一组,也能实现对存储数据的分组。只是这种拆分方式没有建立存储数据的键值与子空间的映射关系,因此后续查找存储数据时无法准确的获知该存储数据对应哪一个索引表,从而影响数据查找速度。S12、创建至少两个加载线程。本步骤S12中,首先获取每一组存本文档来自技高网...

【技术保护点】
1.一种索引加载方法,其特征在于,包括以下步骤:将存储数据拆分为至少两组;创建至少两个加载线程;利用各个加载线程并行扫描各组存储数据进行索引加载。

【技术特征摘要】
1.一种索引加载方法,其特征在于,包括以下步骤:将存储数据拆分为至少两组;创建至少两个加载线程;利用各个加载线程并行扫描各组存储数据进行索引加载。2.根据权利要求1所述的索引加载方法,其特征在于,所述将存储数据拆分为至少两组包括:将存储空间拆分为至少两个子空间;建立存储数据的键值与子空间的映射关系;根据所述映射关系将存储数据分组写入各个子空间内。3.根据权利要求1所述的索引加载方法,其特征在于,所述创建至少两个加载线程包括:获取每一组存储数据的存储地址;为每一组存储数据创建一个加载线程,并指向该组存储数据的存储地址。4.根据权利要求3所述的索引加载方法,其特征在于,所述为每一组存储数据创建一个加载线程的步骤的同时还包括:为每一组存储数据分配一个加载索引的内存空间。5.根据权利要求1-4任一项所述的索引加载方法,其特征在于,所述利用各个加载线程并行扫描各组存储数据进行索引加载包括:利用每个加载线程扫描一组存储数据进行索引加载得到一...

【专利技术属性】
技术研发人员:张浩
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1