一种基于多核处理器的跳跃表多线程优化方法及设备与流程

文档序号:14835895发布日期:2018-06-30 12:23阅读:226来源:国知局
一种基于多核处理器的跳跃表多线程优化方法及设备与流程

本发明涉及数据处理技术领域,特别涉及一种基于多核处理器的跳跃表多线程优化方法及设备。



背景技术:

内存数据库是指将数据全部放在内存中进行操作的数据库,与磁盘作为主要存储介质的数据库相比,内存数据库的主要特点是速度快、吞吐量高。目前大数据处理系统中,通常使用内存数据库来进行数据的缓存存储,以提升常用数据的处理性能。数据库中索引(主要是倒排索引)的字典结构直接影响到索引的效果,在索引结构中需要找到一个适合当前业务的数据结构来进行存储。其中,数据结构一般包括跳跃表、B+树、前缀树、后缀树、自动状态机以及哈希表这几种数据结构。

其中,跳跃表是指在有序列表的基础上,以随机化的方式增加索引数据的一种数据结构。这样在列表中查找时通过这些附加的索引数据,可以快速地跳过部分列表而提升查找速度。跳跃表具有结构简单、效率高等特点,作为索引数据结构,在Redis、Memsql等主流内存数据库中得到广泛使用。

多核处理器提供多个物理执行核心,使得处理器上可以同时执行多个线程,这将大幅提升处理器的并行处理能力。针对跳跃表,当有多核处理器上多个查询或插入操作同时执行时,需要必要的同步机制来保证数据的一致性。

现有的跳跃表多线程并发算法由于同步机制低效、硬件资源利用率低、并行效率低等弊端而影响并行查找和插入的性能。



技术实现要素:

本发明的目的在于提供一种基于多核处理器的跳跃表多线程优化方法,以提高跳跃表数据结构中并行查找和插入性能。

为实现以上目的,本发明采用的技术方案为:

一方面,提供一种基于多核处理器的跳跃表多线程优化方法,包括:

S1、初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

S2、从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

S3、当操作为数据查询时,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

S4、当操作为数据插入时,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

优选地,步骤S3中的以并行处理的方式进入所述数据列表执行查询操作,具体包括:

S31、查看变量Lock的值是否大于或等于零,若是执行步骤S32,若否挂起0.1秒后继续执行步骤S31;

S32、对Lock执行原子操作加1,若执行成功跳转到S33继续执行,若失败跳转到S31继续执行;

S33、进入数据列表执行查询操作;

S34、对Lock执行原子操作减1,结束查询操作;

优选地,步骤S4中的进入所述数据列表执行插入操作,具体包括:

S41、查看变量Lock的值是否等于零,若是执行步骤S42,若否挂起0.1秒后继续执行步骤S41;

S42、对Lock执行原子操作减1,若执行成功跳转到S43继续执行,若失败跳转到S41继续执行;

S43、进入数据列表执行插入操作;

S44、对Lock执行原子操作加1,结束插入操作。

第二方面,提供一种基于多核处理器的跳跃表多线程优化设备,包括:

处理器和存储设备;

处理器,用于实现各指令;

存储设备,用于存储所述各指令,所述各指令由处理器加载并执行:

初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

当操作为数据查询时,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

当操作为数据插入时,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

优选地,所述处理器执行以并行处理的方式进入所述数据列表执行查询操作,具体包括:

a、查看变量Lock的值是否大于或等于零,若是,执行步骤b,若否挂起0.1秒后继续执行步骤a;

b、对Lock执行原子操作加1,若执行成功跳转到步骤c继续执行,若失败跳转到步骤a继续执行;

c、进入数据列表执行查询操作;

d、对Lock执行原子操作减1,结束查询操作;

优选地,所述处理器执行进入所述数据列表执行插入操作,具体包括:

e、查看变量Lock的值是否等于零,若是,执行步骤f,若否挂起0.1秒后继续执行步骤e;

f、对Lock执行原子操作减1,若执行成功跳转到g继续执行,若失败跳转到e继续执行;

g、进入数据列表执行插入操作;

h、对Lock执行原子操作加1,结束插入操作。

第三方面,提供一种基于多核处理器的跳跃表多线程优化设备,包括:

