一种基于非易失内存的时序数据库日志存储方法及系统技术方案

技术编号:38531938 阅读:11 留言:0更新日期:2023-08-19 17:04
本发明专利技术公开了一种基于非易失内存的时序数据库日志存储方法及系统,属于时序数据库日志存储领域,包括:S1、根据时序数据库中事务访问的数据计算当前事务日志的LSN;S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;S3、将当前日志压缩后按照非易失内存NVM最小写入单元对齐;S4、针对每个线程,以流水线形式将日志并发写入NVM。本发明专利技术克服了现有基于NVM的数据库日志系统未考虑时序数据特征且大量依赖内存屏障的缺陷,能够改进时序数据库日志性能,从而提升时序数据库吞吐量,缩短故障恢复时间,本发明专利技术的方法可用作各类时序数据库通用的日志系统。类时序数据库通用的日志系统。类时序数据库通用的日志系统。

【技术实现步骤摘要】
一种基于非易失内存的时序数据库日志存储方法及系统


[0001]本专利技术属于时序数据库日志存储
,更具体地,涉及一种基于非易失内存的时序数据库日志存储方法及系统。

技术介绍

[0002]随着信息技术和物联网技术的发展,社交数据、交通流量、电商销售和服务器监控等时序数据呈现爆炸式增长。为了满足时序数据实时处理需求,时序数据库大多采用基于日志结构合并树(Log

Structured Merge Tree, LSM

Tree)的存储结构,在内存(Dynamic Random AccessMemory, DRAM)中将时序数据的随机写转化为顺序写,以提升I/O性能和数据库吞吐量。然而,由于DRAM的断电易失特性,一旦系统发生故障,DRAM中存储的数据将全部丢失。为了实现数据的持久化存储,时序数据库通常采用写前日志(Write

Ahead Log, WAL),在事务提交之前,首先生成对应的日志,在事务的日志持久化存储后,再完成事务提交。当系统发生故障时,时序数据库可以通过WAL来对数据进行恢复,从而避免数据丢失。从事务的执行过程可以看出,日志的写入性能直接影响了数据库的吞吐量,如何通过优化日志性能来提升时序数据库的吞吐量,是设计时序数据库日志系统及持久化方法时需要考虑的。
[0003]传统的关系型数据库为了保证事务的原子性、一致性、隔离性和持久性(Atomicity, Consistency, Isolation, and Durability, ACID),需要记录事务识别号(TransactionIdentity Document, TID)和每条日志的编号(Log Sequence Number, LSN),以确保WAL持久化存储的顺序与事务执行顺序保持一致,从而在故障恢复时,能够按照LSN顺序执行故障恢复,将数据库恢复一致性状态。时序数据库为了保证时序数据的写入性能,通常不支持ACID,但仍然需要保证WAL记录的顺序与事务逻辑上的执行顺序保持一致,比如InfluxDB2.x版本不支持对数据直接进行更新,只能通过先删除数据,再重新写入,来变相实现数据更新,如果日志不能反映数据删除和插入的顺序,则无法使用WAL将时序数据库恢复一致性状态。
[0004]现有数据库大多采用中心化的日志结构,很大程度上制约了数据库的性能和扩展能力。有文献研究指出,在Shore数据库存储引擎上,日志和缓存管理至少产生了50%的开销。为了提升WAL的性能,大量研究基于固态硬盘(Solid State Disk, SSD)和机械硬盘(Hard Disk Drive, HDD)等块存储介质,设计了去中心化的日志结构,来提升WAL性能和数据库扩展能力。然而,受限于SSD/HDD的I/O性能,WAL仍然是影响数据库吞吐量的重要原因之一。
[0005]近年来,有研究基于非易失内存(Non

Volatile Memory, NVM)来提升WAL的I/O性能,这些研究主要分为两类:一类采用DRAM+NVM+SSD/HDD的三层架构,将WAL存储在NVM上,从而提升数据库的吞吐量;比如,有研究在在NVM上使用硬件日志来提升事务持久化存储的可靠性,然而,这将产生额外的开销。另一类设计了DRAM+NVM的两层架构,将整个数据库存储系统放在NVM上,DRAM作为缓存;比如,有研究基于DRAM+NVM两层架构设计了无WAL的存储
引擎,然而,NVM的随机写性能与顺序写性能相差2至7倍,这种方法无法发挥NVM的最大性能;并且也有研究证明如果不重新设计软件的I/O接口,直接使用NVM替代SSD/HDD,将导致更大的系统开销。
[0006]并且,现有的基于非易失内存NVM来提升WAL的方法都需要大量使用内存屏障来保证日志写入NVM的正确性,并且都是针对关系型数据库的WAL进行优化,未考虑时序数据的特征,无法直接应用于时序数据库;事实上,时序数据事务与传统关系型数据库的在线事务处理(Online Transaction Processing, OLTP)有很大不同,在现实场景中,大部分时序数据库事务是数据写入事务,并且数据更新事务之间的依赖关系很少,这些特征是设计时序数据库日志系统时不可忽略的因素。虽然现有的时序数据库对WAL进行了一定的优化,但是这些优化都是针对SSD/HDD等块存储介质,并未利用NVM的特点及性能。

技术实现思路

