掌桥专利:专业的专利平台
掌桥专利
首页

基于NVM和B+树减少LSM写阻塞和读写放大的方法

文献发布时间:2023-06-19 19:30:30


基于NVM和B+树减少LSM写阻塞和读写放大的方法

技术领域

本发明涉及的是一种信息处理领域的技术,具体是一种基于非挥发性记忆体(NVM)和B+树减少日志结构化合并树(LSM)写阻塞和读写放大的方法。

背景技术

现代NoSql存储系统中广泛采用LSM异地更新策略的索引结构,将对于磁盘的随机写转化成顺序写,极大的提高数据写入性能。但现有LSM架构的L0层数据压实过程以sstable表为单位,这种sstable表是由系统直接从只读内存表刷新到磁盘过来的,一个表涉及的范围波动非常大,最坏情况下会与LSM结构L1层上所有的sstable表存在数据交集。这会导致一次数据压实引入大量的磁盘I/O,使得系统无法及时监测到只读内存表的刷新而导致系统出现写阻塞情况出现。

经过对现有技术的检索发现,中国专利文献号CN111475508A公开日20200731,公开一种优化叶子节点合并操作的高效索引方法,首先将索引分成存储在DRAM中的缓冲B树和存储在NVM中的基础B树。在索引执行写操作的过程中,首先写入缓冲B树的日志文件里,再修改缓冲B树;当所述缓冲B树的容量超过阈值,借助基础B树叶子节点结构设计,将缓冲B树通过原地合并操作合入NVM上的基础B树,并通过WBINVD指令高效地将脏数据持久化到NVM。当原地合并操作完成后,清空缓存B树以及NVM上的日志文件,完成对所述写操作的索引过程。但该现有技术在LSM数据压实时其无法选择叶子节点进行,导致无法将叶子节点直接删除,需要从根节点定位到该叶子节点的父亲节点,而后才能将该叶子节点从这棵B树删除,使得索引效率较低效果较差。

发明内容

本发明针对现有技术存在的上述不足,提出一种基于NVM和B+树减少LSM写阻塞和读写放大的方法,具体为LSM结构中L0层数据压实时以B+树的叶子节点为单位,L0层数据压实叶子节点选择以叶子节点的数据占比率为依据。利用Intel的傲腾持久内存具有数据断电不丢失、字节寻址、高速读取速率等特性,将B+叶子节点设置为256字节的倍数并开启多个线程按范围读取只读内存表并插入到位于NVM的B+树叶子节点上,减少LSM写阻塞和提升吞吐量。

本发明是通过以下技术方案实现的:

本发明涉及一种基于NVM和B+树减少LSM写阻塞和读写放大的方法,初始情况下应用将键值对数据写入处于动态内存的内存表中,当内存表存满后设置其权限为只读并将其写入叶子节点位于NVM的B+树上并通过B+树管理,同时在动态内存中创建一个新的内存表。

优选地,当内存表存满且待系统空闲时,多线程地将只读内存表写入叶子节点位于NVM的B+树上。

所述的只读内存表和内存表的数据完全存储在DRAM上。

所述的B+树包括:位于DRAM上的内部节点和位于NVM的叶子节点,其中:包含间接索引和数据比率的叶子节点大小为256字节倍数;

当内存表已写满且只读内存表尚未写入B+树时,应用直接将键值对数据写入位于NVM的B+树,即直接访问;由于此时无法将内存表设置为只读,系统会阻塞;故调整应用直接将键值对数据写入到B+树来缓解阻塞。

当NVM空间利用率大于一半时,对L0层数据进行数据压实,具体为:以B+树的叶子节点为单位,以叶子节点数据占比率为选择依据,优先选择数据占比率高的叶子节点进行数据压实,实现控制一次数据压实过程引入的数据量和减少B+树分裂情况的出现。

技术效果

本发明通过LSM结构L0层数据压实以B+树叶子节点为单位,而B+树叶子节点选择以数据占比率为依据,通过设计大根堆中元素结构包含指向叶子节点和指向叶子节点父节点的指针,允许直接将某个叶子节点从B+树删除。与现有技术相比,本发明控制每次数据压实涉及的数据范围,减少LSM系统写阻塞情况出现;然后选择数据占比率大的叶子节点,减少了B+树分裂情况的出现。

附图说明