初始化模块,用于初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

查找模块,用于从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

查询操作执行模块,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

插入操作执行模块,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

优选地,查询操作执行模块,具体包括:

第一查看单元,用于查看变量Lock的值是否大于或等于零;

查询操作执行单元,用于在第一查看单元判断为是时,对Lock加1,并进入数据列表执行查询操作,操作结束后对Lock减1;

以及,在第一查看单元判断为否时,等待至Lock大于或等于零时再执行查询操作。

优选地,插入操作执行模块,具体包括:

第二查看单元,用于查看变量Lock的值是否等于零;

插入操作执行单元,用于在第二查看单元判断为是时,对Lock减1,并进入数据列表执行插入操作,操作结束后对Lock加1;

以及,在第二查看单元判断为否时,等待至Lock等于零时再执行插入操作。

与现有技术相比,本发明存在以下技术效果:本发明通过在多核处理器的多个处理核心中同时执行多个或查询操作,通过对整个数据列表加锁操作,保证插入和查询操作的数据一致性。这样可以充分处理器的资源利用率,提高数据插入和查询的效率。

附图说明

下面结合附图,对本发明的具体实施方式进行详细描述:

图1是一种基于多核处理器的跳跃表多线程优化方法的流程示意图;

图2是跳跃表的查询和插入操作的示意图;

图3是跳跃表中并行查询操作流程示意图;

图4是跳跃表中插入操作流程示意图;

图5是一种基于多核处理器的跳跃表多线程优化设备的结构示意图。

具体实施方式

为了更进一步说明本发明的特征,请参阅以下有关本发明的详细说明与附图。所附图仅供参考与说明之用,并非用来对本发明的保护范围加以限制。

如图1所示,本实施例公开了一种基于多核处理器的跳跃表多线程优化方法,包括如下步骤S1至S4

S1、初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

S2、从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

S3、当操作为数据查询时,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

S4、当操作为数据插入时,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

具体地,本实施例中使用变量Lock来实时记录数据列表中的正在进行的数据操作状态。Lock大于0时,表示有多个查询操作在数据列表中实际执行;Lock小于0时,表示有1个插入操作在数据列表中执行;Lock等于0时,表示此时数据列表中没有正在执行的具体查询或插入操作。因此在初始化时,将锁变量Lock的值置为0,表示数据列表中没有任何操作。

如图2所示,在逐层查阅跳跃表时,将Search(K)记为对查询数据K的操作,Insert(J)记为插入数据J的操作。Search(K)和Insert(J)操作,在进行插入数据或查询数据操作时,均需要事先在跳跃表的多层索引数据中查询到数据K和数据J在数据列表中最近的索引数据。跳跃表的查询操作如图2所示逐层进行。

需要说明的是,由于对跳跃表的查询并未更改任何内容,所以Search(K)和Insert(J)的查询操作均可以并行执行,而不会破坏跳跃表索引数据结构的一致性。

优选地,针对数据列表的查询操作,可以允许多个查询同时进行。首先查看是否已有查询操作,如果有查询操作或者没有任何操作,则直接进入查询。如果已有插入操作,则等待直到插入操作结束再进入。变量Lock的值记录了数据列表的操作状态。如图3所示,步骤S3具体包括如下步骤:

S31、查看变量Lock的值是否大于或等于0,若是则执行步骤S33,若否则执行步骤S32;

S32、将当前查询操作线程挂起设定时间后,重新执行步骤S31;

S33、执行原子操作,令Lock=Lock+1;

S34、查看步骤S33的原子操作是否成功执行,若是则执行步骤S35继续执行,若否则执行步骤S31;

S35、在所述数据列表中,执行查询操作;

S36、执行原子操作,令Lock=Lock-1;

S37、查看步骤S36的原子操作是否成功执行,若是则流程结束,若否则执行步骤S39;

S39、将当前查询操作线程挂起设定时间后,执行步骤S36。

优选地,对数据列表的插入操作,只允许1个操作在数据列表中执行。首先查看是否已有查询或插入操作,如果没有任何操作,则直接进入执行数据列表插入操作。如果已有查询或插入操作,则等待直到数据列表中的操作结束再进入。变量Lock的值记录了数据列表的操作状态。如图4所示,步骤S4具体包括:

