【技术实现步骤摘要】
面向分布式数据库的持久内存数据存储方法及系统
[0001]本专利技术涉及数据存储
,具体地说是面向分布式数据库的持久内存数据存储方法及系统。
技术介绍
[0002]数据库系统是当代网络服务的重要载体,广泛应用于电子商务、金融、浏览器搜索等在线用户服务场景。在当前主流的内存
‑
磁盘存储架构下,数据库系统可同时受益于内存的高读写性能与磁盘的持久性,但也同时受制于内存的易失性与磁盘的低性能,面临性能与持久性的权衡。随着数据库系统在线处理需求增大,集群内单个服务器节点每秒处理的请求数高达数十万甚至更多,每次请求都伴随几十字节至几十KB不等的持久设备I/O,加之系统为了维护持久存储内容而定期进行压缩、副本复制等操作,导致现有的持久设备性能对系统吞吐量产生了明显的限制,带来了严峻的挑战。
[0003]持久内存(Persistent Memory,PMem)是一种新型的存储介质,其既具备低读写延迟与字节寻址特性,又可以提供持久存储的特性,性能介于内存和磁盘之间,是弥补内存与磁盘缺陷的理想存储设备。当前持久内 ...
【技术保护点】
【技术特征摘要】
1.一种面向分布式数据库的持久内存数据存储方法,其特征在于,应用于存储引擎和多个存取器,所述存储引擎包括DRAM和PMem,所述DRAM用于对PMem内的内容进行映射,同时在元信息中记录已保存的数据与分块数量,所述PMem的存储空间中划分有多个分块,每个分块划分为等量的线程访问区,所述存取器作为内存对象,对应一个访问线程,每个存取器访问同一个编号的多个线程访问区;所述方法包括如下步骤:通过存储引擎将持久数据以分块对齐的方式顺序存储在PMem中,按照分块对齐大小将分块依次加载到DRAM的数据映射区,并在元信息中记录已保存的持久数据和分块数量;在DRAM中通过列表结构记录已创建的分块;对PMem中线程访问区内的数据条目进行有效性判定,对于通过判定的数据条目,对所述数据条目进行键到地址的映射,在DRAM中通过索引记录每个数据条目对应的键到地址的映射,以支持通过搜索树结构进行查询;将PMem上已释放的空闲数据条目组成为隐式链表freelist,并对数据条目进行操作管理操作,所述操作管理包括分配、释放和合并;创建存取器实例,通过存储器实例接收上层应用发起的读写请求,基于所述读写请求、通过存储引擎为存取器分配一个编号,所述编号对应于PMem中存取器能够改写的线程访问区,所述线程访问区存储有数据条目和元信息,并基于所述读写请求执行数据操作,所述数据操作包括读操作、写操作和删除操作,所述写操作和删除操作受限于线程访问区的编号,只能对相同编号内的数据条目进行写操作或删除操作,所述读操作不受限。2.根据权利要求1所述的面向分布式数据库的持久内存数据存储方法,其特征在于,每个线程访问区用于存储数据条目以及一个锁定标识和一个freelist局部入口指针;所述数据条目在PMem中以8字节进行对齐,包括8字节的header字段、中间的数据字段以及末尾8字节的footer字段,header字段和footer字段均用于记录所述数据条目的长度及有效标识,当header与footer不一致时说明所述数据条目失效;所述锁定标识保存于对应线程访问区的起始位置,用于标记对应线程访问区是否有存取器正在进行改写,所述锁定标识以线程访问区为单位,多个存取器能够被分配为相同编号,对不同线程访问区内数据进行改写;每个线程访问区中保存有属于所述线程访问区的首个空闲数据条目地址,所述首个空闲数据条目地址作为freelist的局部入口,以便将新释放的空闲数据条目就近插入到所述线程访问区的freelist中。3.根据权利要求2所述的面向分布式数据库的持久内存数据存储方法,其特征在于,对线程访问区内的数据条目逐条判定有效性,包括如下步骤:验证空闲数据条目的freelist前后指针有效性:如果无效则说明指向的数据条目在合并时尚未更新指针即断电,则直接修改为目标数据条目的起始地址;存在两个连续的空闲数据条目:说明所述数据条目在分配后尚未完成写入即断电,舍弃所述数据条目的内容,并对靠后的数据条目进行向前合并;验证header与footer一致性:由于header在数据条目中相对footer先更新,并且更新header的时机是完成键值写入或准备释放数据条目,恢复时均以header的状态为准,如果header表明所述数据条目为空闲,说明未完成释放,继续释放所述数据条目;如果所述数据
条目已被分配,则更新footer并视为有效数据条目、照常加入索引;验证当前数据条目的key是否已存在:根据插入操作中交替更改新旧数据条目header的机制,在旧数据条目完成释放之前必定处于header与footer不一致的状态,并且header标记为已释放,恢复时可根据所述验证header与footer一致性的规则完成释放操作,对于旧数据条目的header未标记释放即断电的情形,此时新数据条目的footer尚未修改,因此恢复时以footer尚未修改的数据条目为准,删除另一个。4.根据权利要求2所述的面向分布式数据库的持久内存数据存储方法,其特征在于,所述空闲数据条目的数据字段填充为前后指针,与其他空闲条目组织为freelist,所述空闲数据条目的前后指针保存在header之后;对空闲数据条目的分配操作为:从freelist中遍历选取一个长度合适的条目,根据需要进行截取,修改分配标识与前后条目的指针后交由存取器写入数据;对空闲数据条目的释放操作为:直接修改分配标识、插入freelist并添加前后指针;对空闲数据条目的合并操作为:合并物理地址相邻的两个空闲块,在条目释放后触发;其中,对空闲数据条目进行再分配时按照前后指针进行遍历,同一个编号对应线程访问区内的所有空闲数据条目组成同一个freelist,提供给同一个存取器进行访问;不同编号对应线程访问区之间的freelist不进行交叠,以确保线程隔离。5.根据权利要求1
‑
4任一项所述的面向分布式数据库的持久内存数据存储方法,其特征在于,存取器执行写操作时,其访问存储引擎内对应编号的线程访问区,从freelist中遍历获取合适长度的空闲数据条目、切取多余部分重新加回freelist,将键值对内容写入数据条目,并标记长度与分配标识、修改freelist前驱与后继元素的指针,最后将新数据条目插入索引中;存取器执行读操作时,直接从索引中查找目标键值对在PMem的数据条目地址,然后从PMem上读取,若查找失败则说明键值对不存在;由于线程访问区按地址对齐,可直接通过线程访问区地址确定数据条目所属的编号,在修改或删除旧值之前可先通过读操作确定编号,再分配编号给存取器执行操作;当已知编号的存取器删除对应区的键值对时,直接将数据条目标记为空闲,将局部入口插入freelist中,并从索引中移除键值对;当释放操作导致两个在物理地址上相邻的数据条目空闲时,将这两个数据条目合并为一个空闲条目,并相应修改前后指针。6.一种面向分布式数据库的持久内存数据存储系统,其特征在于,应用于存储引擎和多个存取器,用于通过如权利要求1
‑
5任一项所述的面向分布式数据库的持久内存数据存储方法实现持久内存数据的存储;所述系统包括:数据存储模块,所述数据存储模块用于通过存储引擎将持久数据以分块对齐的方式顺序存储在PMem中,按照分块对齐大小将分块依次加载到DRAM的数据映射区,并在元信息中记录...
【专利技术属性】
技术研发人员:赵衎衎,陈磊,
申请(专利权)人:浪潮软件集团有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。