图1为本发明原理图;

图2为本发明流程图;

图3为实施例中L0层上基于B+树的数据存储结构图;

图4为大根堆工作原理图。

具体实施方式

如图1所示,为本实施例涉及一种基于NVM和B+树减少LSM写阻塞和读写放大的方法,包括以下步骤:

步骤1、应用将数据写入处于动态内存的内存表中,当内存表存满后设置其权限为只读,并在系统空闲时以多线程方式将只读内存表写入到叶子节点位于NVM的B+树上,实现将L0层数据完全存储在NVM上并通过B+树管理;

如图3所示,所述的B+树包括:位于DRAM上的内部节点和位于NVM的叶子节点,其中:包含间接索引和数据比率的叶子节点大小为256字节倍数。

步骤2、当系统出现内存表满而只读内存表还未写入到到B+树的情况时,调整应用直接将数据写入到叶子节点位于NVM的B+树上,即实现直接访问,也减少了日志上的开销。

步骤3、以B+树的叶子节点为单位对L0层数据进行数据压实,即在叶子节点选择时以叶子节点数据占比率为选择依据,优先选择数据占比率高的叶子节点进行数据压实,具体包括:

3.1)L0层数据压实开始时扫描B+树叶子节点构建叶子数据占比率大根堆;

所述的大根堆包括:数据占比率、指向叶子节点的指针和指向叶子节点父节点的指针;

3.2)根据数据占比率在大根堆中选择数据占比率最大的叶子节点,即堆顶元素;

3.2)删除堆顶元素叶子节点的父节点中指向当前叶子节点的指针,并通过父节点找到叶子节点的左兄弟节点,将当前叶子节点的左兄弟节点的尾部指针指向为当前叶子节点的尾部指针所指向的叶子节点;

3.3)对步骤3.2中的堆顶元素该叶子节点进行数据压实,即堆顶元素指向的叶子节点,选择L1层与该叶子节点数据存在范围交集的数据表,将存在范围交集的叶子节点数据和数据表数据合并成全局有序的数据表,删除重复无效数据并在数据压实过程完成后释放叶子节点占有的NVM空间。

本发明控制了每次数据压实引入的范围,减少了一次数据压实的时间。而为了减少B+树分裂的开销,提出了基于数据占比率的叶子节点选择策略,即优先选择数据多的叶子节点进行数据压实。同时为了保证直接选择叶子节点可行,设计了数据占比率大根堆的堆元素结构,保存了指向每个叶子节点的指针和指向叶子节点父亲节点的指针,允许直接将叶子节点从B+树里删除。

与传统LSM-tree架构相比,本发明能够实现更快的查询速度:L0层存储在NVM上,而NVM的大容量和接近内存的读写速率使得系统对于应用的查询请求反馈更快,提高系统的吞吐量;显著减少写阻塞情况出现:更精细化的L0层数据压实策略,每次L0数据压实时控制为B+树的一个叶子节点,减少数据压实引入的数据量和占据时间。以便及时将只读内存表刷新到NVM的B+树上,不阻塞系统;显著减少LSM存储引擎的读写放大,提升磁盘空间的利用率:L0数据基于B+树管理后全局有序,将在L0层面上删除部分冗余数据,同时因为NVM的大容量,允许在L0层面上保存更多数据,减少LSM的层数。

此外,本发明可承受负载更高:在插入负载特别高导致只读内存表未及时刷新的情况下,允许将数据直接写入叶子节点位于NVM的B+树上,保证系统正常工作;日志开销更低:NVM具有持久性,数据直接插入到NVM上可以消除日志开销,使得对于应用的请求反馈更快,提高系统的吞吐量;提高NVM数据空间利用率:NVM内部读写单元为256字节,本发明设置叶子节点大小为256字节的倍数并按叶子节点块为单位进行数据压实,提高对于NVM的空间利用率;内存上只读内存表的刷新速度更快:只读内存表直接会被写入到NVM中而不是磁盘上,NVM的数据写入速度高于磁盘几个量级,更快的刷新允许系统将空闲的CPU进行磁盘上的数据压实,提高系统并发量。

上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。

相关技术
  • 一种基于NVM的LSM树的存储结构及其数据存储方法
  • 一种基于持久性内存B+树索引的读写性能优化方法
技术分类

06120115933817