S41、查看变量Lock的值是否等于0,若是则执行步骤S43,若否则执行步骤S42;

S42、将当前插入操作线程挂起设定时间后,然后执行步骤S41;

S43、执行原子操作,令Lock=Lock-1;

S44、查看步骤S43的原子操作是否成功执行,若是则执行步骤S45,若否则执行步骤S41;

S45、在所述数据列表中,执行插入操作;

S46、执行原子操作,令Lock=Lock+1;

S47、查看步骤S46的原子操作是否成功执行,若是则流程结束,若否则执行步骤S48;

S48、将当前插入操作线程挂起设定时间后执行步骤S46。

具体地,在实际应用中,可根据实际情况设定当前查询操作线程或当前插入操作线程的挂起时间,比如0.1秒等。

需要说明的是,本实施例通过对数据列表的锁操作,可以实现多个查询操作同时进入数据列表进行查找。因为查询操作不更改数据列表的数值,这样允许多个查询操作同时进行而不影响数据的一致性。由于实际应用场景中查询操作要远多于插入操作,所以本方案可有效提升跳跃表的并发处理效率。

本实施例还公开了一种基于多核处理器的跳跃表多线程优化设备,包括处理器和存储设备;

处理器,用于实现各指令;

存储设备,用于存储所述各指令,所述各指令由处理器加载并执行:

初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

当操作为数据查询时,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

当操作为数据插入时,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

优选地,处理器执行以并行处理的方式进入所述数据列表执行查询操作,具体包括:

a、查看变量Lock的值是否大于或等于零;

b、若是,对Lock加1并进入数据列表执行查询操作,操作结束后对Lock减1;

c、若否,等待至Lock大于或等于零时再执行步骤b。

优选地,处理器执行进入所述数据列表执行插入操作,具体包括:

d、查看变量Lock的值是否等于零;

e、若是,对Lock减1,并进入数据列表执行插入操作,操作结束后对Lock加1;

f、若否,等待至Lock等于零时再执行所述步骤e。

如图5所示,本实施例还公开一种基于多核处理器的跳跃表多线程优化设备,包括:

初始化模块10,用于初始化读写锁Lock为0,读写锁Lock实时记录数据列表中正在进行的数据操作状态;

查找模块20,用于从跳跃表的最高层索引数据开始逐层查找跳跃表,得到查询数据或者插入数据在数据列表中最近的索引数据;

查询操作执行模块30,对读写锁Lock申请读锁,然后以并行处理的方式进入所述数据列表执行查询操作;

插入操作执行模块40,对读写锁Lock申请写锁,然后进入所述数据列表执行插入操作。

优选地,查询操作执行模块,具体包括:

第一查看单元,用于查看变量Lock的值是否大于或等于零;

查询操作执行单元,用于在第一查看单元判断为是时,对Lock加1,并进入数据列表执行查询操作,操作结束后对Lock减1;

以及,在第一查看单元判断为否时,等待至Lock大于或等于零时再执行查询操作。

优选地,插入操作执行模块,具体包括:

第二查看单元,用于查看变量Lock的值是否等于零;

插入操作执行单元,用于在第二查看单元判断为是时,对Lock减1,并进入数据列表执行插入操作,操作结束后对Lock加1;

以及,在第二查看单元判断为否时,等待至Lock等于零时再执行插入操作。

需要说明的是,本实施例公开的一种基于多核处理器的跳跃表多线程优化设备,与上述实施例公开的基于多核处理器的跳跃表多线程优化方法具有相同胡相应的技术细节,以及相同的技术效果,该处不在赘述。

现有的跳跃表并行查询与插入方案,是基于传统的锁同步机制实现的。当数据列表中有线程执行数据查询操作时,其他数据查询线程将被阻塞,无法实现数据查询线程的并发执行。本方案通过对Lock的读写锁设置,可以在保证数据一致性的前提下,多核处理器的多个线程同时在数据列表中执行数据查询操作。由于内存数据库实际应用场景中,数据查询操作远大于数据插入操作,所以本方案可以有效地提升实际场景中跳跃表并发查询与插入操作的执行效率。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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