[0007]针对现有技术的缺陷和改进需求,本专利技术提供了一种基于非易失内存的时序数据库日志存储方法及系统,其目的在于实现时序数据库日志在非易失内存上的持久化存储,并提升时序数据库的性能。
[0008]为实现上述目的,按照本专利技术的第一方面,提供了一种基于非易失内存的时序数据库日志存储方法,包括:S1、根据时序数据库中事务访问的数据计算当前事务日志的LSN;S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;S3、将当前日志压缩后按照非易失内存NVM最小写入单元对齐;S4、针对每个线程,以流水线形式将日志并发写入NVM;其中,S1包括: S11、对事务访问数据中的时间戳字段进行扩展,得到扩展时间戳,所述扩展时间戳从高位到低位包括:数据锁、墓碑标记及数据修改时间戳UTS,数据锁用于实现事务的并发控制,墓碑标记用于记录本条数据是否被删除;S12、用所述UTS设计LSN计算协议:每条新插入数据的UTS初始化为0;写入事务日志的LSN为0;更新事务日志的;表示当前事务访问数据集合中UTS的最大值;表示中任一数据点的UTS;事务提交前,将所有被修改数据的UTS原子更新为当前事务日志的LSN。
[0009]进一步地,S1中,采用所述LSN计算协议计算更新事务日志的LSN,包括:第一步,读取当前事务需要访问数据的扩展时间戳,若访问的当前数据的数据锁为1,则等待;否则,计算需要访问数据中所有扩展时间戳的最大值,并计算当前事务的LSN,;第二步,再次读取需要访问数据的数据锁,若数据锁为0,则将数据锁置1;否则,终止当前事务,重新开始执行当前事务,直至此时的数据锁为0,并将锁位置1;
第三步,比较需要访问数据此时的UTS是否与第一步读取的对应数据的UTS相同,若不同,终止当前事务,重新开始执行当前事务,直至数据此时的UTS与第一步读取的对应数据的UTS相同,将需要访问数据的UTS修改为当前事务的LSN,并将数据锁置0;针对删除操作,将墓碑标记置1。
[0010]进一步地,S4包括:S41、针对每个线程,维护n个日志队列,逻辑上构成循环链表,初始化所有日志队列为空;S42、事务提交时,若事务日志的LSN=0,则将事务日志直接写入当前队列的缓冲区,继续处理后续事务日志;否则,将事务日志写入当前队列后,关闭当前队列,使后续事务日志写入下一个日志队列;S43、事务日志按照S42中原则循环写入队列,当队列关闭时,将后续事务日志写入队列;S44、将写入队列的日志以流水线形式写入NVM。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于非易失内存的时序数据库日志存储方法,其特征在于,包括:S1、根据时序数据库中事务访问的数据计算当前事务日志的LSN;S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;S3、将当前日志压缩后按照非易失内存NVM最小写入单元对齐;S4、针对每个线程,以流水线形式将日志并发写入NVM;其中,S1包括:S11、对事务访问数据中的时间戳字段进行扩展,得到扩展时间戳,所述扩展时间戳从高位到低位包括:数据锁、墓碑标记及数据修改时间戳UTS,数据锁用于实现事务的并发控制,墓碑标记用于记录本条数据是否被删除;S12、用所述UTS设计LSN计算协议:每条新插入数据的UTS初始化为0;写入事务日志的LSN为0;更新事务日志的;表示当前事务访问数据集合中UTS的最大值;表示中任一数据点的UTS;事务提交前,将所有被修改数据的UTS原子更新为当前事务日志的LSN。2.根据权利要求1所述的方法,其特征在于,S1中,采用所述LSN计算协议计算更新事务日志的LSN,包括:第一步,读取当前事务需要访问数据的扩展时间戳,若访问的当前数据的数据锁为1,则等待;否则,计算需要访问数据中所有扩展时间戳的最大值,并计算当前事务的LSN,;第二步,再次读取需要访问数据的数据锁,若数据锁为0,则将数据锁置1;否则,终止当前事务,重新开始执行当前事务,直至此时的数据锁为0,并将锁位置1;第三步,比较需要访问数据此时的UTS是否与第一步读取的对应数据的UTS相同,若不同,终止当前事务,重新开始执行当前事务,直至数据此时的UTS与第一步读取的对应数据的UTS相同,将需要访问数据的UTS修改为当前事务的LSN,并将数据锁置0;针对删除操作,将墓碑标记置1。3.根据权利要求1或2所述的方法,其特征在于,S4包括:S41、针对每个线程,维护n个日志队列,逻辑上构成循环链表,初始化所有日志队列为空;S42、事务提交时,若事务日志的LSN=0,则将事务日志直接写入当前队列的缓冲区,继续处理后续事务日志;否则,将事务日志写入当前队列后,关闭当前队列,使后续事务日志写入下一个日志队列;S43、事务日志按照S42中原则循环写入队列,当队列关闭时,将后续事务日志写入队列;S44、将写入队列的日志以流水线形式写入NVM。
4.根据权利要求3所述的方法,其特征在于,所述S44包括:日志线程从队列至依次处理日志,采用CLWB指令将当前队列中的写入事务日志写入NVM;若当前队列中存在更新事务日志,则先进行线程同步,再对所述更新事务日志使用内存屏障;在当前队列中内存屏障执行的同时,日志线程将下一队列中的写入事务日志并发写入NVM;若下一队列中存在更新事务日志,先进行线程同步,再对所述更新事务日志使用内存屏障,并且使当前队列中的更新事务日志和下一队列中的更新事务日志按先后顺序写入NVM。5.根据权利要求1所述的方法,其特征在于,S2中,引入线程快照根据计算得到的日志LSN进行线程同步,包括:S21、构建线程快照的数据结构,所述数据结构包括m
×
n的日志数量数组和LSN数组;其中,m表示日志线程数,n表示每...

【专利技术属性】
技术研发人员:郑渤龙郜勇勇闫凌森万静意董茂科高云君陈璐
申请(专利权)人:华中科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1