CN111459846A - 一种基于混合dram-nvm内存的动态哈希表操作方法 - Google Patents
一种基于混合dram-nvm内存的动态哈希表操作方法 Download PDFInfo
- Publication number
- CN111459846A CN111459846A CN202010172848.8A CN202010172848A CN111459846A CN 111459846 A CN111459846 A CN 111459846A CN 202010172848 A CN202010172848 A CN 202010172848A CN 111459846 A CN111459846 A CN 111459846A
- Authority
- CN
- China
- Prior art keywords
- hash
- directory
- segment
- value
- key
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
Landscapes
- Engineering & Computer Science (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
本发明公开了一种基于混合DRAM‑NVM内存的动态哈希表操作方法,包括:段分裂操作、插入操作、查询操作、删除操作以及恢复操作;其中,将动态哈希表中存储哈希单元所在段地址的数组结构目录存储在DRAM上,将动态哈希表中对数组结构目录进行同步备份的基数树结构目录存储在NVM上,以持久化数组结构目录,使得系统崩溃后数组结构目录得以重建;并采用多层结构存储哈希单元,将哈希单元存储在NVM上;本发明采用了交叉存储键值对和原子段拆分机制来保证数据的一致性,所提供的哈希表充分利用了混合内存的优势,数据一致性的开销较小,并且具有很低的访问延迟。
Description
技术领域
本发明属于计算机数据存储领域,更具体地,涉及一种基于混合DRAM-NVM内存的动态哈希表操作方法。
背景技术
近年来,一些新型的非易失内存(Non-Volatile Memory,NVM)技术开始涌现,如相变存储器(phaseChange Memory,PCM)、忆阻器(ReRAM)、自旋扭矩磁存储器(STT-MRAM)和3D-XPoint等。NVM既有传统磁盘的掉电非易失性,也有DRAM的快速访存、按字节修改寻址的特性。这些优良特性使其有望取代DRAM作为主存。但是当前的NVM技术仍具有不对称的读写延迟和有限的磨损次数等缺点,更适合与DRAM一起连接在内存总线上组成混合内存。
计算机内存介质和体系结构的改变使传统的索引结构变得不再高效,因为它们没有充分利用NVM的字节寻址特性并且忽略了数据一致性的问题。保障NVM的崩溃一致性需要使数据的更新按照指定的顺序写入到NVM中,但是CPU和内存控制器为了优化性能可能会对内存操作进行重排序。因此,现有方案会使用内存刷新和内存屏障指令显式地约束操作的顺序,如intelX86中的clfush和mfence。但是这些指令会带来不小的性能开销。目前没有高效的优化机制来减少mfence和clflush指令带来的开销。另外,现代处理器只保证8字节的原子写。当更新大于8字节的数据时系统发生故障或意外断电,系统重启后,只有那些部分更新的数组结构可以被恢复,这样会带来数组结构的一致性问题。为了解决这一问题,需要使用日志或者写时复制技术。这些机制会带来额外的写操作,并且其技术实现过程还存在隐含的顺序约束,如,持久化日志之后才能执行更新操作。
目前已经出现了很多基于持久性内存的哈希索引的研究,然而这些方法全部是基于只有NVM作为内存的系统,不能很好地利用混合DRAM-NVM内存的优点。其中,对于静态哈希,当哈希冲突不可解时,需要创建一个双倍大小的新表,再将旧表中所有的哈希元素迁移到新表中,产生不可容忍的访问延迟。而对于可扩展哈希,虽然对可扩展哈希表进行操作时,可以按需动态分配和取消分配哈希桶,但是其将处于关键路径的目录放置在慢速的NVM中,访问延迟较高。除此之外,现有的哈希表操作方法在数据一致性的保障机制上,都需要采用缓存行刷新和内存屏障指令,花费的开销也较大。
发明内容
本发明提供一种基于混合DRAM-NVM内存的动态哈希表操作方法,在满足系统崩溃时数据可恢复的前提下,解决现有的哈希表操作方法由于将处于关键路径的目录放置在慢速的NVM中而导致的访问延迟较高的技术问题。
为了实现上述目的,本发明提出了一种基于混合DRAM-NVM内存的动态哈希表操作方法,包括:段分裂操作、插入操作、查询操作、删除操作,以及恢复操作;
其中,动态哈希表中存储哈希单元所在段地址的数组结构目录存储在DRAM上,将动态哈希表中对数组结构目录进行同步备份的基数树结构目录存储在NVM上,以持久化数组结构目录,使得系统崩溃后数组结构目录得以重建;
采用多层结构存储哈希单元,将哈希单元存储在NVM上,且使哈希单元的元素key的哈希值前k位索引哈希表目录中的段地址;其中,哈希表目录包括数组结构目录和基数树结构目录;k为正整数。
进一步优选地,在哈希单元中,将存储元素键值key和存储元素值value拆分成多个4字节的块,并使key的4字节块和value的4字节块两两进行组合,形成8字节的key-value块进行存储;系统崩溃后,还原key值并计算其哈希值,若该哈希值不能索引到当前位置,则表明此元素不一致,丢弃此元素,从而减少持久化指令的开销,保障系统崩溃后的数据一致性。
进一步优选地,将数组结构目录存储在DRAM的一维数组中,初始化为2个目录项,每次扩展时,构建一个双倍大小的目录,再将旧目录的数据迁移到新数组;
将基数树结构目录存储在NVM的基数树中,每个节点占据64字节存储单元,存储8个段地址,每次扩展时,原子地增加一个新的树节点。
进一步优选地,将动态哈希表中所存储的哈希单元中哈希值的公共位记为全局深度gd,存放在哈希表目录中,其中,全局深度占据8字节存储单元,当数组结构目录双倍扩展时,使全局深度自增1;
其中,多层结构包括多个段,每个段包括2n个桶和一个后备区域,每个桶包括多个哈希单元;其中,后备区域用于存储哈希冲突项,占据m个桶;桶占据64个字节;多层结构中的段与哈希表目录中的段地址相对应;将每个段中存储的哈希单元中哈希值的公共位记为局部深度ld,用于标注是否需要扩展数组结构目录;其中,ld=gd-log2r,r为指向同一个段的段地址的数量,记为引用计数;n、m为正整数。
进一步优选地,使哈希单元中哈希值的前k位索引哈希表目录中该哈希单元所在的段地址;使哈希值的后n位索引多层结构中该哈希单元所在的桶位置;其中,k为正整数。
进一步优选地,对基于混合DRAM-NVM内存的动态哈希表进行段分裂的操作方法,包括以下步骤:
1.1)当待拆分段的局部深度小于目录的全局深度时,创建一个新的段,重新计算待拆分段中所有的哈希元素的哈希值,将哈希值的前缀与新段索引相等的哈希元素迁移到新段中,修改对应的两个目录,并修改两个段的局部深度,即被拆分段的局部深度加一,新段的局部深度与被拆分段相等;
1.2)当待拆分段的局部深度等于目录的全局深度时,对于基数树结构的目录,直接增加一个节点,对于数组结构的目录,创建一个双倍旧目录大小的新目录,将旧目录的项迁移到新目录中;然后采用步骤1.1)所述的方法进行后续段拆分操作。
进一步优选地,对基于混合DRAM-NVM内存的动态哈希表进行插入的操作方法,包括以下步骤:
2.1)对于待插入的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key的哈希值,在哈希值的前k位所对应的数组结构目录中取出段地址p1,再通过哈希值的后n位索引得到对应的桶地址p2;其中,k、n为正整数;
2.2)判断p1中的哈希单元是否为空或key的哈希值是否不匹配当前索引,若是,转至步骤2.3),否则,转至步骤2.4);
2.3)将新元素的key和value拆分成多个4字节的块,将key的4字节块和value的4字节块两两组合,形成多个8字节的交叉存储的key-value块,写入哈希单元,插入完成;
2.4)从p2向后线性探测4个桶的长度并遍历后备区域p3,直至找到一个位置为空或者key的哈希值不匹配的哈希单元,按照步骤2.3)所述的方法完成插入;若仍没有找到,则分裂当前段来扩展哈希表的容量后,转至步骤2.1)。
进一步优选地,对基于混合DRAM-NVM内存的动态哈希表进行查询的操作方法,包括以下步骤:
对于待查询的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待查询的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则返回目标元素的value;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,返回其value,若遍历所有的共享区域仍没有找到目标元素,则所查询的目标元素不在哈希表中。
进一步优选地,对基于混合DRAM-NVM内存的动态哈希表进行删除的操作方法,包括以下步骤:
对于待删除的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待删除的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则删除哈希单元里的目标元素;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,删除哈希单元里的目标元素,若遍历所有的共享区域仍没有找到目标元素,则代表查询的目标元素不在哈希表中,删除失败。
进一步优选地,对基于混合DRAM-NVM内存的动态哈希表进行恢复的操作方法,包括以下步骤:
3.1)恢复基数树结构目录,搜集基数树的所有叶子节点,从左到右进行恢复,具体步骤为:
对于每个叶子结点,先取出最左边的段地址对应的局部深度ld和全局深度gd,计算段的引用计数r,再判断连续r个段地址中第一个段地址对应的ld与后续的段地址对应的ld是否相等,若不相等,则数据不一致,使ld不一致的段地址等于第一个段地址,重复上述过程进行迭代,直至遍历完基数树结构目录;其中,引用计数r=2gd-ld,为指向同一个段的段地址的数量;
3.2)重建数组结构目录,
获取基数树结构目录的全局深度gd,构建相应大小的数组结构目录,根据基数树结构目录中每个段地址在数组结构目录的起始位置和所得引用计数r,将基数树结构目录存储的段地址填人相应的数组结构目录中,完成动态哈希表的恢复。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
1、本发明提供了一种基于混合DRAM-NVM内存的动态哈希表操作方法,其中,动态哈希表采用数组结构目录和基数树结构目录两种不同结构的目录,将数组结构目录存储在DRAM上,利用DRAM更优的读写性能,降低哈希表的访问延迟;将基数树结构目录存储在NVM上,用于对数组结构目录进行同步备份,持久化数组结构目录,使得系统崩溃后数组结构目录得以重建;本发明充分利用混合内存中DRAM的读写性能高和NVM的持久性的优点,在满足系统崩溃时数据可恢复的前提下,解决了现有的哈希表操作方法中,由于处于关键路径的目录放置在慢速的NVM中而导致的访问延迟较高的技术问题。
2、本发明所提供的基于混合DRAM-NVM内存的动态哈希表操作方法,采用了交叉存储键值对和原子段拆分机制来保证数据的一致性,哈希表不需要像日志或者写时复制技术那样在更新时保存副本,消除了保存副本带来的额外写操作,并且大大减少了clflush和mfence指令的数量,从而减少了保证数据一致性带来的开销。
3、本发明所提供的基于混合DRAM-NVM内存的动态哈希表操作方法,可以按需动态扩展哈希,每次只扩展一个段的大小,大大地降低了重哈希的访问延迟,从而解决了哈希冲突不可解的场景下,现有的静态哈希表在扩展时需要创建双倍旧表大小的新表,并将旧表中所有的元素迁移到新表,而导致的访问延迟较高的问题。
4、本发明提出了一种基于混合DRAM-NVM内存的动态哈希表的插入操作方法,在哈希单元中,将存储元素键值key和存储元素值value拆分成多个4字节的值,并使key的4字节块和value的4字节块两两进行组合,形成8字节的key-value块进行存储;系统崩溃后,还原key值并计算其哈希值,如果该哈希值不能索引到当前位置,表明此元素不一致,丢弃此元素,从而减少持久化指令的开销,保障系统崩溃后的数据一致性;并且当哈希冲突不可解时,可以按需动态扩展哈希表的容量,访问延迟较低。
5、本发明提出了一种基于混合DRAM-NVM内存的动态哈希表的恢复操作方法,当系统崩溃发生时,哈希表可以迅速恢复到一致性状态,并且快速地重建在DRAM中的数组结构目录,从而提高了哈希表结构的可靠性。
附图说明
图1为本发明所提供的基于混合DRAM-NVM内存的动态哈希表结构示意图;
图2为本发明实施例1所提供的原子段分裂的示意图;其中,图(a)为动态哈希表的段分裂以前的示意图;图(b)为动态哈希表的段分裂以后的示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
为了实现上述目的,本发明提出了一种基于混合DRAM-NVM内存的动态哈希表操作方法,包括:段分裂操作、插入操作、查询操作、删除操作,以及恢复操作;
其中,如图1所示,动态哈希表中存储哈希单元所在段地址的数组结构目录存储在DRAM上,将动态哈希表中对数组结构目录进行同步备份的基数树结构目录存储在NVM上,以持久化数组结构目录,使得系统崩溃后数组结构目录得以重建;具体的,将数组结构目录存储在DRAM的一维数组中,初始化为2个目录项,每次扩展时,构建一个双倍大小的目录,再将旧目录的数据迁移到新数组;将基数树结构目录存储在NVM的基数树中,每个节点占据64字节存储单元,存储8个段地址,每次扩展时,原子地增加一个新的树节点。
采用多层结构存储哈希单元,将哈希单元存储在NVM上,且使哈希单元的元素key的哈希值前k位索引哈希表目录中的段地址;其中,哈希表目录包括数组结构目录和基数树结构目录,k为正整数。具体的,多层结构包括多个段,每个段包括2n个桶和一个后备区域,每个桶包括多个哈希单元;每个段对应一个后备区域,段存储哈希函数可访问的哈希单元,后备区域存储哈希函数不可访问的哈希单元,用于段发生哈希冲突时进行冲突处理。其中,后备区域占据m个桶;桶占据64个字节;进一步地,使哈希单元中哈希值的前k位索引哈希表目录中该哈希单元所在的段地址;使哈希值的后n位索引多层结构中该哈希单元所在的桶位置;其中,k为正整数。将动态哈希表中所存储的哈希单元中哈希值的公共位记为全局深度gd,存放在哈希表目录中,其中,全局深度占据8字节存储单元,当数组结构目录双倍扩展时,使全局深度自增1。多层结构中的段与哈希表目录中的段地址相对应;将每个段中存储的哈希单元中哈希值的公共位记为局部深度ld,用于标注是否需要扩展数组结构目录;其中,ld=gd-log2r,r为指向同一个段的段地址的数量,记为引用计数;n、m为正整数。
优选地,利用交叉存储键值对机制来保证系统崩溃时数据的一致性,因为在非易失内存中对于8字节的更新可以看做原子性的,在哈希单元中,将存储元素键值key和存储元素值value拆分成多个4字节的块,并使key的4字节块和value的4字节块两两进行组合,形成8字节的key-value块进行存储;系统崩溃后,还原key值并计算其哈希值,若该哈希值不能索引到当前位置,则表明此元素不一致,丢弃此元素,从而减少持久化指令的开销,保障系统崩溃后的数据一致性。
为了进一步说明本发明所提出的基于混合DRAM-NVM内存的动态哈希表操作方法,下面结合实施例进行详述:
实施例1、
一种基于混合DRAM-NVM内存的动态哈希表的段分裂操作方法,如图2所示,本实施例中,n=256,m可为任意正整数,为了方便解释将m设置为0;其中,n表示哈希值的后n位,m表示后备区域占据m个桶。具体的,当哈希冲突无法解决时,需要扩展哈希表的容量。段分裂有两种情况,其中,第一种情况,如图2中(a)图中的段3所示,发现段3的局部深度2小于目录的全局深度3时,表明有多余的目录空间,此时可直接需要拆分段,创建一个新的段4,重新计算段3中所有的哈希元素的哈希值,迁移段3中哈希值前缀101的哈希元素到段4中,修改目录101对应的段地址使其指向段4,最后再修改两个段的局部深度为3,得到如图2中(b)图中的段3和段4所示的结果。第二种情况,如图2中(a)图中的段1所示,发现段1的局部深度3等于目录的全局深度3时,需要先扩展目录再拆分段,对于基数树结构的目录,增加一个节点,对于数组结构的目录,先创建一个双倍旧目录大小的新目录,再将旧目录的项迁移到新目录中,后续段拆分操作与第一种情况相同,采用第一种情况所述的方法完成后续段拆分操作,最终得到如图2中(b)图中段1和段2所示的结果。
实施例2、
一种基于混合DRAM-NVM内存的动态哈希表的插入操作方法,包括以下步骤:
对于待插入的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;
2.1)对于待插入的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key的哈希值,在哈希值的前k位所对应的数组结构目录中取出段地址p1,再通过哈希值的后n位索引得到对应的桶地址p2;其中,k、n为正整数;
2.2)判断p1中的哈希单元是否为空或key的哈希值是否不匹配当前索引,若是,转至步骤2.3),否则,转至步骤2.4);
2.3)将新元素的key和value拆分成多个4字节的块,将key的4字节块和value的4字节块两两组合,形成多个8字节的交叉存储的key-value块,写入哈希单元,插入完成;
2.4)从p2向后线性探测4个桶的长度;若哈希单元不为空且key的哈希值都匹配当前的索引,遍历段的后备区域p3,直到找到一个位置为空或者key的哈希值不匹配的哈希单元,按照步骤2.3)所述的方法完成插入;若仍没有找到,则分裂当前段来扩展哈希表的容量后,转至步骤2.1)。
其中,当插入失败时,需要扩展哈希表的容量,采用实施例1所提供的方法分裂当前段来扩展哈希表的容量,具体包括以下步骤:
(2.41)查看段的局部深度和对应目录的全局深度,判断局部深度是否等于全局深度,如果等于,转入步骤(2.42);否者转入步骤(2.43);
(2.42)扩展目录的容量,修改相应的全局深度,转入步骤(2.43);
(2.43)创建新的段,重新哈希待拆分段的所有元素,将相应的元素迁移到新的段中,转入步骤(2.44);
(2.44)更新对应的目录项,转入步骤(2.45);
(2.45)增加待拆分段和新的段的局部深度,原子拆分段完成。
具体的,在现有的基于NVM的哈希表中,为了保障数据一致性,会使用缓存刷新和内存屏障指令强制key和value的持久化顺序,本发明所提出的哈希表中,采用交叉存储机制可以避免这些指令的开销,大大提升了哈希表的操作性能。
实施例3、
一种基于混合DRAM-NVM内存的动态哈希表的查询操作方法,包括以下步骤:
对于待查询的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待查询的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则返回目标元素的value;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,返回其value,若遍历所有的共享区域仍没有找到目标元素,则所查询的目标元素不在哈希表中。
实施例4、
一种基于混合DRAM-NVM内存的动态哈希表的删除操作方法,包括以下步骤:
对于待删除的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待删除的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则删除哈希单元里的目标元素;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,删除哈希单元里的目标元素,若遍历所有的共享区域仍没有找到目标元素,则代表查询的目标元素不在哈希表中,删除失败。
实施例5、
一种基于混合DRAM-NVM内存的动态哈希表的恢复操作方法,包括以下步骤:
3.1)恢复基数树结构目录,搜集基数树的所有叶子节点(本实施例中使用广度优先搜索法搜集基数树的所有叶子节点),从左到右进行恢复,具体步骤为:
3.11)对于基数树结构目录中的叶子节点,取出最左边的段地址对应的局部深度ld和全局深度gd,计算段的引用计数r,即指向同一个段的目录项数;
3.12)向右依次检查连续的r-1个段地址对应的局部深度是否等于最左边的段地址对应的局部深度,若相等,转入步骤3.13);否则,当前段地址没有不一致状态,转入步骤3.14);
3.13)判断是否遍历完基数树结构目录,若遍历完成,则完成基数树结构目录的恢复;否则,使用广度优先搜索法搜集基数树的所有叶子节点,从下一个叶子节点开始,执行步骤3.11)-(3.13);
3.14)使局部深度不一致的段地址等于最左边的段地址,转至步骤3.13);
3.2)重建数组结构目录,具体步骤为:
3.21)取基数树结构的目录的全局深度,创建相应大小的数组结构的目录;
3.22)根据基数树结构目录中每个段地址在数组结构目录的起始位置和所得引用计数,将基数树结构目录存储的段地址填人相应的数组结构目录中,完成动态哈希表的恢复。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,包括:段分裂操作、插入操作、查询操作、删除操作以及恢复操作;
其中,将所述动态哈希表中存储哈希单元所在段地址的数组结构目录存储在DRAM上,将所述动态哈希表中对数组结构目录进行同步备份的基数树结构目录存储在NVM上,以持久化数组结构目录,使得系统崩溃后数组结构目录得以重建;
采用多层结构存储哈希单元,将哈希单元存储在NVM上,且使哈希单元的元素key的哈希值前k位索引哈希表目录中的段地址;其中,哈希表目录包括数组结构目录和基数树结构目录;k为正整数。
2.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,在所述哈希单元中,将存储元素键值key和存储元素值value拆分成多个4字节的块,并使key的4字节块和value的4字节块两两进行组合,形成8字节的key-value块进行存储;系统崩溃后,还原key值并计算其哈希值,若该哈希值不能索引到当前位置,则表明此元素不一致,丢弃此元素。
3.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,将所述数组结构目录存储在DRAM的一维数组中,初始化为2个目录项,每次扩展时,构建一个双倍大小的目录,再将旧目录的数据迁移到新数组;
将所述基数树结构目录存储在NVM的基数树中,每个节点占据64字节存储单元,存储8个段地址,每次扩展时,原子地增加一个新的树节点。
4.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,将所述动态哈希表中所存储的哈希单元中哈希值的公共位记为全局深度gd,存放在哈希表目录中,其中,全局深度占据8字节存储单元,当数组结构目录双倍扩展时,使全局深度自增1;
其中,所述多层结构包括多个段,每个段包括2n个桶和一个后备区域,每个桶包括多个哈希单元;其中,后备区域用于存储哈希冲突项,占据m个桶;桶占据64个字节;多层结构中的段与哈希表目录中的段地址相对应;将每个段中存储的哈希单元中哈希值的公共位记为局部深度1d,用于标注是否需要扩展数组结构目录;其中,1d=gd-log2 r,r为指向同一个段的段地址的数量,记为引用计数;n、m为正整数。
5.根据权利要求4所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,使所述哈希单元中哈希值的前k位索引哈希表目录中该哈希单元所在的段地址;使哈希值的后n位索引多层结构中该哈希单元所在的桶位置。
6.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,对基于混合DRAM-NVM内存的动态哈希表进行段分裂的操作方法,包括以下步骤:
1.1)当待拆分段的局部深度小于目录的全局深度时,创建一个新的段,重新计算待拆分段中所有的哈希元素的哈希值,将哈希值的前缀与新段索引相等的哈希元素迁移到新段中,修改对应的两个目录,并修改两个段的局部深度,即被拆分段的局部深度加一,新段的局部深度与被拆分段相等;
1.2)当待拆分段的局部深度等于目录的全局深度时,对于基数树结构的目录,直接增加一个节点,对于数组结构的目录,创建一个双倍旧目录大小的新目录,将旧目录的项迁移到新目录中;然后采用步骤1.1)所述的方法进行后续段拆分操作。
7.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,对基于混合DRAM-NVM内存的动态哈希表进行插入的操作方法,包括以下步骤:
2.1)对于待插入的元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算key的哈希值,在哈希值的前k位所对应的数组结构目录中取出段地址p1,再通过哈希值的后n位索引得到对应的桶地址p2;其中,k、n为正整数;
2.2)判断p1中的哈希单元是否为空或key的哈希值是否不匹配当前索引,若是,转至步骤2.3),否则,转至步骤2.4);
2.3)将新元素的key和value拆分成多个4字节的块,将key的4字节块和value的4字节块两两组合,形成多个8字节的交叉存储的key-value块,写入哈希单元,插入完成;
2.4)从p2向后线性探测4个桶的长度并遍历后备区域p3,直至找到一个位置为空或者key的哈希值不匹配的哈希单元,按照步骤2.3)所述的方法完成插入;若仍没有找到,则分裂当前段来扩展哈希表的容量后,转至步骤2.1)。
8.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,对基于混合DRAM-NVM内存的动态哈希表的查询的操作方法,包括以下步骤:
对于待查询的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待查询的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则返回目标元素的value;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,返回其value,若遍历所有的共享区域仍没有找到目标元素,则所查询的目标元素不在哈希表中。
9.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,对基于混合DRAM-NVM内存的动态哈希表进行删除的操作方法,包括以下步骤:
对于待删除的目标元素<key,value>,其中,key表示存储元素键值,value表示存储元素值;通过哈希函数计算待删除的目标元素的key所对应的段地址p1和桶地址p2,判断当前位置是否为目标元素,若是,则删除哈希单元里的目标元素;否则,遍历p2以后的连续的4个桶以及后备区域p3,直到找到目标元素,删除哈希单元里的目标元素,若遍历所有的共享区域仍没有找到目标元素,则代表查询的目标元素不在哈希表中,删除失败。
10.根据权利要求1所述的基于混合DRAM-NVM内存的动态哈希表操作方法,其特征在于,对基于混合DRAM-NVM内存的动态哈希表进行恢复的操作方法,包括以下步骤:
3.1)恢复基数树结构目录,搜集基数树的所有叶子节点,从左到右进行恢复,具体步骤为:
对于每个叶子结点,先取出最左边的段地址对应的局部深度1d和全局深度gd,计算段的引用计数r,再判断连续r个段地址中第一个段地址对应的1d与后续的段地址对应的1d是否相等,若不相等,则数据不一致,使1d不一致的段地址等于第一个段地址,重复上述过程进行迭代,直至遍历完基数树结构目录;其中,引用计数r=2gd-ld,为指向同一个段的段地址的数量;
3.2)重建数组结构目录,
获取基数树结构目录的全局深度gd,构建相应大小的数组结构目录,根据基数树结构目录中每个段地址在数组结构目录的起始位置和所得引用计数r,将基数树结构目录存储的段地址填入相应的数组结构目录中,完成动态哈希表的恢复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010172848.8A CN111459846B (zh) | 2020-03-12 | 2020-03-12 | 一种基于混合dram-nvm内存的动态哈希表操作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010172848.8A CN111459846B (zh) | 2020-03-12 | 2020-03-12 | 一种基于混合dram-nvm内存的动态哈希表操作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111459846A true CN111459846A (zh) | 2020-07-28 |
CN111459846B CN111459846B (zh) | 2022-03-18 |
Family
ID=71682833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010172848.8A Active CN111459846B (zh) | 2020-03-12 | 2020-03-12 | 一种基于混合dram-nvm内存的动态哈希表操作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111459846B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112131032A (zh) * | 2020-08-28 | 2020-12-25 | 北京大学 | 一种基于混合内存系统的故障快速恢复方法 |
CN112181288A (zh) * | 2020-08-17 | 2021-01-05 | 厦门大学 | 一种非易失性存储介质的数据处理方法和计算机存储介质 |
CN112214805A (zh) * | 2020-10-15 | 2021-01-12 | 华中科技大学 | 基于混合dram-nvm内存的安全oram内存及其访问方法 |
CN112395213A (zh) * | 2020-11-18 | 2021-02-23 | 之江实验室 | 一种基于内存面向热点数据的aceh索引结构及方法 |
CN112612419A (zh) * | 2020-12-25 | 2021-04-06 | 西安交通大学 | Nvm的数据存储结构、存储方法、读取方法、设备及介质 |
CN112732725A (zh) * | 2021-01-22 | 2021-04-30 | 上海交通大学 | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 |
CN113342706A (zh) * | 2021-05-13 | 2021-09-03 | 武汉大学 | 一种基于非易失性内存的写优化可扩展哈希索引结构以及插入、刷新和删除方法 |
CN113434092A (zh) * | 2021-07-07 | 2021-09-24 | 中国人民解放军国防科技大学 | 一种基于混合dram-nvm内存的指纹识别方法 |
CN113505130A (zh) * | 2021-07-09 | 2021-10-15 | 中国科学院计算技术研究所 | 一种哈希表的处理方法 |
CN113961755A (zh) * | 2021-09-08 | 2022-01-21 | 南湖实验室 | 一种基于持久内存的图数据存储架构 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170091344A1 (en) * | 2015-09-25 | 2017-03-30 | International Business Machines Corporation | Stored data with temporal proximity analysis for very large scale data with very low built in latency |
CN107153707A (zh) * | 2017-05-12 | 2017-09-12 | 华中科技大学 | 一种针对非易失内存的哈希表构建方法及系统 |
CN109165321A (zh) * | 2018-07-28 | 2019-01-08 | 华中科技大学 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
CN109683811A (zh) * | 2018-11-22 | 2019-04-26 | 华中科技大学 | 一种混合内存键值对存储系统的请求处理方法 |
CN110134514A (zh) * | 2019-04-18 | 2019-08-16 | 华中科技大学 | 基于异构内存的可扩展内存对象存储系统 |
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
-
2020
- 2020-03-12 CN CN202010172848.8A patent/CN111459846B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170091344A1 (en) * | 2015-09-25 | 2017-03-30 | International Business Machines Corporation | Stored data with temporal proximity analysis for very large scale data with very low built in latency |
CN107153707A (zh) * | 2017-05-12 | 2017-09-12 | 华中科技大学 | 一种针对非易失内存的哈希表构建方法及系统 |
CN109165321A (zh) * | 2018-07-28 | 2019-01-08 | 华中科技大学 | 一种基于非易失内存的一致性哈希表构建方法和系统 |
CN109683811A (zh) * | 2018-11-22 | 2019-04-26 | 华中科技大学 | 一种混合内存键值对存储系统的请求处理方法 |
CN110134514A (zh) * | 2019-04-18 | 2019-08-16 | 华中科技大学 | 基于异构内存的可扩展内存对象存储系统 |
CN110413612A (zh) * | 2019-07-02 | 2019-11-05 | 华中科技大学 | 一种基于混合索引的混合内存性能优化方法及系统 |
Non-Patent Citations (1)
Title |
---|
MOONHYEON NAM: ""Write-Optimized Dynamic Hashing for persistent Memory"", 《17TH USENIX CONFERENCE ON FILE AND STORAGE TECHNOLOGIES》 * |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112181288A (zh) * | 2020-08-17 | 2021-01-05 | 厦门大学 | 一种非易失性存储介质的数据处理方法和计算机存储介质 |
CN112181288B (zh) * | 2020-08-17 | 2022-03-04 | 厦门大学 | 一种非易失性存储介质的数据处理方法和计算机存储介质 |
CN112131032B (zh) * | 2020-08-28 | 2022-02-11 | 北京大学 | 一种基于混合内存系统的故障快速恢复方法 |
CN112131032A (zh) * | 2020-08-28 | 2020-12-25 | 北京大学 | 一种基于混合内存系统的故障快速恢复方法 |
CN112214805A (zh) * | 2020-10-15 | 2021-01-12 | 华中科技大学 | 基于混合dram-nvm内存的安全oram内存及其访问方法 |
CN112214805B (zh) * | 2020-10-15 | 2024-02-02 | 华中科技大学 | 基于混合dram-nvm内存的安全oram内存及其访问方法 |
CN112395213A (zh) * | 2020-11-18 | 2021-02-23 | 之江实验室 | 一种基于内存面向热点数据的aceh索引结构及方法 |
CN112612419A (zh) * | 2020-12-25 | 2021-04-06 | 西安交通大学 | Nvm的数据存储结构、存储方法、读取方法、设备及介质 |
CN112612419B (zh) * | 2020-12-25 | 2022-10-25 | 西安交通大学 | Nvm的数据存储结构、存储方法、读取方法、设备及介质 |
CN112732725B (zh) * | 2021-01-22 | 2022-03-25 | 上海交通大学 | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 |
CN112732725A (zh) * | 2021-01-22 | 2021-04-30 | 上海交通大学 | 基于nvm混合内存的自适应前缀树构建方法及其系统、介质 |
CN113342706A (zh) * | 2021-05-13 | 2021-09-03 | 武汉大学 | 一种基于非易失性内存的写优化可扩展哈希索引结构以及插入、刷新和删除方法 |
CN113434092A (zh) * | 2021-07-07 | 2021-09-24 | 中国人民解放军国防科技大学 | 一种基于混合dram-nvm内存的指纹识别方法 |
CN113434092B (zh) * | 2021-07-07 | 2022-04-01 | 中国人民解放军国防科技大学 | 一种基于混合dram-nvm内存的指纹识别方法 |
CN113505130A (zh) * | 2021-07-09 | 2021-10-15 | 中国科学院计算技术研究所 | 一种哈希表的处理方法 |
CN113505130B (zh) * | 2021-07-09 | 2023-07-21 | 中国科学院计算技术研究所 | 一种哈希表的处理方法 |
CN113961755A (zh) * | 2021-09-08 | 2022-01-21 | 南湖实验室 | 一种基于持久内存的图数据存储架构 |
Also Published As
Publication number | Publication date |
---|---|
CN111459846B (zh) | 2022-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111459846B (zh) | 一种基于混合dram-nvm内存的动态哈希表操作方法 | |
CN107862064B (zh) | 一个基于nvm的高性能、可扩展的轻量级文件系统 | |
US11301379B2 (en) | Access request processing method and apparatus, and computer device | |
CN110825748B (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
JP5996088B2 (ja) | 暗号ハッシュ・データベース | |
JP6764359B2 (ja) | 重複除去dramメモリモジュール及びそのメモリ重複除去方法 | |
CN107784121B (zh) | 一种基于非易失内存的日志文件系统的小写优化方法 | |
WO2009033419A1 (fr) | Procédé de traitement de mise en antémémoire de données, système et dispositif de mise en antémémoire de données | |
US11030092B2 (en) | Access request processing method and apparatus, and computer system | |
CN111240588B (zh) | 一种持久性内存对象存储系统 | |
CN107544859B (zh) | 在混合内存系统上用来保证数据一致性的检查点方法 | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
JP6823734B2 (ja) | ソリッドステートディスクアクセス | |
CN113590612A (zh) | Dram-nvm混合索引结构的构建方法及操作方法 | |
CN112395213B (zh) | 一种基于内存面向热点数据的aceh索引结构及方法 | |
Chen et al. | Design of skiplist based key-value store on non-volatile memory | |
Hu et al. | Parallel multi-split extendible hashing for persistent memory | |
Zhang et al. | A write-efficient and consistent hashing scheme for non-volatile memory | |
CN111274456B (zh) | 基于nvm主存的数据索引方法及数据处理系统 | |
CN113342706A (zh) | 一种基于非易失性内存的写优化可扩展哈希索引结构以及插入、刷新和删除方法 | |
CN114296630A (zh) | 缓存存储器中重复数据删除指纹索引的更新 | |
Xiao et al. | Accelerating Persistent Hash Indexes via Reducing Negative Searches | |
CN115563026B (zh) | 一种映射表的重建方法及数据存储设备 | |
Huang et al. | Range Indexes on Non-Volatile Memory | |
Huang et al. | Hash Tables on Non-Volatile Memory |
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 |