CN112068948B - 数据散列方法、可读存储介质和电子设备 - Google Patents
数据散列方法、可读存储介质和电子设备 Download PDFInfo
- Publication number
- CN112068948B CN112068948B CN201910498603.1A CN201910498603A CN112068948B CN 112068948 B CN112068948 B CN 112068948B CN 201910498603 A CN201910498603 A CN 201910498603A CN 112068948 B CN112068948 B CN 112068948B
- Authority
- CN
- China
- Prior art keywords
- address
- hash
- key
- array
- offset
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 230000008569 process Effects 0.000 claims abstract description 21
- 230000006870 function Effects 0.000 claims description 22
- 238000004590 computer program Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010252 digital analysis Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据散列方法、可读存储介质和电子设备,通过预先计算为产生冲突的键值对指定候选地址范围,解决键值对散列过程中的冲突,再通过图形处理器对键值对进行散列,利用图形处理器的高并发性以实现键值对高性能散列,解决了线程同步限制等问题,且支持大数据量和多种数据类型的键值对散列。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据散列方法、可读存储介质和电子设备。
背景技术
现有技术有两种方式能够实现在多线程环境中利用并行性构建散列表。其中第一种方法为对散列表进行上锁,当线程进行散列且出现冲突时利用线性探测再散列法寻找桶为空的地址,再将当前键值对写入到对应的地址当中。所述桶为哈希表中用于保存数据的一个单元,也就是数据真正存放的容器。所述方法的最大弊端是效率低下,加锁虽然可以保证线程安全,但也会使得当前只有一个线程能对该散列表进行读写操作。尤其当线程数量较大时,会有多个线程在等待,造成了读写性能的降低。并没有在本质上利用多线程来加速对散列表的读写操作。
第二种多线程散列算法是通过原子操作来实现的,所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会切换到其他的任何线程。当通过所述方法进行散列的过程中出现冲突时,将原子性地交换要散列的键与桶中已经存在的键,交换出的键将会被再散列。此过程将会一直重复,直到找到空的桶为止。但是,由于使用了原子交换操作来交换数据,而原子交换操作又仅支持整型的数据类型,使得其他例如字符串等数据类型的数据无法***到散列表中,且使用原子操作进行散列的数据量越大,散列过程中产生的冲突越多,使得需要重复的交换操作越多,因此这种方法在大规模数据处理中效率较为低下。
发明内容
有鉴于此,本发明实施例提供一种数据散列方法、可读存储介质和电子设备,旨在通过预先计算解决键值对散列过程中的冲突,实现键值对在高并发条件下进行高性能散列。
第一方面,本发明实施例提供一种数据散列方法,用于对键值对并发散列,所述方法包括:
根据预定的散列函数对键进行散列以确定各键值对的第一散列地址;
根据所述第一散列地址确定冲突信息;
根据所述冲突信息确定所述第一散列地址的偏移信息,所述偏移信息用于为各第一散列地址指定候选地址范围;
根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
进一步地,所述冲突信息为冲突数组,所述冲突数组的元素用于记录对应的第一散列地址的地址重复数量。
进一步地,所述偏移信息为偏移数组,所述偏移数组用于记录每个第一散列地址对应的起始地址和结束地址,所述起始地址和结束地址限定了所述候选地址范围。
进一步地,所述偏移数组每个地址中元素的值为所述冲突数组在所述地址之前的所有元素的和。
进一步地,所述根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表包括:
创建索引数组,所述索引数组用于记录散列表的所述候选地址范围的占用情况;
根据所述索引数组和所述偏移数组确定第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
进一步地,所述根据所述索引数组和所述偏移数组确定第二散列地址包括:
对第一散列地址对应的所述索引数组中的元素值进行原子加1,并读取加1之前的元素值,所述读写过程通过一个原子操作完成;
通过计算所述第一散列地址对应的偏移数组中的元素值与所述索引数组中读取的元素值的和确定所述第二散列地址。
进一步地,还包括:根据所述偏移信息读取所述键在散列表中对应的值。
进一步地,所述根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表通过多个线程以并行方式进行。
第二方面,本发明实施例提供一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面任一项所述的方法。
第三方面,本发明实施例提供一种计算机可读存储介质,用于存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如第一方面任一项所述的方法。
本发明实施例通过预先计算为产生冲突的键值对指定候选地址范围,解决键值对散列过程中的冲突,再通过图形处理器对键值对进行散列,利用图形处理器的高并发性以实现键值对高性能散列,解决了线程同步限制等问题,且支持大数据量和多种数据类型的键值对散列。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1为一种用于实现所述数据散列方法的异构计算机架构示意图;
图2为本发明实施例提供的一种数据散列方法的流程图;
图3为本发明实施例一个可选实现方式的将所述各键值对写入散列表的流程图;
图4为本发明实施例一个可选实现方式的确定偏移信息的示意图;
图5为本发明实施例一个可选实现方式的将无冲突的键值对写入散列表的示意图;
图6为本发明实施例一个可选实现方式的将发生冲突的键值对写入散列表的示意图;
图7为本发明实施例一种电子设备的示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
图1为一种用于实现所述数据散列方法的异构计算机架构示意图,如图1所示,所述异构计算机架构由中央处理器(CPU)和图形处理器(GPU)组成,所述中央处理器和图形处理器通过高速串行总线(PCIe-bus)连接。
具体地,所述中央处理器和所述图形处理器的运算核心包括控制单元(control)10、运算器(ALU)11、高速缓冲存储器(cache)12和动态随机存取存储器(DRAM)13。由图可见,中央处理器中的中的运算核心较少而图形处理器中的运算核心较多,使得所述图形处理器更为适合执行计算简单但并行性高的任务,而所述中央处理器更为适合执行计算复杂但并行性低的任务。因此所述中央处理器和所述图形处理器组成的异构计算机架构可以通过中央处理器预先计算为产生冲突的键值对指定候选地址范围,解决键值对散列过程中的冲突。再通过图形处理器对键值对进行散列,利用图形处理器的高并发性以实现键值对高性能散列,解决了线程同步限制等问题,且支持大数据量和多种数据类型的键值对散列。
进一步地,本发明实施例的数据散列方法中每个步骤都可以通过所述图形处理器(GPU)并行进行。
图2为本发明实施例提供的一种数据散列方法的流程图,如图2所示,所述数据散列方法包括:
步骤S100:根据预定的散列函数对键进行散列以确定各键值对的第一散列地址。
具体地,所述预定的散列函数例如可以通过直接定址法、数字分析法、平方取中法、折叠法、除留余数法和随机函数法等方法实现。根据所述散列函数对键散列过程通常会导致不同的键指向相同的第一散列地址,所述步骤S100中不直接根据指向的第一散列地址进行散列,仅需要记录每个键指向的第一散列地址。例如,所述待散列的键为{1,2,3,4,5,6},所述预定的散列函数为key%5(也即,将键对数值5取余操作)时,所述键对应的第一散列地址分别为{1,2,3,4,0,1}。应当理解,实际中使用的散列函数可能会比上述函数复杂,只要采用能够在散列表和键值对之间建立一个确定的对应关系的函数作为散列函数即可。
步骤S200:根据所述第一散列地址确定冲突信息。
具体地,所述冲突信息为冲突数组,所述冲突数组的元素用于记录对应的第一散列地址的地址重复数量。为降低冲突率,使预设的冲突数组中元素数大于所述键值对的数目。所述冲突数组中每个元素的值为存储所述元素的地址被散列的次数,仍然以所述键为{1,2,3,4,5,6},所述预定的散列函数为key%5,所述键对应的第一散列地址分别为{1,2,3,4,0,1}为例来进行说明。所述地址“0、2、3、4”在所述得到的第一散列地址集合中仅出现1次,而所述地址“1”在所述第一散列地址集合中出现了2次。因所述冲突数组内元素用于记录对应的第一散列地址的地址重复数量,所以最终记录的冲突数组内元素为{1,2,1,1,1}。
步骤S300:根据所述冲突信息确定所述第一散列地址的偏移信息。
具体地,所述偏移信息为偏移数组,所述偏移数组用于记录每个第一散列地址对应的起始地址和结束地址,所述起始地址和结束地址限定了所述候选地址范围。所述候选地址为用于写入所述散列时发生冲突的键的地址。其中所述偏移数组中的每一个元素值代表一个起始地址,因此每一个散列地址对应的起始地址为所述地址内的元素值,结束地址为下一个地址内的元素值减1。当所述偏移数组内的一个地址中元素值与下一地址中元素值差值为0时,则代表这个地址没有对应的第一散列地址。例如,所述偏移数组为{0,2,2}时,则代表不存在第一散列地址为1的键值对。当所述偏移数组内的一个地址中元素值与下一个地址中元素值之间的差值为1时,则表明与所述地址对应的所述第一散列地址没有冲突,例如,所述偏移数组为{0,1,2}时,则代表只有一个键值对的第一散列地址为1。进一步表征所述第一散列地址对应的起始地址和结束地址之间无其他地址,即无候选地址。当所述偏移数组内的一个地址中元素值与下一个地址中元素值之间的差值大于1时,则表明与所述地址对应的所述第一散列地址发生了冲突,且所述冲突数量为所述差值,例如,所述偏移数组为{0,1,3}时,则代表有2个不同的键值对被散列到地址为1的第一散列地址。进一步表征所述第一散列地址对应的起始地址和结束地址之间有地址,即有候选地址且所述候选地址的数量为所述差值减1,位置在所述起始地址和结束地址之间。例如,所述偏移数组为{0,2,3,7},则所述第一散列地址为2的键值对对应的起始地址为3,结束地址为7-1=6,因此所述第一散列地址为2的键值对候选地址范围为[3,6],即在散列时可以散列至散列表中的地址包括:{3,4,5,6}。
进一步地,所述偏移数组每个地址中元素的值为所述冲突数组在所述地址之前的所有元素的和,且所述偏移数组中的元素数与所述冲突数组中的元素数相等。例如,所述冲突数组为{1,2,1,1,1}时,所述偏移数组地址为0的元素值为冲突数组中地址为0之前的所有元素值的和,因所述地址为0之前无元素,所以所述偏移数组中地址为0的元素值为0,所述偏移数组地址为1的值为冲突数组中地址为1之前的所有元素值的和,因所述地址为1之前的元素值仅包括1,所以所述偏移数组中地址为1的元素值为1,同理,所述偏移数组中地址为2的元素值为3,地址为3的元素值为4,地址为4的元素值为5。因此计算得出所述偏移数组为{0,1,3,4,5}。
步骤S400:根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
具体地,所述根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表通过多个线程以并行方式进行。根据所述偏移数组在键散列后指向的第一散列地址内的元素值确定对应的第二散列地址,以所述键为{1,2,3,4,5,6},所述预定的散列函数为key%5,所述键对应的第一散列地址分别为{1,2,3,4,0,1},所述冲突数组为{1,2,1,1,1},所述偏移数组为{0,1,3,4,5}为例来进行说明。因通过所述偏移数组确定了每个第一散列地址对应的起始地址和结束地址,所述第一散列地址为0,2,3,4的键的起始地址和结束地址为同一个地址,因此根据所述偏移数组可得出所述键5对应的第二散列地址为0,键2对应的第二散列地址为3,键3对应的第二散列地址为4,键4对应的第二散列地址为5。所述第一散列地址为1的键起始地址和结束地址为1和2,因此所述第一散列地址为1的键1和键6对应的第二散列地址为1和2。在确定第二散列地址的同时根据所述第二散列地址将所述各键值对写入散列表。
进一步地,可对所述数据散列方法中占用的空间进行释放,例如在所述键值对写入散列表后可将所述冲突数组删除,或直接在冲突数组的基础上计算偏移数组,不为所述偏移数组重新分配空间。最终仅保留所述偏移数组,用于在后续查询过程中根据所述偏移信息读取所述键在散列表中对应的值。即在所述候选地址范围内查询所述键,再根据所述键在散列表中读取对应的值。
所述方法通过预先计算为产生冲突的键值对指定候选地址范围,解决键值对散列过程中的冲突,再通过图形处理器对键值对进行散列,利用图形处理器的高并发性以实现键值对高性能散列,解决了线程同步限制等问题,且支持大数据量和多种数据类型的键值对散列。
图3为本发明实施例一个可选实现方式的将所述各键值对写入散列表的流程图,如图3所示,所述方法包括:
步骤S410:创建索引数组。
具体地,所述索引数组用于记录散列表的所述候选地址范围的占用情况。所述索引数组中的每个元素对应偏移数组确定的一个候选地址范围。例如,所述偏移数组为{0,1,3,4,5}时,创建初始值为0,且元素数与所述偏移数组相同的索引数组{0,0,0,0,0}。当所述偏移数组内元素表示的候选地址范围被占用时,所述索引数组内对应的元素值加1。以所述偏移数组中第一散列地址为1的键对应的候选地址范围为[1,2]为例进行说明。所述散列表中的地址1、2未被占用时,所述索引数组中地址为1的元素值为0,当所述散列表中的地址1或2中的一个被占用时,所述索引数组中地址为1的元素值为1,当所述散列表中的地址1和2全部被占用时,所述索引数组中地址为1的元素值为2。
步骤S420:根据所述索引数组和偏移数组确定第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
具体地,所述第二散列地址为同一个第一散列地址对应的所述索引数组和偏移数组内元素值的和。以所述键为{1,2,3,4,5,6},所述预定的散列函数为key%5,所述键对应的第一散列地址分别为{1,2,3,4,0,1},所述偏移数组为{0,1,3,4,5}为例来进行说明。当所述键{1,2,3,4,5}散列时,对应的第二散列地址为偏移数组与所述索引数组在对应的第一散列地址处元素值的和,因此所述键1的第二散列地址为1+0=1,键4的第二散列地址为5+0=5,依次类推分别得到键{1,2,3,4,5}的第二散列地址为{1,3,4,5,0}。所述键{1,2,3,4,5}散列后,指向的第一散列地址{0,1,2,3,4}对应的每个候选地址范围被占用一个,因此偏移数组中的元素值{0,1,3,4,5}表示的地址范围被占用,偏移数组中为1的元素值表示的候选地址还有一个未被占用。相应的,所述索引数组中地址为{0,1,2,3,4}的元素值加1,得到的所述索引数组为{1,1,1,1,1}。而此时未被散列的键6对应的第二散列地址为偏移数组与所述索引数组在第一散列地址1处元素值的和,即第二散列地址为1+1=2。
进一步地,为了保证线程安全,所述根据所述索引数组和所述偏移数组确定第二散列地址包括对第一散列地址对应的所述索引数组中的元素值进行原子加1,并读取加1之前的元素值,所述读写过程通过一个原子操作完成。再通过计算所述第一散列地址对应的偏移数组中的元素值与所述索引数组中读取的元素值的和确定所述第二散列地址。通过所述索引数组保证线程安全,避免在多线程散列过程中,因不同键值对对应的第二散列地址相同,最终导致键值对写入散列表的过程发生冲突。。进一步地,在所述键值对写入所述散列表后释放所述索引数组,节省存储空间。
所述方法通过创建索引表为不同键在所述候选地址范围内选择第二散列地址,解决了键值对散列过程中的冲突,实现了键值对在高并发条件下进行高性能散列。
图4为本发明实施例一个可选实现方式的确定偏移信息的示意图。如图4所示,表40为待散列键值对的键,表41为冲突数组,表42为偏移数组。
具体地,通过预定的散列函数对待散列键值对的键进行散列,确定第一散列地址。例如,所述待散列的键为{1,2,3,4,5,6},所述预定的散列函数为key%5(也即,将键对数值5取余操作),所述键对应的第一散列地址分别为{1,2,3,4,0,1}。应当理解,实际中使用的散列函数可能会比上述函数复杂,只要采用能够在散列表和键值对之间建立一个确定的对应关系的函数作为散列函数即可。根据上述例子可知,所述地址{0,2,3,4}均对应一个键,仅在所述第一散列地址集合中出现一次。而所述地址“1”对应键1和键6,即在所述第一散列地址集合中出现了两次。由此,根据每个所述第一散列地址被散列的次数确定冲突数组41的元素值,因此所述冲突数组41中记录的冲突信息分别为{1,2,1,1,1}。再根据所述冲突数组41确定所述第一散列地址的偏移数组42,所述偏移数组42用于为各第一散列地址指定候选地址范围。所述偏移数组42的元素数与所述冲突数组41中的元素数相同,所述偏移数组42中每个地址的元素值为所述冲突数组41中所述地址之前所有元素值的和。因此所述偏移数组42中地址为0处的元素值为所述冲突数组地址为0之前所有的元素值的和,得到所述地址为0处的元素值为0;地址为1处的元素值为所述冲突数组地址为1之前所有的元素值的和,得到所述地址为1处的元素值为1;地址为2处的元素值为所述冲突数组地址为2之前所有的元素值的和,得到所述地址为2处的元素值为3,以此类推所述偏移数组42地址为3处的元素值为4,所述偏移数组42地址为4处的元素值为5,最终得到所述偏移数组42{0,1,3,4,5}。
进一步地,所述偏移数组42用于记录每个第一散列地址对应的起始地址和结束地址,所述起始地址和结束地址限定了所述候选地址范围。其中所述偏移数组42中的每一个元素值代表一个起始地址,因此每一个散列地址对应的起始地址为所述地址内的元素值,结束地址为下一个地址内的元素值减1。因此所述偏移数组42中地址为0处的元素为第一散列地址为0的键指定候选地址范围0,所述偏移数组42中地址为1处的元素为第一散列地址为1的键指定候选地址范围[1,2],所述偏移数组42中地址为2处的元素为第一散列地址为2的键指定候选地址范围为3,所述偏移数组42中地址为3处的元素为第一散列地址为3的键指定候选地址范围为4,所述偏移数组42中地址为4处的元素为第一散列地址为4的键指定候选地址范围为5。
因此所述键通过散列时指向的第一散列地址即可以选定散列的地址范围。避免在散列过程中发生冲突。
图5为本发明实施例一个可选实现方式的将无冲突的键值对写入散列表的示意图,如图5所示,表50为待散列键值对的键,表51为偏移数组,表52为索引数组,表53为散列表。
具体地,可以根据所述索引数组52和所述偏移数组51确定第二散列地址,所述索引数组52用于记录散列表53中的所述候选地址范围的占用情况。仍然以所述偏移信息为{0,1,3,4,5},所述待散列的键为{1,2,3,4,5,6},所述预定的散列函数为key%5为例来进行说明。当所述待散列键中的{1,2,3,4,5}进行散列时,因所述第一散列地址对应键的候选地址范围未被占用,所述索引数组52的初始值为{0,0,0,0,0},所述第二散列地址通过计算同一个第一散列地址对应的所述索引数组52和偏移数组51内元素值的和来确定。因此所述键{1,2,3,4,5}在散列过程中,对应的第二散列地址为偏移数组51与所述索引数组52在对应的第一散列地址处元素值的和,即键1的第二散列地址为1+0=1,键4的第二散列地址为5+0=5,依次类推分别得到键{1,2,3,4,5}的第二散列地址为{1,3,4,5,0}。并根据所述第二散列进行散列,将键1对应的键值对存储至所述散列表53的地址1中,键2对应的键值对存储至所述散列表53的地址3中,键3对应的键值对存储至所述散列表53的地址4中,键4对应的键值对存储至所述散列表53的地址5中,键2对应的键值对存储至所述散列表53的地址0中。散列的同时将所述地址范围对应的索引数组52中的值加1,因所述索引数组52中无地址5,仅需要对地址{0,1,2,3,4}原子加1,得到的索引数组52为{1,1,1,1,1}。
所述方法通过预先计算为产生冲突的键值对指定候选地址范围,解决键值对散列过程中的冲突,再通过图形处理器对键值对进行散列,利用图形处理器的高并发性以实现键值对高性能散列,解决了线程同步限制等问题。
图6为本发明实施例一个可选实现方式的将发生冲突的键值对写入散列表的示意图,如图6所示,表60为偏移数组,表61为索引数组,表62为散列表。所述图6表示经过图5所示的散列过程之后再进行的散列,同时在根据本申请实施例提供的数据散列方法进行散列数据时,所述图6与图5的操作并行,散列的顺序根据各线程的速度决定。
具体地,可以根据所述索引数组61和所述偏移数组60确定第二散列地址,所述索引数组61用于记录散列表62的所述候选地址范围的占用情况。在图5所述的散列过程中,所述图中的索引数组61中的地址{0,1,2,3,4}对应的候选地址范围均已被占用1次,因此所以所述索引数组61为{1,1,1,1,1}。所述第二散列地址通过计算同一个第一散列地址对应的所述索引数组61和偏移数组60内元素值的和来确定。因此所述键6在散列过程中,对应的第二散列地址为偏移数组60与所述索引数组61在对应的第一散列地址处元素值的和,即键6的第二散列地址为1+1=2。将所述键6对应的键值对存储至所述散列表62的地址2中,同时对索引数组61的地址1加1,得到的索引数组61为{1,2,1,1,1}。
应当理解,所述候选地址范围的占用由线程的速度决定,例如在图5和图6所示的散列过程中,通过多线程控制所述键{1,2,3,4,5,6}并发进行散列,因所述键1和6的候选地址范围均为1和2,当所述键1的线程速度较键6快时,所述键1对应的键值对散列至所述散列表的地址1内,所述键6对应的键值对散列至所述散列表的地址2内;当所述键6的线程速度较键1快时,所述键6对应的键值对散列至所述散列表的地址1内,所述键1对应的键值对散列至所述散列表的地址2内。
图7为本发明实施例的电子设备的示意图,如图7所示,在本实施例中,所述电子设备包括服务器、终端等。如图所示,所述电子设备包括:至少一个第一处理器72和一个第二处理器73组成的异构计算机架构,所述第一处理器例如可以是中央处理器(CPU),所述第二处理器例如可以是图形处理器(GPU);与至少一个所述异构计算机架构通信连接的存储器71;以及与存储介质通信连接的通信组件74,通信组件74在异构计算机架构的控制下接收和发送数据;其中,存储器71存储有可被至少一个异构计算机架构执行的指令,指令被至少一个异构计算机架构执行以实现上述实施例中的数据散列方法。
具体地,所述存储器71作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。异构计算机架构通过运行存储在存储器71中的非易失性软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述数据散列方法。
存储器71可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储选项列表等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器71可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至外接设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个模块存储在存储器71中,当被异构计算机架构执行时,执行上述任意方法实施例中的数据散列方法。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果,未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本发明还涉及一种计算机可读存储介质,用于存储计算机可读程序,所述计算机可读程序用于供计算机执行上述部分或全部的方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种数据散列方法,用于对键值对并发散列,其特征在于,所述方法包括:
根据预定的散列函数对键进行散列以确定各键值对的第一散列地址;
根据所述第一散列地址确定冲突信息,所述冲突信息为冲突数组,所述冲突数组的元素用于记录对应的第一散列地址的地址重复数量;
根据所述冲突信息确定所述第一散列地址的偏移信息,所述偏移信息用于为各第一散列地址指定候选地址范围,所述偏移信息为偏移数组,所述偏移数组用于记录每个第一散列地址对应的起始地址和结束地址,所述起始地址和结束地址限定了所述候选地址范围,所述起始地址为偏移数组每个地址中的元素值,所述结束地址为下一个地址内的元素值减1,所述偏移数组每个地址中元素的值为所述冲突数组在所述地址之前的所有元素的和;
根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
2.如权利要求1所述的方法,其特征在于,所述根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表包括:
创建索引数组,所述索引数组用于记录散列表的所述候选地址范围的占用情况;
根据所述索引数组和所述偏移数组确定第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表。
3.如权利要求2所述的方法,其特征在于,所述根据所述索引数组和所述偏移数组确定第二散列地址包括:
对第一散列地址对应的所述索引数组中的元素值进行原子加1,并读取加1之前的元素值,读写过程通过一个原子操作完成;
通过计算所述第一散列地址对应的偏移数组中的元素值与所述索引数组中读取的元素值的和确定所述第二散列地址。
4.如权利要求1所述的方法,其特征在于,还包括:根据所述偏移信息读取所述键在散列表中对应的值。
5.如权利要求1所述的方法,其特征在于,所述根据各键值对的第一散列地址和所述偏移信息确定各键值对对应的第二散列地址,并根据所述第二散列地址将所述各键值对写入散列表通过多个线程以并行方式进行。
6.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如权利要求1-5中任一项所述的方法。
7.一种计算机可读存储介质,用于存储计算机程序指令,其特征在于,所述计算机程序指令在被处理器执行时实现如权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910498603.1A CN112068948B (zh) | 2019-06-10 | 2019-06-10 | 数据散列方法、可读存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910498603.1A CN112068948B (zh) | 2019-06-10 | 2019-06-10 | 数据散列方法、可读存储介质和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112068948A CN112068948A (zh) | 2020-12-11 |
CN112068948B true CN112068948B (zh) | 2024-03-26 |
Family
ID=73658172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910498603.1A Active CN112068948B (zh) | 2019-06-10 | 2019-06-10 | 数据散列方法、可读存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112068948B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641871B (zh) * | 2021-10-18 | 2022-02-08 | 北京医百科技有限公司 | 一种无锁散列方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
CN104765574A (zh) * | 2015-04-23 | 2015-07-08 | 成都博元时代软件有限公司 | 数据云端存储方法 |
CN107239230A (zh) * | 2016-03-29 | 2017-10-10 | 三星电子株式会社 | 用于高效存储器内嵌去重应用的最优化的跳房子多散列表 |
CN107330047A (zh) * | 2017-06-28 | 2017-11-07 | 华信塞姆(成都)科技有限公司 | 一种基于完美哈希算法的fpga训练及查询电路实现方法 |
CN109753231A (zh) * | 2017-11-08 | 2019-05-14 | 三星电子株式会社 | 键值存储设备及操作其的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7965297B2 (en) * | 2006-04-17 | 2011-06-21 | Microsoft Corporation | Perfect hashing of variably-sized data |
US20110276744A1 (en) * | 2010-05-05 | 2011-11-10 | Microsoft Corporation | Flash memory cache including for use with persistent key-value store |
US9846642B2 (en) * | 2014-10-21 | 2017-12-19 | Samsung Electronics Co., Ltd. | Efficient key collision handling |
-
2019
- 2019-06-10 CN CN201910498603.1A patent/CN112068948B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
CN104765574A (zh) * | 2015-04-23 | 2015-07-08 | 成都博元时代软件有限公司 | 数据云端存储方法 |
CN107239230A (zh) * | 2016-03-29 | 2017-10-10 | 三星电子株式会社 | 用于高效存储器内嵌去重应用的最优化的跳房子多散列表 |
CN107330047A (zh) * | 2017-06-28 | 2017-11-07 | 华信塞姆(成都)科技有限公司 | 一种基于完美哈希算法的fpga训练及查询电路实现方法 |
CN109753231A (zh) * | 2017-11-08 | 2019-05-14 | 三星电子株式会社 | 键值存储设备及操作其的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112068948A (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108572876B (zh) | 一种读写锁的实现方法及装置 | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
CN107122130B (zh) | 一种数据重删方法及装置 | |
CN113835901A (zh) | 读锁操作方法、写锁操作方法及*** | |
CN109542636B (zh) | 一种数据更新的方法及装置 | |
CN110727675A (zh) | 一种链表的处理方法及装置 | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN112181902B (zh) | 数据库的存储方法、装置及电子设备 | |
CN104503703A (zh) | 缓存的处理方法和装置 | |
CN104978321A (zh) | 构造数据队列的方法、装置及从其***和消费对象的方法 | |
US9836491B1 (en) | Method and apparatus for hardware-implemented AVL tree updates | |
CN109656730B (zh) | 一种访问缓存的方法和装置 | |
CN112068948B (zh) | 数据散列方法、可读存储介质和电子设备 | |
CN116431080B (zh) | 一种数据落盘方法、***、设备及计算机可读存储介质 | |
KR20200126155A (ko) | 명령 머지 동작을 수행하는 반도체 메모리 장치 및 그 동작 방법 | |
CN115840654B (zh) | 消息的处理方法、***、计算设备及可读存储介质 | |
CN107329807B (zh) | 数据延迟处理方法和装置、计算机可读存储介质 | |
CN113641872B (zh) | 一种散列方法、装置、设备及介质 | |
WO2022002128A1 (zh) | 一种读数据的方法、写数据的方法、设备和*** | |
US8452920B1 (en) | System and method for controlling a dynamic random access memory | |
CN110825652B (zh) | 淘汰磁盘块上的缓存数据的方法、装置及设备 | |
US20160140034A1 (en) | Devices and methods for linked list array hardware implementation | |
WO2015004571A1 (en) | Method and system for implementing a bit array in a cache line | |
CN113641871B (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 |