CN111857982A - 一种数据处理方法及其装置 - Google Patents
一种数据处理方法及其装置 Download PDFInfo
- Publication number
- CN111857982A CN111857982A CN201910337936.6A CN201910337936A CN111857982A CN 111857982 A CN111857982 A CN 111857982A CN 201910337936 A CN201910337936 A CN 201910337936A CN 111857982 A CN111857982 A CN 111857982A
- Authority
- CN
- China
- Prior art keywords
- key
- threads
- hash
- hash table
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据处理方法及其装置。所述方法包括:向多个线程分别分配键值对(key‑value);多个线程中的主线程利用分配的主key‑value中的主键(key)确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与主key对应的主value插入在所述空闲位置上。根据本申请,可实现哈希算法的并行处理,从而大幅度提高数据处理速度。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据处理方法及其装置。
背景技术
近年来,信息技术的迅猛发展和普及应用所带来的数据爆炸性增长,对现有的数据处理技术提出了新的挑战。大数据的规模之大,使得现有的串行计算方法难以在可接受的时间内快速完成其处理和计算。为了提高处理效率,需要利用高性能计算技术,GPU由于其强大的并行计算能力、高吞吐率以及高性价比,已经成为高性能计算领域的主流加速器。但是,如何利用GPU的线程来执行数据处理,特别是对于串行算法,是本领域技术人员需要持续研究的方向。
哈希表是数据库中常见的数据结构,它是可根据键值对(key value)直接进行访问的数据结构,简单来说,它利用哈希算法确定在哈希表中与key对应的位置。由此看来,如果能将哈希算法转换为并行操作,则会大幅度地提高数据处理速度,但是如何在GPU上实现哈希算法的并行操作是本领域尚未解决的技术难题。
发明内容
本申请的主要目的在于提供一种数据处理方法及其装置,旨在至少解决以上提到哈希算法并行操作的技术问题。
本申请实施例提供一种数据处理方法,其中,所述方法包括:向多个线程分别分配键值对(key-value);多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与主key对应的主value插入在所述空闲位置上。
本申请实施例还提供一种数据处理方法,所述方法包括:确定第一哈希表的负载率是否满足预设条件;在超过预定阈值的情况下,生成与第一哈希表对应的预定容量的第三哈希表;向多个线程分别分配第一哈希表上的key-value;所述多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的key确定在第三哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
本申请实施例还提供一种数据处理方法,所述方法包括:在多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶的情况下,利用所述多个线程并行确定哈希桶上具有空闲的空闲位置,其中,所述哈希桶上的位置的数量与所述多个线程的数量等同。
本申请实施例还提供一种数据处理方法,所述方法包括:包括:将多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的主key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
本申请实施例还提供一种计算机可读存储介质,所述介质上存储有计算机指令,所述指令被执行时实现上述方法。
本申请实施例还提供一种数据处理装置,所述装置包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行上述方法。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:
根据本申请的示例性实施例的数据处理方法及其装置可利用多个线程中的主线程确定哈希桶的情况下利用多个线程同时确定哈希桶线上的空闲位置,将主线程对应的key-value插入在所述空闲位置,能够在避免大量线程竞争导致性能下降的同时提高了线程的利用率,实现了哈希算法的并行处理,大幅度提高数据处理速度。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是示出根据本申请的示例性实施例的数据处理方法的示图;
图2是示出根据本申请的示例性实施例的数据处理方法的流程图;
图3是示出根据本申请的示例性实施例的动态调整哈希表的示图;
图4是示出根据本申请的示例性实施例的数据处理装置的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
在本申请中,可利用图形处理器(Graphics Processing Unit,简称GPU)实现哈希算法的并行运算,因此,在此将简单介绍与本申请相关的术语。
线程(thread)是最基本的处理单元,具体指令与任务是在线程上执行的,而GPU的并行运算实际上就是指多个线程为了完成一个指令或任务并行处理。而线程的并行数量根据GPU的性能决定(例如,32、64等)。
线程束或经编(warp)是指示GPU执行程序时的调度单元,也就是说,同在一个warp的线程,以不同数据资源执行相同的指令或任务。为了便于理解,以下实施例均在warp中包括32个线程的前提下进行描述,但本领域技术人员应理解,在warp中并行执行的线程数量可根据需要更改数量。
图1是示出根据本申请的示例性实施例的数据处理方法的示图。
如图1所示,在warp内并行的线程中,第三线程T3被确定为主线程。因此,可对主线程上分配的主key-value进行哈希操作,包括:可利用主key确定在如图1中所示的哈希表H1中的特定哈希桶F1,具体来说,哈希表H1可包括多个哈希桶(图1中的F1、F2、F3…FN),并且哈希表H1具有与其对应的哈希算法,每个哈希桶上具有预定数量的位置,这些位置可用于插入(也可称作存储)key-value,在本申请中,所述哈希桶上的位置的数量与所述多个线程的数量等同。
第三线程可执行与哈希表H1对应的哈希算法对主key的运算,并确定特定哈希桶F1,随后warp内的线程同时并行对哈希桶执行访问,确定哈希桶上是否有空闲位置,所述空闲位置是指该位置上没有插入(存储)数据,若哈希桶上有空闲位置,则将主key-value插入到该空闲位置。若没有空闲位置,则可按照预定规则随机选择特定位置,将该位置上的数据“挪走”,然后将主key-value插入到该位置,而“挪走”的数据可被挪到主线程上,由主线程继续对“挪走”的key-value进行操作。
在本申请中,在由主线程继续对“挪走”的key-value进行操作时,可继续选择哈希表H1并按照如上方法处理“挪走”的key-value值,但是这样可能会产生大量的哈希冲突,优选地,可选择与哈希表H1不同的哈希表以及与其对应的哈希算法,为“挪走”的key-value寻找空闲位置。
综上可述,根据本申请的示例性实施例的数据处理方法可利用主线程确定哈希桶的情况下,利用多个线程并行确定哈希桶上的空闲位置,从而实现了对哈希算法的并行化处理,提高了处理速度。可选地,为了避免哈希冲突,可采用不同的哈希表对数据进行处理。
以下将参照图2对数据处理方法进行具体描述,图2是示出根据本申请的示例性实施例的数据处理方法的流程图。
如图2所示,在S210中,向多个线程分别分配key-value,在实施中,可向多个线程中的每个线程分别分配key-value。具体来说,可将在CPU上的key-value群组发送到GPU中,随后,GPU可接收这些key-value群组,并可将它们按照预定方式分配到warp内的所有线程,例如,可按照顺序的方式将key-value群组里面的key-value分配到所有的线程,或者可按照每个线程分配预定数据的key-value的方式进行分配。
随后,可执行步骤S220,多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶。具体来说,从所述多个线程中确定主线程。在实施中,主线程的确定方式有很多种,例如,可采用随机的方式确定,或者可默认线程号为预定数值(比如,线程号13)的线程为主线程。优选地,可利用多个线程对共享内存变量进行写入操作并将成功执行写入操作的线程被确定为主线程。
随后,由所述主线程利用与第一哈希表对应的哈希算法确定在第一哈希表中与主key对应的哈希桶。也就是说,主线程可利用与第一哈希表对应的哈希算法对主key进行运算来确定特定哈希桶。
随后可执行步骤S230,利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置。也就是说,通过多个线程同时并行对哈希桶执行访问,确定哈希桶上是否有空闲位置,所述空闲位置是指该位置上没有插入(存储)数据。
并在在具有空闲位置的情况下执行步骤S240将与主key对应的主value插入在所述空闲位置上。当执行完步骤S240,可从所述多个线程中除主线程之外的其它线程中重新确定新主线程,可利用新主线程继续重复执行步骤S220至步骤S240,直至所有线程上的key-value均被执行。具体来说,利用分配到新主线程的新key-value中的新key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与所述新key对应的新value插入在所述空闲位置上。
此外,为了更好地实施本申请,可在执行步骤S210之前,将所述多个线程中的每一个线程的运行状态设置为活跃状态,其中,所述活跃状态是当前线程的key-value尚未处理完成的状态。与之相对的运行状态为协助状态,也就是说,当线程上的key-value已被插入到哈希桶上的位置上,则将该线程的运行状态从活跃状态替换为协助状态。并在该线程替换为协助状态后,从运行状态为活跃状态的线程中重新确定新主线程。并利用新主线程继续执行步骤S220至步骤S240。也就是说,利用分配到新主线程的新key-value中的新key确定在第一哈希表中的哈希桶,利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置,若具有空闲位置,将与所述新key对应的新value插入在所述空闲位置上。
此外,在实施中,为了避免在主线程对哈希桶执行访问时不受到其它线程的影响,可将在步骤S220中确定的哈希桶锁住(lock),lock操作的目的是为了确保在同一时间一个对象只允许一个线程访问,这属于本领域的惯用技术手段,在此将不再展开。若可以锁住,则按照以上操作进行处理。
若锁失败,可说明此哈希桶已被访问,则可从所述多个线程中重新确定新主线程,或者可在主线程不变的情况下,确定在其它哈希表中的哈希桶的位置。这两种方式的具体处理流程与以上类似,在此将不再详细描述。
以上已经描述了在哈希桶上有空闲位置的情况,但在实际处理中可能会面临哈希桶上没有空闲位置的情况,针对这种情况,以下将进行详细描述。
在没有空闲位置的情况下,可在所述哈希桶上确定与主key对应的杜鹃位置,所述杜鹃位置的确定可以是随机的或者具有预定模式的,比如,默认位置,而所述杜鹃位置是指该位置的数据将被取出并重新确定位置安置,并且在杜鹃位置上存储的杜鹃key-value取出的同时,将与主key对应的主value插入在所述位置上。
随后,将杜鹃key-value分配到主线程,主线程利用杜鹃key确定在第一哈希表中的哈希桶,利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置,在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
这可能会面临大量的哈希冲突,为了避免哈希冲突,可将已有key-value分配到主线程;主线程利用杜鹃key确定在第二哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
在实施中,可确定第一哈希表的负载率是否满足预设条件,比如说,第一哈希表的负载率是否已达到阈值上限,其中,所述负载率是指当前哈希表中不为空的位置与哈希表总容量的比率,或者负载率是否尚未达到阈值下限。
在满足预设条件的情况下,改变第一哈希表的容量。比如,在达到阈值上限时,可将第一哈希表的容量扩大两倍,或者在负载率尚未达到阈值下限的情况下,将第一哈希表的容量缩小二分之一。
随后,可将第一哈希表上的key-value重新插入到改变后的第一哈希表。也就是说,将第一哈希表上的key-value全都分配到warp里面的线程,随后,按照步骤S220至步骤S240,将这些key-value重新插入到改变后的第一哈希表。
在实施中,改变第一哈希表的容量可包括:通过更改第一哈希表中的哈希桶的数量和/或哈希桶上的位置的数量,更改第一哈希表的容量。这部分将在以下结合图3进行详细描述,在此将不再展开。
因此,根据本申请的示例性实施例,可将多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的主key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
并且,可选地,在均不具有空闲位置的情况下,利用主key确定在第二哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
此外,根据本申请的示例性实施例,提供一种数据处理方法,所述方法包括:确定第一哈希表的负载率是否满足预设条件;在满足预设条件的情况下,生成与第一哈希表对应的预定容量的第三哈希表;向多个线程分别分配第一哈希表上的key-value;所述多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的key确定在第三哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
综上可述,根据本申请的示例性实施例的数据处理方法可利用多个线程中的主线程确定哈希桶的情况下利用多个线程同时确定哈希桶线上的空闲位置,将主线程对应的key-value插入在所述空闲位置,能够在避免大量线程竞争导致性能下降的同时提高了线程的利用率,实现了哈希算法的并行处理,大幅度提高数据处理速度。更进一步地,可利用对共享内存变量的访问来确定主线程,从而能够更准确地确定主线程,提高处理速度。更进一步地,可通过对线程设置不同的运行状态,从而能够更方便地确定主线程。更进一步地,可通过将哈希桶成功锁住后执行数据插入操作,从而确保哈希桶上的数据更准确。更进一步地,可在没有空闲位置的情况下,利用杜鹃位置执行数据插入并为杜鹃位置上的数据重新安排,从而可以提高数据处理的速度。更进一步地,可采用第二哈希表来对杜鹃位置上的数据进行重新安排,从而避免了大量的哈希冲突。更进一步地,可通过设置预设条件,对哈希表进行动态调整,将负载率控制在预设范围内,从而能够减少哈希表的空间利用率。
图3示出了根据本申请的示例性实施例的动态调整哈希表的示图。如图3所示,所述哈希表可包括n个哈希子表(第一哈希子表、第二哈希子表直至第n哈希子表)。应注意,在对key-value群组进行处理前,可预先确定与warp对应的哈希表,以及所述哈希表所包括的哈希子表的数量,一般来说,两个哈希子表即可。当然,在本申请中将不限制哈希子表的数量,每个哈希子表对应的哈希算法不同,可对key-value进行插入时可先确定具体的哈希子表。
并且如上所示,在确定了哈希子表后可确定哈希子表的负载率是否满足预设条件,若满足预设条件,则可对哈希子表的容量进行调整。
调整方式如图3所示,可通过更改第一哈希子表中的哈希桶的数量和/或哈希桶上的位置的数量,更改第一哈希表的容量。具体来说,可在保持哈希子表的容量不变的情况下,增加/减少哈希子表的数量,或者可在保持哈希子表的数量不变的情况下,增加和/或减少哈希桶的数量,或者采用以上两种方式的结合。
为了更清楚地明白本申请的示例性实施例的发明构思,以下将参照图4描述本申请的示例性实施例的数据处理装置的框图。本领域普通技术人员将理解:图4中的装置仅示出了与本示例性实施例相关的组件,所述装置中还包括除了图4中示出的组件之外的通用组件。
图4示出本申请的示例性实施例的数据处理装置的框图。参考图4,在硬件层面,该数据处理装置包括处理器、内部总线和计算机可读存储介质,其中,所述计算机可读存储介质包括易失性存储器和非易失性存储器。处理器从非易失性存储器中读取对应的计算机程序然后运行。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
具体来说,所述处理器执行以下操作:向多个线程分别分配键值对(key-value);多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与主key对应的主value插入在所述空闲位置上。
可选地,所述处理器在实现步骤在向多个线程分别分配key-value前还包括:接收将被分配给所述多个线程的key-value群组。
可选地所述哈希表中的每个哈希桶具有与所述多个线程的数量等同的位置。
可选地,所述处理器在实现步骤多个线程中的主线程利用分配的主key-value中的主key确定在第一哈希表中的哈希桶包括:从所述多个线程中确定主线程;由所述主线程利用与第一哈希表对应的哈希算法确定在第一哈希表中与主key对应的哈希桶。
可选地,所述处理器在实现步骤从所述多个线程中确定主线程包括:所述多个线程对共享内存变量进行写入操作;成功执行写入操作的线程被确定为主线程。
可选地,所述处理器在实现步骤在向多个线程分别分配key-value前还包括:将所述多个线程中的每一个线程的运行状态设置为活跃状态,其中,所述活跃状态是当前线程的key-value尚未处理完成的状态。
可选地,所述处理器在实现步骤在将与主key对应的主value插入在所述空闲位置上后还包括:将所述主线程的运行状态从活跃状态替换为协助状态,其中,协助状态是当前线程的key-value已处理完成的状态。
可选地,所述处理器在实现步骤在将所述主线程的运行状态从活跃状态替换为协助状态后包括:从运行状态为活跃状态的线程中重新确定新主线程。
可选地,所述处理器在实现步骤在将与主key对应的主value插入在所述空闲位置上后包括:从所述多个线程中除主线程之外的其它线程中重新确定新主线程。
可选地,所述处理器在实现步骤在重新确定新主线程后包括:利用分配到新主线程的新key-value中的新key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与所述新key对应的新value插入在所述空闲位置上。
可选地,所述处理器还可执行操作:在具有空闲位置的情况下,判定是否能够将确定的哈希桶成功锁住;在锁成功的情况下,将与主key对应的主value插入在所述空闲位置上。
可选地,所述处理器还可执行操作:在锁失败的情况下,从所述多个线程中重新确定新主线程。
可选地,所述处理器还可执行操作:在没有空闲位置的情况下,在所述哈希桶上确定与主key对应的杜鹃位置;在杜鹃位置上存储的杜鹃key-value取出的同时,将与主key对应的主value插入在所述位置上。
可选地,所述处理器在实现步骤在杜鹃位置上存储的杜鹃key-value取出的同时将与主key对应的主value插入在所述位置上后包括:将杜鹃key-value分配到主线程;主线程利用杜鹃key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
可选地,所述处理器在实现步骤在杜鹃位置上存储的杜鹃key-value取出的同时将与主key对应的主value插入在所述位置上后包括:将已有key-value分配到主线程;主线程利用杜鹃key确定在第二哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
可选地,所述处理器还可执行以下操作:确定第一哈希表的负载率是否满足预设条件;在满足预设条件的情况下,改变第一哈希表的容量;将第一哈希表上的key-value重新插入到改变后的第一哈希表。
可选地,所述处理器在实现步骤将第一哈希表上的key-value重新插入到改变后的第一哈希表中包括:向所述多个线程中的每个线程分别分配第一哈希表上的key-value;所述多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的key确定在改变后的哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
可选地,所述处理器在实现步骤改变第一哈希表的容量包括:通过更改第一哈希表中的哈希桶的数量和/或哈希桶上的位置的数量,更改第一哈希表的容量。
根据本申请的示例性实施例,提供一种数据处理方法,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下步骤:确定第一哈希表的负载率是否满足预设条件;在满足预设条件的情况下,生成与第一哈希表对应的预定容量的第三哈希表;向多个线程分别分配第一哈希表上的key-value;所述多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的key确定在第三哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
根据本申请的示例性实施例,提供一种数据处理方法,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下步骤:一种数据处理方法,其特征在于,包括:在多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶的情况下,利用所述多个线程并行确定哈希桶上具有空闲的空闲位置,其中,所述哈希桶上的位置的数量与所述多个线程的数量等同。
根据本申请的示例性实施例,提供一种数据处理方法,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下步骤:将多个线程中的每个线程分别作为主线程执行以下插入操作:利用分配给主线程的key-value中的主key确定在第一哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
可选地,所述处理器还可执行以下步骤:在均不具有空闲位置的情况下,利用主key确定在第二哈希表中的哈希桶;利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
综上可述,根据本申请的示例性实施例的数据处理装置可利用多个线程中的主线程确定哈希桶的情况下利用多个线程同时确定哈希桶线上的空闲位置,将主线程对应的key-value插入在所述空闲位置,能够在避免大量线程竞争导致性能下降的同时提高了线程的利用率,实现了哈希算法的并行处理,大幅度提高数据处理速度。更进一步地,可利用对共享内存变量的访问来确定主线程,从而能够更准确地确定主线程,提高处理速度。更进一步地,可通过对线程设置不同的运行状态,从而能够更方便地确定主线程。更进一步地,可通过将哈希桶成功锁住后执行数据插入操作,从而确保哈希桶上的数据更准确。更进一步地,可在没有空闲位置的情况下,利用杜鹃位置执行数据插入并为杜鹃位置上的数据重新安排,从而可以提高数据处理的速度。更进一步地,可采用第二哈希表来对杜鹃位置上的数据进行重新安排,从而避免了大量的哈希冲突。更进一步地,可通过设置预设条件,对哈希表进行动态调整,将负载率控制在预设范围内,从而能够减少哈希表的空间利用率。
需要说明的是,实施例1所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤21和步骤22的执行主体可以为设备1,步骤23的执行主体可以为设备2;又比如,步骤21的执行主体可以为设备1,步骤22和步骤23的执行主体可以为设备2;等等。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用插入介质(包括但不限于磁盘插入器、CD-ROM、光学插入器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可插入在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读插入器中,使得插入在该计算机可读插入器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性插入器,随机存取插入器(RAM)和/或非易失性内存等形式,如只读插入器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息插入。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的插入介质的例子包括,但不限于相变内存(PRAM)、静态随机存取插入器(SRAM)、动态随机存取插入器(DRAM)、其他类型的随机存取插入器(RAM)、只读插入器(ROM)、电可擦除可编程只读插入器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读插入器(CD-ROM)、数字多功能光盘(DVD)或其他光学插入、磁盒式磁带,磁带磁磁盘插入或其他磁性插入设备或任何其他非传输介质,可用于插入可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用插入介质(包括但不限于磁盘插入器、CD-ROM、光学插入器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (24)
1.一种数据处理方法,其特征在于,包括:
向多个线程分别分配键值对(key-value);
多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
在具有空闲位置的情况下,将与主key对应的主value插入在所述空闲位置上。
2.如权利要求1所述的方法,其特征在于,在向多个线程分别分配key-value前还包括:
接收将被分配给所述多个线程的key-value群组。
3.如权利要求1所述的方法,其特征在于,所述哈希表中的每个哈希桶具有与所述多个线程的数量等同的位置。
4.如权利要求1所述的方法,其特征在于,多个线程中的主线程利用分配的主key-value中的主key确定在第一哈希表中的哈希桶包括:
从所述多个线程中确定主线程;
由所述主线程利用与第一哈希表对应的哈希算法确定在第一哈希表中与主key对应的哈希桶。
5.如权利要求4所述的方法,其特征在于,从所述多个线程中确定主线程包括:
所述多个线程对共享内存变量进行写入操作;
成功执行写入操作的线程被确定为主线程。
6.如权利要求1所述的方法,其特征在于,在向多个线程分别分配key-value前还包括:
将所述多个线程中的每一个线程的运行状态设置为活跃状态,其中,所述活跃状态是当前线程的key-value尚未处理完成的状态。
7.如权利要求6所述的方法,其特征在于,在将与主key对应的主value插入在所述空闲位置上后还包括:
将所述主线程的运行状态从活跃状态替换为协助状态,其中,协助状态是当前线程的key-value已处理完成的状态。
8.如权利要求7所述的方法,其特征在于,在将所述主线程的运行状态从活跃状态替换为协助状态后包括:
从运行状态为活跃状态的线程中重新确定新主线程。
9.如权利要求1所述的方法,其特征在于,在将与主key对应的主value插入在所述空闲位置上后包括:
从所述多个线程中除主线程之外的其它线程中重新确定新主线程。
10.如权利要求8或9所述的方法,其特征在于,在重新确定新主线程后包括:
利用分配到新主线程的新key-value中的新key确定在第一哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
若具有空闲位置,将与所述新key对应的新value插入在所述空闲位置上。
11.如权利要求1所述的方法,其特征在于,还包括:
在具有空闲位置的情况下,判定是否能够将确定的哈希桶成功锁住;
在锁成功的情况下,将与主key对应的主value插入在所述空闲位置上。
12.如权利要求11所述的方法,其特征在于,还包括:
在锁失败的情况下,从所述多个线程中重新确定新主线程。
13.如权利要求11所述的方法,其特征在于,还包括:
在没有空闲位置的情况下,在所述哈希桶上确定与主key对应的杜鹃位置;
在杜鹃位置上存储的杜鹃key-value取出的同时,将与主key对应的主value插入在所述位置上。
14.如权利要求13所述的方法,其特征在于,在杜鹃位置上存储的杜鹃key-value取出的同时将与主key对应的主value插入在所述位置上后包括:
将杜鹃key-value分配到主线程;
主线程利用杜鹃key确定在第一哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
15.如权利要求13所述的方法,其特征在于,在杜鹃位置上存储的杜鹃key-value取出的同时将与主key对应的主value插入在所述位置上后包括:
将已有key-value分配到主线程;
主线程利用杜鹃key确定在第二哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
在具有空闲位置的情况下,将与杜鹃key对应的杜鹃value插入在所述空闲位置上。
16.如权利要求11所述的方法,其特征在于,还包括:
确定第一哈希表的负载率是否满足预设条件;
在满足预设条件的情况下,改变第一哈希表的容量;
将第一哈希表上的key-value重新插入到改变后的第一哈希表。
17.如权利要求16所述的方法,其特征在于,将第一哈希表上的key-value重新插入到改变后的第一哈希表中包括:
向所述多个线程中的每个线程分别分配第一哈希表上的key-value;
所述多个线程中的每个线程分别作为主线程执行以下插入操作:
利用分配给主线程的key-value中的key确定在改变后的哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
18.如权利要求16所述的方法,其特征在于,改变第一哈希表的容量包括:
通过更改第一哈希表中的哈希桶的数量和/或哈希桶上的位置的数量,更改第一哈希表的容量。
19.一种数据处理方法,其特征在于,包括:
确定第一哈希表的负载率是否满足预设条件;
在满足预设条件的情况下,生成与第一哈希表对应的预定容量的第三哈希表;
向多个线程分别分配第一哈希表上的key-value;
所述多个线程中的每个线程分别作为主线程执行以下插入操作:
利用分配给主线程的key-value中的key确定在第三哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
在具有空闲位置的情况下,将与所述key对应的value插入在所述空闲位置上。
20.一种数据处理方法,其特征在于,包括:
在多个线程中的主线程利用分配的主key-value中的主键(key)确定在第一哈希表中的哈希桶的情况下,利用所述多个线程并行确定哈希桶上具有空闲的空闲位置,其中,所述哈希桶上的位置的数量与所述多个线程的数量等同。
21.一种数据处理方法,其特征在于,包括:
将多个线程分别作为主线程执行以下插入操作:
利用分配给主线程的key-value中的主key确定在第一哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
22.如权利要求21所述的方法,其特征在于,还包括:
在均不具有空闲位置的情况下,利用主key确定在第二哈希表中的哈希桶;
利用所述多个线程并行确定哈希桶上是否具有空闲的空闲位置;
若具有空闲位置,将与主key对应的value插入在所述空闲位置上。
23.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被执行时实现权利要求1至22中的任一权利要求所述的方法。
24.一种数据处理装置,其特征在于,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行权利要求1至22中的任一权利要求所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910337936.6A CN111857982B (zh) | 2019-04-25 | 2019-04-25 | 一种数据处理方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910337936.6A CN111857982B (zh) | 2019-04-25 | 2019-04-25 | 一种数据处理方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111857982A true CN111857982A (zh) | 2020-10-30 |
CN111857982B CN111857982B (zh) | 2023-10-27 |
Family
ID=72951272
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910337936.6A Active CN111857982B (zh) | 2019-04-25 | 2019-04-25 | 一种数据处理方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111857982B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133661A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 基于列存储的多核并行哈希分区优化方法 |
CN104536724A (zh) * | 2014-12-25 | 2015-04-22 | 华中科技大学 | 一种多核环境下哈希表并发访问性能优化方法 |
CN105893373A (zh) * | 2014-12-04 | 2016-08-24 | 北京捷易通科技有限公司 | 一种减少哈希冲突概率的方法及装置 |
CN107247623A (zh) * | 2017-05-22 | 2017-10-13 | 哈工大大数据产业有限公司 | 一种基于多核cpu的分布式集群系统及数据连接方法 |
CN107992577A (zh) * | 2017-12-04 | 2018-05-04 | 北京奇安信科技有限公司 | 一种哈希表数据冲突处理方法及装置 |
WO2018120109A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 数据处理的方法和装置 |
CN108712462A (zh) * | 2018-04-09 | 2018-10-26 | 阿里巴巴集团控股有限公司 | 一种连接建立方法、装置以及设备 |
-
2019
- 2019-04-25 CN CN201910337936.6A patent/CN111857982B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104133661A (zh) * | 2014-07-30 | 2014-11-05 | 西安电子科技大学 | 基于列存储的多核并行哈希分区优化方法 |
CN105893373A (zh) * | 2014-12-04 | 2016-08-24 | 北京捷易通科技有限公司 | 一种减少哈希冲突概率的方法及装置 |
CN104536724A (zh) * | 2014-12-25 | 2015-04-22 | 华中科技大学 | 一种多核环境下哈希表并发访问性能优化方法 |
WO2018120109A1 (zh) * | 2016-12-30 | 2018-07-05 | 华为技术有限公司 | 数据处理的方法和装置 |
CN107247623A (zh) * | 2017-05-22 | 2017-10-13 | 哈工大大数据产业有限公司 | 一种基于多核cpu的分布式集群系统及数据连接方法 |
CN107992577A (zh) * | 2017-12-04 | 2018-05-04 | 北京奇安信科技有限公司 | 一种哈希表数据冲突处理方法及装置 |
CN108712462A (zh) * | 2018-04-09 | 2018-10-26 | 阿里巴巴集团控股有限公司 | 一种连接建立方法、装置以及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111857982B (zh) | 2023-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107622020B (zh) | 一种数据存储方法、访问方法及装置 | |
US11074179B2 (en) | Managing objects stored in memory | |
CN106406987A (zh) | 一种集群中的任务执行方法及装置 | |
US9377954B2 (en) | System and method for memory allocation in a multiclass memory system | |
CN104254839B (zh) | 用于分割单链表以供分配存储器元素的系统和方法 | |
JP6432805B2 (ja) | 区分化インメモリデータセットのためのredoロギング | |
WO2022062833A1 (zh) | 内存分配方法及相关设备 | |
US10599436B2 (en) | Data processing method and apparatus, and system | |
CN110716813A (zh) | 数据流处理方法、装置、可读存储介质及处理器 | |
CN110806942B (zh) | 数据处理的方法和装置 | |
CN111861744A (zh) | 一种实现区块链交易并行化的方法及区块链节点 | |
CN111415003A (zh) | 面向神经网络加速芯片的三维堆叠存储优化方法及装置 | |
US12007974B2 (en) | Memory processing optimisation | |
CN117271136A (zh) | 数据处理方法、装置、设备和存储介质 | |
CN117196850A (zh) | 金融产品组合的确定方法、装置、电子设备及存储介质 | |
CN117234691A (zh) | 任务调度方法及装置 | |
CN110008382B (zh) | 一种确定TopN数据的方法、系统及设备 | |
CN111857982A (zh) | 一种数据处理方法及其装置 | |
CN116431601A (zh) | 数据表创建方法及设备 | |
KR102124897B1 (ko) | 분산 메시지 시스템 및 분산 메시지 시스템에서의 동적 파티셔닝 방법 | |
CN116501927A (zh) | 一种图数据处理系统、方法、设备及存储介质 | |
CN113986846A (zh) | 数据处理方法、系统、设备及存储介质 | |
CN113641872B (zh) | 一种散列方法、装置、设备及介质 | |
CN113254186A (zh) | 一种进程调度方法、调度器及存储介质 | |
CN111984510B (zh) | 调度系统的性能测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |