[发明专利]基于SCM的Key-Value日志型本地存储方法有效
申请号: | 201710657877.1 | 申请日: | 2017-08-03 |
公开(公告)号: | CN107544756B | 公开(公告)日: | 2020-11-06 |
发明(设计)人: | 黄林鹏;朱燕民;沈艳艳;王振杰 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F3/06 | 分类号: | G06F3/06;G06F9/50 |
代理公司: | 上海汉声知识产权代理有限公司 31236 | 代理人: | 郭国中 |
地址: | 200240 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 scm key value 日志 本地 存储 方法 | ||
1.一种基于SCM的Key-Value日志型本地存储方法,其特征在于,包括如下步骤:
SCM内存划分步骤:将SCM内存以固定大小的页作为划分的基本单位,并对页面进行标号,对SCM内存进行按功能划分分区,划分为超级块区、检查点区、页管理区、静态哈希表区、数据存储区这五个不同的逻辑分区;在SCM内存的第一个页作为超级块区;将SCM内存的第二个页作为检查点区;页管理区可以看作是记录SCM每个内存页的统计信息的数组;将SCM内存的大小除以每个页面的大小,从而得出整个SCM内存的页面总数,即页管理区的记录总数;对于每个页面都有一个记录,记录的大小乘以记录的总数,可以得到页记录区的大小;最后,计算出页管理区所需要的页面数n1,得到整个页管理区的分布;根据整个SCM内存的大小和预估的每个Key-Value对象的平均大小,计算出SCM能够容纳的Key-Value对象的总数目;根据Key-Value对象的总数目,计算出哈希表的大小;将哈希表的大小向上取成2的N次幂,得到哈希表所需要的页面总数n3;从而,最终确定哈希表的分区位置;
多层次内存管理步骤:构建三层内存管理模块,三层内存管理模块包括第一层内存管理模块、第二层内存管理模块、第三层内存管理模块,在不同层面上对内存进行管理,实现页面的动态分配和回收;第一层内存管理模块对整个SCM页面进行管理,所有工作线程共享第一层内存管理模块;第二次内存管理模块提供SCM日志语义,每个工作线程有自己的第二层内存管理模块;第三层内存管理模块提供Key-Value对象分配操作,每个工作线程有自己的第三层内存管理模块;
高并发哈希表构建步骤:使用静态哈希表来索引key-value对象,使用动态分配的数组存放哈希冲突的元素;
所述多层次内存管理步骤中:第一层内存管理模块对整个SCM空间以页为单位进行内存管理,页的大小在内存划分步骤中确定,对上层提供分配或释放页的接口;第二层内存管理模块以日志为管理单元,为每个日志分配页空间,对上层提供新建或释放日志的接口;第三层内存管理模块为对象空间分配器,为每个数据项分配空间;
所述第一层内存管理模块对整个SCM空间以页为单位进行内存管理,把所有空闲页组成一个单向链表;分配页时,从链表头取得一个页面;释放页时,把页面插入到链表尾部;通过这种方式,能够使SCM的所有页面的分配次数大致相同;这一层的页面被所有线程共享,需要采用一种同步方法来保障数据的一致性;对于单向链表,采用Compare-And-Swap的原子指令来完成,以减少使用锁的开销;
所述第二层内存管理模块的每个线程拥有独立的日志,这样就消除了读写日志时的同步;同时固定每个日志的大小为页面的大小;
所述第三层内存管理模块进行内存分配,内存分配通过移动日志尾部指针并记录相应页表项的有效数据大小来完成;当日志空间不足时,向第二层分配器请求新的日志,在新的日志空间中分配内存;释放内存更新日志中剩余有效数据的大小,不被立即重新使用被释放的空间;通过这种方式,实现了每个日志的均匀写;
所述第三层内存管理模块采用垃圾回收算法使用benefit/cost来选择要清理的旧日志,使用最小堆记录有效数据的日志的顺序;当SCM剩余空间不足时,垃圾回收线程把前n个含有最少有效数据的日志合并到新的日志中,并释放原来的日志空间,n为自然数;
所述静态哈希表的一个桶大小是64位,其中低48位记录的动态分配的数组或key-value对象在SCM上的物理地址,第47~56位记录这个桶中有多少个key-value对象,最高位记录是否有线程正在修改这个桶中的元素;哈希表能够允许单个线程修改某一个桶中元素的同时,允许多个线程进行读取这个能中的元素,并且对每个桶的操作可以独立进行;用来处理冲突的数组中的每个元素的大小是64位,其中低48位存放的key-value对象在SCM中的物理地址,高16位存放的key的第二个哈希值。
2.根据权利要求1所述的基于SCM的Key-Value日志型本地存储方法,其特征在于,所述超级块区记录了这个内存区域的分区情况;检查点区记录Key-Value系统的一致性情况;页管理区记录每个内存页的使用情况;静态哈希表是预先分配的哈希表;数据存储区记录了整个系统的数据信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710657877.1/1.html,转载请声明来源钻瓜专利网。