CN109165321B - 一种基于非易失内存的一致性哈希表构建方法和系统 - Google Patents
一种基于非易失内存的一致性哈希表构建方法和系统 Download PDFInfo
- Publication number
- CN109165321B CN109165321B CN201810851514.6A CN201810851514A CN109165321B CN 109165321 B CN109165321 B CN 109165321B CN 201810851514 A CN201810851514 A CN 201810851514A CN 109165321 B CN109165321 B CN 109165321B
- Authority
- CN
- China
- Prior art keywords
- hash
- layer
- unit
- bitmap
- target element
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于非易失内存的一致性哈希表构建方法和系统,本发明方法构建一个一致性哈希表,将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;每一层的哈希单元被分为数量相等的n组,第一层和第二层的具有相同编号的组相匹配;当第一层的第i组发生哈希冲突时,在第二层的第i组进行冲突处理,哈希表利用8字节原子写技术保证数据的一致性;该哈希表可以在系统崩溃后恢复到一致性状态。本发明还实现了一种基于非易失内存的哈希表构建系统。本发明技术方案构建的哈希表可减少一致性开销,并且具有低的请求延迟。
Description
技术领域
本发明属于计算机数据存储领域,更具体地,涉及一种基于非易失内存的一致性哈希表构建方法和系统。
背景技术
近年来,DRAM被广泛应用于计算机系统中作为主存。然而,它面临着越来越大的空闲功耗和有限的可扩展性等问题。为了解决这些问题,一些新型的非易失内存(NVM)技术开始涌现,如相变存储器(PCM)、忆阻器(ReRAM)、自旋扭矩磁存储器(STT-MRAM)和3D-XPoint等。NVM既有传统磁盘的掉电非易失性,也有DRAM的快速访存、按字节修改寻址的特性。这些优良特性让NVM可以像DRAM一样直接连接在内存总线上组成混合内存,甚至在将来完全取代DRAM。当NVM作为内存的时候,应用程序可以通过load/store指令迅速访问和修改持久化数据。
随着NVM技术的快速发展,如何设计能有效适应NVM的数据结构是一个热门研究问题。尽管NVM天生具备掉电非易失特性,但是如何保证计算机系统意外断电后NVM中数据结构的一致性仍然面临着巨大的挑战。例如,系统意外断电发生在NVM数据结构更新的过程中,当系统重启之后,只有那些部分更新的数据结构可以被恢复,这样会带来数据结构的一致性问题。和传统磁盘相比,NVM的原子更新粒度要小得多,只有8字节,磁盘的原子更新粒度是一个扇区,一般为512字节。当写入到NVM的数据大于8字节的时候,就有可能出现上述的一致性问题。为了解决这一问题,当前普遍采用的方法是日志或者写时复制技术,但不管是日志还是写时复制,都需要对更新的数据保存副本,这样会带来很多额外的写操作。此外,日志或者写时复制技术都要求数据的更新按照特定的顺序,不过CPU cache和内存控制器通常会打乱数据更新的顺序来提升性能。为了使得数据的更新按照指定的顺序,当前的CPU提供了mfence和clflush指令,但是这些指令会带来很大的开销。
基于哈希的索引结构广泛应用于各类应用程序中。然而,已有的针对NVM的哈希表结构仅仅减少了对NVM的写操作,并没有考虑mfence和clflush指令带来的开销和CPUcache效率,也没有提供相应的机制保障计算机系统崩溃时的数据一致性。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于非易失内存的一致性哈希表构建方法和系统,由此解决现有技术没有提供相应的机制导致计算机系统崩溃时无法实现数据一致性的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于非易失内存的一致性哈希表构建方法,包括:
将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;
每一层的哈希单元被分为数量相等的n组,第一层和第二层的具有相同编号的组相匹配;当第一层的第i组发生哈希冲突时,在第二层的第i组进行冲突处理,1≤i≤n。
进一步地,哈希表利用8字节原子写技术保证计算机系统崩溃时数据的一致性。
进一步地,哈希表里的两层哈希单元依次存储在一个一维数组中,第一层的哈希单元占据一维数组中0~(mn-1)共mn个位置,第二层的哈希单元占据一维数组中mn~(2mn-1)共mn个位置,其中,m为每组里哈希单元的个数。
进一步地,哈希表中每个哈希单元包含三个数据项:位图、存储元素键值和存储元素值;其中位图占据1比特存储单元,位图为0表示该哈希单元空闲,位图为1表示该哈希单元被占用;当一个哈希单元的位图从0更新为1时,说明对该哈希单元的插入操作完成,当一个哈希单元的位图从1更新为0时,说明对该哈希单元的删除操作完成;所述哈希表包括一个数据结构记录哈希表的总体信息,所述总体信息中包括一个8字节计数器count记录已经被占用的哈希单元总数;由于位图和计数器count占据的存储单元没有超过8字节,在非易失内存中对于它们的更新可以看做原子性的,即更新只可能成功或者失败,不存在中间状态。
进一步地,哈希表包括以下操作:
插入操作:插入一个新的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的位图是否为0,是则将新的元素写入该哈希单元,然后将位图从0更新为1;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到一个位图为0的哈希单元,将新的元素写入该哈希单元,并将该哈希单元的位图0更新为1;位图从0更新为1之后,哈希表总体信息中的计数器count加1;若遍历完第二层中和位置p1相匹配组没有找到位图为0的哈希单元,则插入失败;
查询操作:通过哈希函数计算待查询的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则返回目标元素的value;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,找到后返回目标元素的value;若遍历完第二层中和位置p1相匹配组没有找到目标元素,则待查询的目标元素不在哈希表中;
删除操作:通过哈希函数计算待删除的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到目标元素,找到后先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;位图从1更新为0之后,哈希表总体信息中的计数器count减1;若遍历完第二层中和位置p1相匹配组依然没有找到目标元素,则待删除的目标元素不在哈希表中;
恢复操作:变量c用于统计哈希表中被占用哈希单元数目,初始值为0;遍历检查哈希表所有哈希单元,若哈希单元的位图为1,则c加1,若哈希单元的位图为0,则将哈希单元里的元素清零;遍历完成之后,将总体信息里的计数器count更新为变量c的当前值。
按照本发明的另一方面,提供了一种基于非易失内存的一致性哈希表构建系统,包括:
分层模块,用于将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;
组内共享模块,用于将每一层的哈希单元被分为数量相等的n组,第一层和第二层的具有相同编号的组相匹配;当第一层的第i组发生哈希冲突时,在第二层的第i组进行冲突处理,1≤i≤n。
进一步地,哈希表利用8字节原子写技术保证计算机系统崩溃时数据的一致性。
进一步地,哈希表里的两层哈希单元依次存储在一个一维数组中,第一层的哈希单元占据一维数组中0~(mn-1)共mn个位置,第二层的哈希单元占据一维数组中mn~(2mn-1)共mn个位置,其中,m为每组里哈希单元的个数。
进一步地,哈希表中每个哈希单元包含三个数据项:位图、存储元素键值和存储元素值;其中位图占据1比特存储单元,位图为0表示该哈希单元空闲,位图为1表示该哈希单元被占用;当一个哈希单元的位图从0更新为1时,说明对该哈希单元的插入操作完成,当一个哈希单元的位图从1更新为0时,说明对该哈希单元的删除操作完成;所述哈希表包括一个数据结构记录哈希表的总体信息,所述总体信息中包括一个8字节计数器count记录已经被占用的哈希单元总数;由于位图和计数器count占据的存储单元没有超过8字节,在非易失内存中对于它们的更新可以看做原子性的,即更新只可能成功或者失败,不存在中间状态。
进一步地,哈希表包括以下操作模块:
插入操作模块,用于插入一个新的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的位图是否为0,是则将新的元素写入该哈希单元,然后将位图从0更新为1;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到一个位图为0的哈希单元,将新的元素写入该哈希单元,并将该哈希单元的位图0更新为1;位图从0更新为1之后,哈希表总体信息中的计数器count加1;若遍历完第二层中和位置p1相匹配组没有找到位图为0的哈希单元,则插入失败;
查询操作模块,用于通过哈希函数计算待查询的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则返回目标元素的value;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,找到后返回目标元素的value;若遍历完第二层中和位置p1相匹配组没有找到目标元素,则待查询的目标元素不在哈希表中;
删除操作模块,用于通过哈希函数计算待删除的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到目标元素,找到后先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;位图从1更新为0之后,哈希表总体信息中的计数器count减1;若遍历完第二层中和位置p1相匹配组依然没有找到目标元素,则待删除的目标元素不在哈希表中;
恢复操作模块,用于利用变量c统计哈希表中被占用哈希单元数目,初始值为0;遍历检查哈希表所有哈希单元,若哈希单元的位图为1,则c加1,若哈希单元的位图为0,则将哈希单元里的元素清零;遍历完成之后,将总体信息里的计数器count更新为变量c的当前值。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)本发明提供了一种基于非易失内存的一致性哈希表构建方法和系统,其目的在于保障哈希表结构在非易失内存中遇到系统崩溃时的数据一致性,同时减少数据一致性和持久化带来的额外开销,并降低请求延迟。
(2)本发明由于采用了组内共享技术处理哈希冲突,哈希表的插入和删除操作不会造成额外写,而且处理冲突的哈希单元在内存地址上是连续的,可以减少CPU cache失效率,提升CPU cache效率,从而降低哈希表的请求延迟。
(3)本发明由于采用了8字节原子写技术保证数据一致性,哈希表不需要像日志或者写时复制技术那样在更新时保存副本,消除了保存副本带来的额外写操作,从而减少了保证数据一致性带来的开销。
(4)本发明由于采用了哈希表恢复技术,当系统崩溃发生时,哈希表可以迅速恢复到一致性状态,从而提高了哈希表结构的可靠性。
附图说明
图1是本发明实施例提供的哈希表结构图;
图2是本发明实施例提供的组内共享方法示意图;
图3是本发明实施例提供的插入操作中8字节原子写保证数据一致性的流程图;
图4是本发明实施例提供的删除操作中8字节原子写保证数据一致性的流程图;
图5是本发明实施例提供的哈希恢复流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,本发明实施例首先将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;每一层的哈希单元被分为数量相等的若干组,第一层的每一组和第二层中具有相同编号的组相匹配;当第一层发生哈希冲突时,冲突单元可以存放在第二层相匹配的组里。
之后,利用8字节原子写技术保证系统崩溃时数据的一致性。哈希表中每个哈希单元包含三个数据项:位图、存储元素键值和存储元素值;其中位图占据1比特存储单元,位图为0表示该哈希单元空闲,位图为1表示该哈希单元被占用;当一个哈希单元的位图从0更新为1时,说明对该哈希单元的插入操作完成,当一个哈希单元的位图从1更新为0时,说明对该哈希单元的删除操作完成;所述哈希表包括一个数据结构记录哈希表的总体信息,所述总体信息中包括一个8字节计数器count记录已经被占用的哈希单元总数;由于位图和计数器count占据的存储单元没有超过8字节,在非易失内存中对于它们的更新可以看做原子性的,即更新只可能成功或者失败,不存在中间状态。
最后,当系统崩溃发生时,哈希表能够迅速恢复到一致性状态。
其中,所述的两层哈希单元依次存储在一个一维数组中,第一层哈希单元占据一维数组中0~mn-1共mn个位置,第二层哈希单元占据一维数组中mn~2mn-1共mn个位置,其中n为每一层的组数,m为每组里哈希单元的个数。
如图2所示,给出了本发明中构建m=4,n=4时组内共享方法的实施例:
组内共享方法把哈希表中所有的存储单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元且作为第一层的哈希冲突处理单元;每一层的哈希单元被分为4个组,每个组里有4个哈希单元;第一层的每一组和第二层中具有相同编号的组相匹配;当第一层发生哈希冲突时,冲突单元可以存放在第二层相匹配的组里;第二层的每个组里的哈希单元被第一层相匹配组的所有单元共享处理哈希冲突;
对于新插入的键值对(key,value),通过哈希函数h(key)计算得到其哈希位置为9,如果位置为9的哈希单元已经被占用了,(key,value)对将被插入到第二层第3组里的一个空闲单元。
如图3所示,给出了插入操作中8字节原子写保证数据一致性的流程图,由于只有插入和删除操作包含数据更新的操作,因此只有插入和删除需要保证数据一致性;
插入操作的具体步骤如下:
(1.1)通过哈希函数计算插入目标元素的key在第一层对应的哈希单元的位置p1,转入步骤(1.2);
(1.2)判断p1位置哈希单元的位图是否为0,如果不为0,转入步骤(1.3);如果为0转入步骤(1.4);
(1.3)在第二层相匹配的组里遍历查找空闲的哈希单元,如果找到空闲单元转入步骤(1.4);否则转入步骤(1.7);
(1.4)将(key,value)写入到目标空闲单元,转入步骤(1.5);
(1.5)利用8字节原子更新将该单元的位图值从0修改为1,转入步骤(1.6);
(1.6)利用8字节原子更新将哈希表总体信息中的计数器count值加1,插入成功;
(1.7)没有找到空闲哈希单元,插入失败。
如图4所示,给出了删除操作中8字节原子写保证数据一致性的流程图;删除操作的具体步骤如下:
(2.1)通过哈希函数计算删除目标元素的key在第一层对应的哈希单元的位置p1,转入步骤(2.2);
(2.2)判断p1位置哈希单元的是否为目标删除元素,如果不是,转入步骤(2.3);如果是,转入步骤(2.4);
(2.3)在第二层相匹配的组里遍历查找哈希单元,如果找到目标删除元素转入步骤(2.4);否则转入步骤(2.7);
(2.4)利用8字节原子更新将目标单元的位图值从1修改为0,转入步骤(2.5);
(2.5)利用8字节原子更新将该单元的位图值从0修改为1,转入步骤(2.6);
(2.6)利用8字节原子更新将哈希表总体信息中的计数器count值减1,删除成功;
(2.7)没有找到目标删除元素,删除失败。
如图5所示,给出了本发明哈希恢复的流程图,当系统崩溃发生的时候,需要将哈希表恢复到一致性状态;哈希恢复操作具体步骤如下:
(3.1)变量c用于记录哈希表中被占用的哈希单元数目,初始化为0;从第一个哈希单元开始,查看该哈希单元的位图值是否为0,如果为0,转入步骤(3.2);否则转入步骤(3.4);
(3.2)查看该哈希单元的(key,value)区域是否为空,如果为空,转入步骤(3.4);否则转入步骤(3.3);
(3.3)清除该哈希单元(key,value)区域的数据,删除可能被部分更新的(key,value)数据,转入步骤(3.5);
(3.4)变量c的值加1,转入步骤(3.5);
(3.5)检查是否到达哈希表中的最后一个单元,如果是,转入步骤(3.7);否则转入步骤(3.6);
(3.6)查看下一个哈希单元的位图值是否为0,如果为0,转入步骤(3.2);否则转入步骤(3.4);
(3.7)将总体信息中的count更新为变量c的当前值。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于非易失内存的一致性哈希表构建方法,其特征在于,包括:
将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;
每一层的哈希单元被分为数量相等的n组,第一层和第二层的具有相同编号的组相匹配;当第一层的第i组发生哈希冲突时,在第二层的第i组进行冲突处理,1≤i≤n;
所述哈希表包括以下操作:
插入操作:插入一个新的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的位图是否为0,是则将新的元素写入该哈希单元,然后将位图从0更新为1;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到一个位图为0的哈希单元,将新的元素写入该哈希单元,并将该哈希单元的位图0更新为1;位图从0更新为1之后,哈希表总体信息中的计数器count加1;若遍历完第二层中和位置p1相匹配组没有找到位图为0的哈希单元,则插入失败;
查询操作:通过哈希函数计算待查询的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则返回目标元素的value;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,找到后返回目标元素的value;若遍历完第二层中和位置p1相匹配组没有找到目标元素,则待查询的目标元素不在哈希表中;
删除操作:通过哈希函数计算待删除的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到目标元素,找到后先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;位图从1更新为0之后,哈希表总体信息中的计数器count减1;若遍历完第二层中和位置p1相匹配组依然没有找到目标元素,则待删除的目标元素不在哈希表中;
恢复操作:变量c用于统计哈希表中被占用哈希单元数目,初始值为0;遍历检查哈希表所有哈希单元,若哈希单元的位图为1,则c加1,若哈希单元的位图为0,则将哈希单元里的元素清零;遍历完成之后,将总体信息里的计数器count更新为变量c的当前值。
2.如权利要求1所述的一种基于非易失内存的一致性哈希表构建方法,其特征在于,所述哈希表利用8字节原子写技术保证计算机系统崩溃时数据的一致性。
3.如权利要求1或2所述的一种基于非易失内存的一致性哈希表构建方法,其特征在于,所述哈希表里的两层哈希单元依次存储在一个一维数组中,第一层的哈希单元占据一维数组中0~(mn-1)共mn个位置,第二层的哈希单元占据一维数组中mn~(2mn-1)共mn个位置,其中,m为每组里哈希单元的个数。
4.如权利要求1或2所述的一种基于非易失内存的一致性哈希表构建方法,其特征在于,所述哈希表中每个哈希单元包含三个数据项:位图、存储元素键值和存储元素值;其中位图占据1比特存储单元,位图为0表示该哈希单元空闲,位图为1表示该哈希单元被占用;当一个哈希单元的位图从0更新为1时,说明对该哈希单元的插入操作完成,当一个哈希单元的位图从1更新为0时,说明对该哈希单元的删除操作完成;所述哈希表包括一个数据结构记录哈希表的总体信息,所述总体信息中包括一个8字节计数器count记录已经被占用的哈希单元总数。
5.一种基于非易失内存的一致性哈希表构建系统,其特征在于,包括:
分层模块,用于将哈希表里所有的哈希单元分为两层,第一层是哈希函数可访问单元,第二层是哈希函数不可访问单元,第二层用于在第一层发生哈希冲突时进行冲突处理;
组内共享模块,用于将每一层的哈希单元被分为数量相等的n组,第一层和第二层的具有相同编号的组相匹配;当第一层的第i组发生哈希冲突时,在第二层的第i组进行冲突处理,1≤i≤n;
所述哈希表包括以下操作模块:
插入操作模块,用于插入一个新的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的位图是否为0,是则将新的元素写入该哈希单元,然后将位图从0更新为1;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到一个位图为0的哈希单元,将新的元素写入该哈希单元,并将该哈希单元的位图0更新为1;位图从0更新为1之后,哈希表总体信息中的计数器count加1;若遍历完第二层中和位置p1相匹配组没有找到位图为0的哈希单元,则插入失败;
查询操作模块,用于通过哈希函数计算待查询的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则返回目标元素的value;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,找到后返回目标元素的value;若遍历完第二层中和位置p1相匹配组没有找到目标元素,则待查询的目标元素不在哈希表中;
删除操作模块,用于通过哈希函数计算待删除的目标元素的key在第一层对应的哈希单元的位置p1,判断位置p1的哈希单元的元素是否为目标元素,是则先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;否则计算第二层中和位置p1相匹配组的第一个哈希单元的位置p2,其中从位置p2开始遍历查找第二层中和位置p1相匹配组内的哈希单元,直到找到目标元素,找到后先将该哈希单元的位图从1更新为0,然后删除哈希单元里的目标元素;位图从1更新为0之后,哈希表总体信息中的计数器count减1;若遍历完第二层中和位置p1相匹配组依然没有找到目标元素,则待删除的目标元素不在哈希表中;
恢复操作模块,用于利用变量c统计哈希表中被占用哈希单元数目,初始值为0;遍历检查哈希表所有哈希单元,若哈希单元的位图为1,则c加1,若哈希单元的位图为0,则将哈希单元里的元素清零;遍历完成之后,将总体信息里的计数器count更新为变量c的当前值。
6.如权利要求5所述的一种基于非易失内存的一致性哈希表构建系统,其特征在于,所述哈希表利用8字节原子写技术保证计算机系统崩溃时数据的一致性。
7.如权利要求5或6所述的一种基于非易失内存的一致性哈希表构建系统,其特征在于,所述哈希表里的两层哈希单元依次存储在一个一维数组中,第一层的哈希单元占据一维数组中0~(mn-1)共mn个位置,第二层的哈希单元占据一维数组中mn~(2mn-1)共mn个位置,其中,m为每组里哈希单元的个数。
8.如权利要求5或6所述的一种基于非易失内存的一致性哈希表构建系统,其特征在于,所述哈希表中每个哈希单元包含三个数据项:位图、存储元素键值和存储元素值;其中位图占据1比特存储单元,位图为0表示该哈希单元空闲,位图为1表示该哈希单元被占用;当一个哈希单元的位图从0更新为1时,说明对该哈希单元的插入操作完成,当一个哈希单元的位图从1更新为0时,说明对该哈希单元的删除操作完成;所述哈希表包括一个数据结构记录哈希表的总体信息,所述总体信息中包括一个8字节计数器count记录已经被占用的哈希单元总数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810851514.6A CN109165321B (zh) | 2018-07-28 | 2018-07-28 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810851514.6A CN109165321B (zh) | 2018-07-28 | 2018-07-28 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109165321A CN109165321A (zh) | 2019-01-08 |
CN109165321B true CN109165321B (zh) | 2020-06-02 |
Family
ID=64898645
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810851514.6A Active CN109165321B (zh) | 2018-07-28 | 2018-07-28 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109165321B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
CN111459846B (zh) * | 2020-03-12 | 2022-03-18 | 华中科技大学 | 一种基于混合dram-nvm内存的动态哈希表操作方法 |
CN112181288B (zh) * | 2020-08-17 | 2022-03-04 | 厦门大学 | 一种非易失性存储介质的数据处理方法和计算机存储介质 |
CN112612803B (zh) * | 2020-12-22 | 2022-07-12 | 浙江大学 | 基于持久性内存的键值对存储系统及数据并发插入方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100574281C (zh) * | 2007-06-22 | 2009-12-23 | 中兴通讯股份有限公司 | 一种交换机路由表的管理方法 |
CN101369923B (zh) * | 2008-09-24 | 2010-12-29 | 中兴通讯股份有限公司 | 一种使用分布式哈希表提高集群web服务性能的方法 |
US8925098B2 (en) * | 2012-11-15 | 2014-12-30 | Elwha Llc | Data security and access tracking in memory |
CN104935654B (zh) * | 2015-06-10 | 2018-08-21 | 华为技术有限公司 | 一种服务器集群系统中的缓存方法、写入点客户端和读客户端 |
US20170091254A1 (en) * | 2015-09-24 | 2017-03-30 | Kshitij A. Doshi | Making volatile isolation transactions failure-atomic in non-volatile memory |
-
2018
- 2018-07-28 CN CN201810851514.6A patent/CN109165321B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109165321A (zh) | 2019-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
CN107784121B (zh) | 一种基于非易失内存的日志文件系统的小写优化方法 | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
US11301379B2 (en) | Access request processing method and apparatus, and computer device | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
JP6764359B2 (ja) | 重複除去dramメモリモジュール及びそのメモリ重複除去方法 | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
JP5943096B2 (ja) | 複合不揮発性記憶装置のためのデータ移行 | |
CN107728937B (zh) | 一种使用非易失性内存介质的键值对持久存储方法及系统 | |
CN109407978B (zh) | 高并发索引b+链表数据结构的设计与实现方法 | |
CN107153707B (zh) | 一种针对非易失内存的哈希表构建方法及系统 | |
US11269772B2 (en) | Persistent memory storage engine device based on log structure and control method thereof | |
US11210020B2 (en) | Methods and systems for accessing a memory | |
US20160291881A1 (en) | Method and apparatus for improving disk array performance | |
US10733101B2 (en) | Processing node, computer system, and transaction conflict detection method | |
US20190012114A1 (en) | Buffer Management in a Data Storage Device | |
CN113778338A (zh) | 分布式存储数据读取效率优化方法、系统、设备和介质 | |
CN115794669A (zh) | 一种扩展内存的方法、装置及相关设备 | |
KR102321346B1 (ko) | 대용량 ssd 장치를 위한 데이터 저널링 방법 | |
CN111061652B (zh) | 一种基于mpi-io中间件的非易失内存管理方法与系统 | |
Chen et al. | Design of skiplist based key-value store on non-volatile memory | |
CN114115711B (zh) | 基于非易失内存文件系统的快速缓存系统 | |
KR101939361B1 (ko) | 비휘발성 메모리를 이용한 로깅 방법 | |
CN114207602A (zh) | 使用概率数据结构减少请求 | |
US11704246B2 (en) | Memory system for maintaining data consistency and operation method thereof |
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 |