CN116595012B - 一种基于非易失内存的时序数据库日志存储方法及系统 - Google Patents

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

Info

Publication number
CN116595012B
CN116595012B CN202310868838.1A CN202310868838A CN116595012B CN 116595012 B CN116595012 B CN 116595012B CN 202310868838 A CN202310868838 A CN 202310868838A CN 116595012 B CN116595012 B CN 116595012B
Authority
CN
China
Prior art keywords
log
data
current
transaction
lsn
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.)
Active
Application number
CN202310868838.1A
Other languages
English (en)
Other versions
CN116595012A (zh
Inventor
郑渤龙
郜勇勇
闫凌森
万静意
董茂科
高云君
陈璐
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN202310868838.1A priority Critical patent/CN116595012B/zh
Publication of CN116595012A publication Critical patent/CN116595012A/zh
Application granted granted Critical
Publication of CN116595012B publication Critical patent/CN116595012B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/235Update request formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

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

Description

一种基于非易失内存的时序数据库日志存储方法及系统
技术领域
本发明属于时序数据库日志存储技术领域,更具体地,涉及一种基于非易失内存的时序数据库日志存储方法及系统。
背景技术
随着信息技术和物联网技术的发展,社交数据、交通流量、电商销售和服务器监控等时序数据呈现爆炸式增长。为了满足时序数据实时处理需求,时序数据库大多采用基于日志结构合并树(Log-Structured Merge Tree, LSM-Tree)的存储结构,在内存(DynamicRandom AccessMemory, DRAM)中将时序数据的随机写转化为顺序写,以提升I/O性能和数据库吞吐量。然而,由于DRAM的断电易失特性,一旦系统发生故障,DRAM中存储的数据将全部丢失。为了实现数据的持久化存储,时序数据库通常采用写前日志(Write-Ahead Log,WAL),在事务提交之前,首先生成对应的日志,在事务的日志持久化存储后,再完成事务提交。当系统发生故障时,时序数据库可以通过WAL来对数据进行恢复,从而避免数据丢失。从事务的执行过程可以看出,日志的写入性能直接影响了数据库的吞吐量,如何通过优化日志性能来提升时序数据库的吞吐量,是设计时序数据库日志系统及持久化方法时需要考虑的。
传统的关系型数据库为了保证事务的原子性、一致性、隔离性和持久性(Atomicity, Consistency, Isolation, and Durability, ACID),需要记录事务识别号(TransactionIdentity Document, TID)和每条日志的编号(Log Sequence Number,LSN),以确保WAL持久化存储的顺序与事务执行顺序保持一致,从而在故障恢复时,能够按照LSN顺序执行故障恢复,将数据库恢复一致性状态。时序数据库为了保证时序数据的写入性能,通常不支持ACID,但仍然需要保证WAL记录的顺序与事务逻辑上的执行顺序保持一致,比如InfluxDB2.x版本不支持对数据直接进行更新,只能通过先删除数据,再重新写入,来变相实现数据更新,如果日志不能反映数据删除和插入的顺序,则无法使用WAL将时序数据库恢复一致性状态。
现有数据库大多采用中心化的日志结构,很大程度上制约了数据库的性能和扩展能力。有文献研究指出,在Shore数据库存储引擎上,日志和缓存管理至少产生了50%的开销。为了提升WAL的性能,大量研究基于固态硬盘(Solid State Disk, SSD)和机械硬盘(Hard Disk Drive, HDD)等块存储介质,设计了去中心化的日志结构,来提升WAL性能和数据库扩展能力。然而,受限于SSD/HDD的I/O性能,WAL仍然是影响数据库吞吐量的重要原因之一。
近年来,有研究基于非易失内存(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,将导致更大的系统开销。
并且,现有的基于非易失内存NVM来提升WAL的方法都需要大量使用内存屏障来保证日志写入NVM的正确性,并且都是针对关系型数据库的WAL进行优化,未考虑时序数据的特征,无法直接应用于时序数据库;事实上,时序数据事务与传统关系型数据库的在线事务处理(Online Transaction Processing, OLTP)有很大不同,在现实场景中,大部分时序数据库事务是数据写入事务,并且数据更新事务之间的依赖关系很少,这些特征是设计时序数据库日志系统时不可忽略的因素。虽然现有的时序数据库对WAL进行了一定的优化,但是这些优化都是针对SSD/HDD等块存储介质,并未利用NVM的特点及性能。
发明内容
针对现有技术的缺陷和改进需求,本发明提供了一种基于非易失内存的时序数据库日志存储方法及系统,其目的在于实现时序数据库日志在非易失内存上的持久化存储,并提升时序数据库的性能。
为实现上述目的,按照本发明的第一方面,提供了一种基于非易失内存的时序数据库日志存储方法,包括:
S1、根据时序数据库中事务访问的数据计算当前事务日志的LSN;
S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;
S3、将当前日志压缩后按照非易失内存NVM最小写入单元对齐;
S4、针对每个线程,以流水线形式将日志并发写入NVM;
其中,S1包括:
S11、对事务访问数据中的时间戳字段进行扩展,得到扩展时间戳,所述扩展时间戳从高位到低位包括:数据锁、墓碑标记及数据修改时间戳UTS,数据锁用于实现事务的并发控制,墓碑标记用于记录本条数据是否被删除;
S12、用所述UTS设计LSN计算协议:
每条新插入数据的UTS初始化为0;
写入事务日志的LSN为0;
更新事务日志的;/>表示当前事务访问数据集合/>中UTS的最大值;/>表示/>中任一数据点/>的UTS;
事务提交前,将所有被修改数据的UTS原子更新为当前事务日志的LSN。
进一步地,S1中,采用所述LSN计算协议计算更新事务日志的LSN,包括:
第一步,读取当前事务需要访问数据的扩展时间戳,若访问的当前数据的数据锁为1,则等待;否则,计算需要访问数据中所有扩展时间戳的最大值,并计算当前事务的LSN,
第二步,再次读取需要访问数据的数据锁,若数据锁为0,则将数据锁置1;否则,终止当前事务,重新开始执行当前事务,直至此时的数据锁为0,并将锁位置1;
第三步,比较需要访问数据此时的UTS是否与第一步读取的对应数据的UTS相同,若不同,终止当前事务,重新开始执行当前事务,直至数据此时的UTS与第一步读取的对应数据的UTS相同,将需要访问数据的UTS修改为当前事务的LSN,并将数据锁置0;针对删除操作,将墓碑标记置1。
进一步地,S4包括:
S41、针对每个线程,维护n个日志队列,/>逻辑上构成循环链表,初始化所有日志队列为空;
S42、事务提交时,若事务日志的LSN=0,则将事务日志直接写入当前队列的缓冲区,继续处理后续事务日志;否则,将事务日志写入当前队列/>后,关闭当前队列/>,使后续事务日志写入下一个日志队列/>
S43、事务日志按照S42中原则循环写入队列,当队列关闭时,将后续事务日志写入队列/>
S44、将写入队列的日志以流水线形式写入NVM。
进一步地,所述S44包括:
日志线程从队列至/>依次处理日志,采用CLWB指令将当前队列/>中的写入事务日志写入NVM;
若当前队列中存在更新事务日志,则先进行线程同步,再对所述更新事务日志使用内存屏障;在当前队列/>中内存屏障执行的同时,日志线程将下一队列/>中的写入事务日志并发写入NVM;
若下一队列中存在更新事务日志,先进行线程同步,再对所述更新事务日志使用内存屏障,并且使当前队列/>中的更新事务日志和下一队列/>中的更新事务日志按先后顺序写入NVM。
进一步地,S2中,引入线程快照根据计算得到的日志LSN进行线程同步,包括:
S21、构建线程快照的数据结构,所述数据结构包括m×n的日志数量数组和LSN数组/>;其中,m表示日志线程数,n表示每个日志线程维护的队列数;数组/>用于记录每个队列写入的更新事务日志数量,数组/>用于记录每个线程中队列当前处理日志的最大LSN;对于队列/>,当其中的日志LSN大于0时,/>,且日志写入NVM后,将/>增加1,并将/>置为0;
S22、进行日志线程同步:对于当前的更新事务,通过数组获取当前各日志队列的最大LSN,若数组/>中的LSN都为0或者都大于等于当前更新事务的LSN,则将当前更新事务日志写入NVM;否则,当前更新事务日志循环等待,直到数组/>中的LSN都大于等于当前更新事务日志的LSN为止。
进一步地,S3中,将当前日志压缩,包括:
S31、以时序数据库中时间序列的键值为键值,以对应日志的字符编码、整型字段、差值、浮点字段、浮点数编码以及日志元信息为value,构建哈希表;
S32、对于每条日志,使用1位的压缩标志用于记录日志是否被压缩,在当前日志写入NVM之前,查看当前日志中数据的键值是否包含在所述哈希表中,若是,则读取所述哈希表的原始数据对当前日志进行压缩,并将当前日志的压缩标志位置1;否则,将当前日志中的数据写入所述哈希表中,并将当前日志的压缩标志位置0。
进一步地,S32中,针对当前日志中的时间序列键值,采用字典编码进行压缩;
针对当前日志中的时间戳,采用delta-of-delta编码进行压缩;
针对当前日志中的浮点型数据,采用异或编码进行压缩。
进一步地,还包括:当S1中计算得到的LSN溢出时,执行检查点操作,包括:将脏数据落盘、删除旧日志、记录检查点日志以及重置所有数据点的扩展时间戳为0;
所述检查点日志包括:检查点执行的时间段和LSN更新时间/>,检查点执行时间段内的日志以及哈希表。
进一步地,还包括:当数据库出现故障时,按照LSN的大小顺序重做日志,以进行故障恢复,包括:
读取NVM中存储的日志并解析:若无检查点日志,则读取当前哈希表对日志解压;若包含检查点日志,则读取检查点起始时间、/>及LSN更新时间/>,并分别读取检查点哈希表和当前哈希表,从所述检查点日志中记录的日志起始地址开始,依次读取日志记录,数据时间戳在/>以前的日志使用检查点哈希表解压,数据时间戳在/>以后的日志使用当前哈希表解压;
对记录在检查点日志中之前的日志和/>之后的日志分别进行分类:在内存中建立/>个缓冲区,/>为扩展时间戳中UTS所能表示的最大LSN;若解析后的日志LSN为0,直接恢复至内存;否则,当/>时,将日志写入第/>个缓冲区;
恢复更新事务日志:若无检查点日志,将所有日志按照LSN由小到大的顺序执行redo操作;否则,则先后对以前的日志和/>以后的日志,按照LSN编号由小到大的顺序,依次对缓冲区中的日志执行redo;redo操作后将内存中恢复的数据写入硬盘。
按照本发明的第二方面,提供了一种基于非易失内存的时序数据库日志存储系统,包括计算机可读存储介质和处理器;
所述计算机可读存储介质用于存储可执行指令;
所述处理器用于读取所述计算机可读存储介质中存储的可执行指令执行第一方面任一项所述的方法。
总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:
(1)本发明的基于非易失内存的时序数据库日志存储方法,对于时序数据库的每个事务,首先通过事务访问的数据计算当前事务日志的LSN,然后按照事务日志的键值将当前日志划分到日志线程,每个日志线程通过压缩算法对日志进行压缩并进行日志对齐,最后以流水线方式将日志写入非易失内存NVM。本发明首次实现了在NVM中持久化存储时序数据库日志,充分利用NVM本身的性能,提高了时序数据库的吞吐量,缩短了故障恢复时间,提升了时序数据库性能。
针对时序数据写多、更新少的特点,对每条数据中自带的时间戳进行设计得到扩展时间戳数据结构及LSN计算协议,针对时序数据库中较多的写入事务,直接设计其日志的LSN为0,使得写入事务可以直接并发写入,提升写入效率,其日志存储顺序和故障恢复顺序不影响数据库一致性;针对更新事务,根据设计的扩展时间戳计算LSN,并保证了事务的冲突可串行化,同时,规定了数据扩展时间戳的初始值与时序数据的原始时间戳一致,不需要额外的操作对其扩展时间戳进行修改;本发明的这种通过事务访问的数据来计算日志的LSN,基于此来捕获事务之间的依赖关系和确定日志顺序,避免了中心化的日志LSN计算方法导致的事务并发争用开销,提升了时序数据库的性能。
(2)进一步地,本发明的流水线部分针对每个线程构建n个日志队列,以异步方式处理事务日志。针对写入事务,直接将其并发写入当前队列,无需内存屏障,而针对更新事务,将其写入当前队列后,关闭当前队列,使后续事务日志写入下一个队列,可以保证在同一时间内,至少有一个日志队列处于工作状态,减小非必要的内存屏障;本发明的这种通过日志流水线将日志并发写入NVM,与传统基于NVM的日志系统相比,避免了非必要的内存屏障,提升日志持久化存储性能。
(3)进一步地,本发明所采用的多线程日志方法,根据日志中数据的键值将日志划分到不同的日志线程,通过日志线程快照对多线程日志进行同步,减小了同步开销。
(4)进一步地,本发明根据时序数据采集周期相对稳定、相同键值的时序数据波动范围较小的特点,通过哈希表对日志的不同字段进行分类压缩,将日志按照NVM最小写入单元对齐后再写入NVM,然后再将日志对应的事务批量提交,减小了日志的空间开销和写放大对NVM写入性能的影响。
总而言之,本发明的方法考虑到在现实场景中,大部分时序数据库事务是数据写入事务,并且数据更新事务之间的依赖关系很少,基于这些特征设计时序数据库日志存储系统,克服了现有基于NVM的数据库日志系统未考虑时序数据特征且大量依赖内存屏障的缺陷,能够改进时序数据库日志性能,从而提升时序数据库吞吐量,缩短故障恢复时间,本发明的方法可用作各类时序数据库通用的日志系统。
附图说明
图1是本发明的基于非易失内存的时序数据库日志存储方法的整体框架图。
图2是本发明的基于非易失内存的时序数据库日志存储方法的工作流程图。
图3是本发明实施例中的数据驱动LSN算法流程图。
图4是本发明实施例中的多线程日志流程图。
图5是本发明实施例中的日志压缩与对齐流程图。
图6是本发明实施例中的放松的日志持久化策略流程图。
图7是本发明实施例中的检查点流程图。
图8是本发明实施例中的故障恢复流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1、图2所示,本发明的基于非易失内存的时序数据库日志存储方法,主要包括如下步骤:
S1、根据时序数据库中事务访问的数据计算当前事务对应日志的LSN,包括:
S11、对时序数据库每条数据中的时间戳字段进行扩展,得到扩展时间戳,该扩展时间戳从高位到低位依次包括:数据锁、墓碑标记、修改时间戳(Update Timestamp, UTS)及原始时间戳部分,其中,数据锁用于实现事务的并发控制,墓碑标记用于记录本条数据是否被删除,UTS用于记录数据修改时间戳和计算LSN;
S12、用UTS计算日志的LSN,LSN计算协议包括:
1)所有新写入数据的UTS为0,也即初始化每条数据的UTS=0;
2)对于写入事务,其日志的LSN为0;
3)对于更新事务,其日志的LSN通过计算;表示当前事务X访问的数据集合/>中UTS的最大值;/>表示当前事务X访问的数据集合,/>表示数据集合/>中的一个数据点,/>表示/>的修改时间戳;
4)事务提交前,将所有被修改数据的UTS原子更新为当前事务日志的LSN;
5)当执行检查点时(LSN溢出时),所有UTS置0。
S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;
S3、将当前日志压缩后按照非易失内存(NVM)最小写入单元对齐;
S4、针对每个线程,以流水线形式将日志并发写入NVM。
具体地,本发明运用数据驱动LSN来记录日志顺序, S11中,时序数据库的时间戳字段通常为64位,本发明实施例中,采用低52位表示微秒精度的时间戳,可以满足绝大多数时序数据库应用场景,利用剩余的高12位来记录当前事务访问的每条数据的状态。具体地,将最高两位分别记为数据锁和墓碑标记,剩余的10位用于记录数据的修改时间戳(UpdateTimestamp, UTS)。初始化时,数据的64位时间戳字段保持不变,即高12位的扩展时间戳为0,只有数据被修改时,才需要更新扩展时间戳。这里不需要记录时序数据的读取时间戳,因为对于数据读取事务,不需要生成日志,但读取数据时,需要判断锁位是否为1,如果为1,则说明当前有其它事务正在修改数据,需要等待锁位为0后才能读取数据;而对于更新事务,只需要根据数据的修改时间戳即可确定事务的依赖关系。
将事务划分为写入事务、读事务和更新事务三类。如果事务中只包含数据写入操作,那么该事务为写入事务;如果事务中只包含数据读取操作,那么该事务为读事务;如果事务中至少包含一个数据更新或者删除操作,那么该事务为更新事务。
S12中,上述协议的第一条规定了数据扩展时间戳的初始值与时序数据的原始时间戳一致,即对于写入数据,不需要额外的操作对其扩展时间戳进行修改。第二条保证了写入事务之间没有依赖关系,其日志存储顺序和故障恢复顺序不影响数据库一致性。第三条和第四条保证了事务的冲突可串行化。最后一条避免了扩展时间戳溢出。
具体地,由于写入事务日志的LSN为0,本发明实施例中,介绍如何根据LSN计算协议计算更新事务日志的LSN,如图3所示,主要包括读取当前事务X访问数据的时间戳并计算LSN、获取锁、验证和修改扩展时间戳:
第一步,读取当前事务X需要访问数据的扩展时间戳,如果访问的当前数据的锁位为1,则等待;否则,计算所有需要访问数据中所有扩展时间戳的最大值,根据协议第三条计算当前事务的LSN,即
第二步,再次读取所有需要访问数据的锁位,如果全部为0,则将锁位置1;否则,终止当前事务,重新开始执行当前事务,直至此时的锁位全部为0,并将锁位置1;该步骤避免了死锁;
第三步,比较所有需要访问数据此时的UTS是否与第一步读取的对应的UTS相同,如果不同,则说明其它事务修改了该数据,当前事务终止,重新开始执行当前事务,直至此时数据的UTS与第一步读取的对应的UTS相同,将所有需要访问数据的UTS修改为当前事务的LSN,并将锁位置0。
对于更新事务中的删除操作,最后还需要将墓碑标记置1。对于删除后重新写入的数据,则同样需要按照上述方法计算LSN并修改该数据的UTS。
S1中,还包括:当LSN溢出时,调用检查点线程,执行检查点操作,将内存中的所有脏数据落盘,同时将所有数据中扩展时间戳中的UTS置0,重新计算当前事务日志的LSN,再记录本条事务日志。时序数据库根据返回的LSN更新对应数据的扩展时间戳字段,然后按照日志中时序数据的键值将日志划分到各日志线程进行处理,日志经压缩后,按照NVM最小写入单元256字节进行对齐,以流水线方式写入NVM,同时通过线程快照中记录的LSN进行日志线程同步。
具体地,S2中,通过哈希映射将不同键值的日志映射到对应的日志线程。具体包括:
在内存中维护一个多生产者多消费者队列(Multi-ProducerMulti-ConsumerQueue, MPMCQueue)结构的日志缓冲区;
事务对应的日志首先被写入MPMCQueue,然后根据日志中记录数据的键值,各日志线程并发从MPMCQueue中读取日志。
其中,日志中记录的数据键值是指用于区分不同时间序列的主键,对于事务访问的每个数据,在生成的日志中记录了相应数据的键值。
具体地,S2中,引入线程快照根据计算得到的日志LSN进行线程同步,包括:
S21、构建线程快照的数据结构:给定m个日志线程,每个日志线程维护n个日志队列。为了记录每个日志队列中当前处理日志的LSN,在内存中维护m×n的日志数量数组和LSN数组/>;其中,日志数量数组/>用于记录每个日志队列已经写入的更新事务日志数量,LSN数组/>用于记录每个线程中日志队列当前处理日志的最大LSN。初始化时。每当日志队列将更新事务日志写入NVM时,对应的/>增加1,而LSN数组/>不需要实时更新,只有在生成更新事务日志时,才需要对/>进行更新。即对于日志队列,当其中的日志LSN大于0时,/>,一旦该日志写入NVM,将/>增加1,并将/>置为0。
S22、进行日志线程同步:对于写入事务,由于这类事务之间没有依赖关系,且事务LSN都为0,因此这类日志不需要进行全局LSN同步。对于当前的更新事务,当完成事务日志/>的LSN计算时,通过/>来获取当前各日志队列的最大LSN,如果数组/>中的LSN都为0或者都大于等于/>的LSN,则说明/>所依赖事务的日志都已持久化存储,当前的更新事务/>的日志/>可以写入NVM;否则,日志/>需要循环等待,直到/>中的LSN都大于等于日志/>的LSN为止,以实现线程同步,如图4所示。
由于没有依赖关系事务日志的LSN可能相同,导致某个日志队列的最大LSN始终保持不变,从而阻塞了日志的持久化存储,此时,需要通过日志数量数组/>来进行判断,如果/>发生了变化,说明当前日志队列中的更新事务日志已经写入NVM,日志/>可以安全地写入NVM。
具体地,如图5所示,S3中,将当前日志压缩包括:
S31、以时序数据库中时间序列的键值为哈希表的键值,以对应日志的字符编码、整型字段、差值、浮点字段、浮点数编码以及日志元信息为value,建立哈希表;除字符编码外,其它字段在每个检查点之后进行重置。构建的哈希表存储在NVM中,执行检查点操作时,哈希表的修改首先在NVM中完成,然后同步到内存镜像,而日志压缩过程中哈希表的读取则全部在内存镜像中完成。
S32、对于每条日志,使用1位的压缩标志用于记录日志是否被压缩,在日志持久化存储之前,首先查看日志中记录数据的键值是否包含在哈希表中,如果是,则读取哈希表的原始数据,对日志进行压缩,并将日志的压缩标志位置1;否则,将当前日志中记录的原始数据写入存储在NVM中的哈希表中,然后同步更新至内存镜像,并将日志的压缩标志位置0。
具体地,S32中,针对日志中的不同类型数据,分别采用不同的编码对日志压缩。日志中数据包括时间序列键值、时间戳及浮点型数据。
时间序列键值为字符型,采用简化的字典编码进行压缩,具体地,首先检查哈希表是否包含这个键值key,如果存在,则直接用value中的字典编码替代字符,并将压缩标志置1;如果不存在,则将这组新的键值对写入哈希表,并同步到内存的哈希表镜像中,然后将压缩标志置0。
时间戳采用delta-of-delta编码进行压缩,具体地,从每个检查点开始,对每个时间序列的第一条日志,首先将时间戳保存到哈希表中,然后将压缩标记置0,表示本条日志的时间戳字段未压缩。对于相同时间序列的第二条日志/>,计算时间戳与/>中时间戳的差值/>,将压缩标记置1,再存储/>值,同时将/>记录在哈希表中,并将哈希表中记录的时间戳更新为/>。从相同时间序列的第三条日志/>开始,计算/>,然后再计算/>和/>的差值/>,将/>作为本条日志的时间戳压缩结果,同时将哈希表中的差值和时间戳更新为/>和/>。后续日志的时间戳均按照上述过程进行压缩。
浮点型数据采用异或编码进行压缩。从检查点开始,对于相同时间序列的第一条日志,首先记录浮点数字段的原始值,采用与字符压缩相同的方法将该原始值记录在哈希表中,然后将压缩位置为0。对于相同时间序列的第二条日志/>,首先将浮点数字段与哈希表中的原始值进行异或计算,如果为0,则将日志/>中的浮点数计为0,表示本条日志中的浮点数与哈希表中相同时间序列记录的浮点数相同。否则,首先存储一位的标志位并置为1,然后区分以下两种情况:如果哈希表中的浮点数编码字段不为空并且异或值前导0(leading zeros)数量和异或值数据(meaningful bits)编码与哈希表中的浮点数编码相等,则记录一位的标志位并置0,表示可以复用哈希表中浮点数编码的长度信息,然后存储异或值除去前导0和尾随0的部分;否则,将标志位置1,然后使用5位存储前导0数量,使用6位存储除去前导0和尾随0之后的异或值长度,如果哈希表中浮点数编码字段为空,则将前导0数量和异或值长度写入哈希表的浮点数编码字段,最后将上述结果与异或值数据串接。
具体地,S3中,将压缩后的日志按照NVM最小写入单元对齐包括:
对于每个日志线程中的日志队列,维护一个日志缓冲区,将所有长度小于256B的日志进行合并,直到合并后的日志长度为256B或其倍数,或者使合并后的日志长度接近于256B或其倍数(小于典型的CPU L1缓存512KB),并将合并后的日志末尾使用全0填充,使合并后的日志长度为256B或其倍数;然后按照256B对齐。最后在将日志写入NVM时,通过CLWB指令批量写入NVM。
将日志按照256B对齐后,所有大于256B日志的起始地址都为256B的整数倍;而对于所有长度小于256B的日志,都可以通过对256B存储单元中的日志逐条解析来读取,从而避免了使用LSN来计算日志在NVM中的偏移量。
具体地,如图6所示,S4中,采用放松的日志持久化策略和日志流水线将日志写入NVM,包括:
S41、针对每个线程,维护n个日志队列逻辑上构成循环链表,每个日志队列长度为m,初始化所有日志队列为空;
S42、通过日志的LSN来判断事务类型,当事务日志的LSN为0时,说明本事务是写入事务,否则,本事务是更新事务。当事务提交时,如果该事务为写入事务,则将事务日志直接写入当前日志队列的缓冲区,继续处理后续事务日志;否则,将事务日志写入当前日志队列/>后,关闭当前日志队列/>,使后续事务日志写入下一个日志队列/>
S43、事务日志按照S42中的过程循环写入下一个日志队列,当关闭时,将后续事务日志写入/>
通过上述方式将日志写入队列,在同一时间内,至少有一个日志队列处于工作状态,减小非必要的内存屏障。
S44、将写入队列的日志以流水线形式写入NVM:
日志线程从队列至/>依次处理日志,采用CLWB指令将当前队列/>中的写入事务日志写入NVM;若当前队列/>中存在更新事务日志,则先进行线程同步,再对该更新事务日志使用内存屏障;在当前队列/>中内存屏障执行的同时,日志线程将下一队列/>中的写入事务日志并发写入NVM;
若下一队列中存在更新事务日志,同样先进行线程同步,再对该更新事务日志使用内存屏障,并且使/>中的更新事务日志和/>中的更新事务日志按先后顺序写入NVM;
每当日志完成持久化后(存储在NVM),更新日志线程快照。
具体地,日志线程从开始处理日志,使用CLWB指令将/>中的日志写入NVM。如果中存在更新事务日志,则首先进行线程同步,然后使用内存屏障避免CPU对/>中日志的持久化存储过程重排序;在/>中内存屏障执行的同时,日志线程将队列/>中的写入事务日志并发写入NVM。如果/>中存在更新事务日志,则同样需要进行线程同步,并使用内存屏障避免CPU重排序,同时保证/>中的更新事务日志和/>中的日志按先后顺序写入NVM,确保日志的持久化存储顺序与事务的逻辑执行顺序一致,当日志完成持久化之后,更新日志线程快照。日志队列/>中的日志按照上述过程循环写入NVM,组成日志流水线。
具体地,在本发明实施例中,如图7所示,S1中,当LSN溢出时执行检查点并重置扩展时间戳,包括:将脏数据落盘、删除旧日志以及记录检查点日志。
将脏数据落盘包括:阻塞更新事务,并在NVM中记录检查点开始时间;将内存中时间戳小于/>的数据写入SSD/HDD。
为了避免此时发生故障的情况下无法恢复,采用影子分页(shadow paging)的方法来实现原子写入,即先将数据写入影子分页,当完成写入后,将原页面引用修改为影子分页;如果未完成写入,则直接将影子分页删除,再利用日志进行恢复。
删除旧日志包括:
在内存中为每个日志线程维护一个日志流快照,每隔固定时间段(比如每隔1小时),记录各线程已持久化存储日志中数据的最大时间戳,以及本时间段内日志在NVM中的起始地址;
根据日志流快照记录的最大时间戳和日志起始地址,将日志流快照中时间戳小于的日志删除,然后将被删除日志所在的NVM存储区置0。
检查点日志包括三部分:检查点执行的时间段和LSN更新时间/>,该时间段内的日志(包含未删除的旧日志)以及哈希表。检查点日志的生成过程包含以下步骤:
在NVM中保存当前哈希表的副本,用于时间段内的日志恢复;
重置当前哈希表,只保留字符编码字段,哈希表中的其它字段清空;
先把各日志队列中的日志写入NVM,然后将内存中所有数据的扩展时间戳置0,并记录该步骤完成时间
阻塞写入事务,记录各日志流中正在处理日志块的起始地址和当前地址,最后记录检查点结束时间
进一步地,本发明的方法还包括:当数据库出现故障时,按照LSN的大小顺序重做日志,以进行故障恢复。如图8所示,具体包括:
第一步,读取NVM中存储的日志,并解析:读取NVM中存储的日志,并将日志区分为包含检查点日志和无检查点日志两种情况;若无检查点日志,则读取当前哈希表,然后直接从第一条日志开始进行解析,并使用当前哈希表对日志进行解压。如果包含检查点日志,则从检查点中读取检查点开始时间、LSN更新时间/>和检查点结束时间/>,并分别读取检查点哈希表和当前哈希表,然后从检查点日志中记录的日志起始地址开始,依次读取日志记录,对于数据时间戳在/>以前的日志使用检查点哈希表进行解压,对数据时间戳在/>以后的日志利用当前哈希表进行解压。
具体地,设表示第/>个故障恢复线程读取的日志起始地址,/>表示该线程当前读取日志的地址,初始化时/>,日志线程/>从/>开始读取第一条日志/>,记录日志长度/>,对日志进行解压缩,并更新/>。然后线程/>从当前地址/>开始读取下一条日志,如果此时读取的不是全0标志位,则直接按照读取日志/>的方法读取日志并解压缩;否则,说明当前数据块的剩余位是填充标记,需要将当前地址移动到下一个256B数据块,然后按照读取日志/>的方法读取日志并解压缩,直到连续读取m个256B数据块都为全0标志时(m为日志缓冲队列长度),说明所有日志已读取完毕。
第二步,对解析完的日志进行分类;将解析完的日志分为两部分进行处理,一部分为记录在检查点日志中的LSN更新时间之前的日志,一部分为/>之后的日志,两部分日志的处理过程相同,包括:
在内存中建立个缓冲区,/>为扩展时间戳中UTS所能表示的最大LSN(初始化为1024);对于各线程读取的每条日志(针对解析完的日志),如果LSN为0,说明本条日志为写入事务日志,则直接恢复至内存,该过程类似于多线程执行写入事务,但不需要记录日志;否则,说明本条日志是更新事务日志,将日志写入与LSN对应的缓冲区,即当/>时,写入第/>个缓冲区。
第三步,恢复更新事务日志:
如果无检查点日志,则直接将所有日志按照LSN由小到大的顺序执行redo操作;如果包含检查点日志,则先后对以前的日志和/>以后的日志,按照LSN编号由小到大的顺序,依次对日志缓冲区中的日志执行redo;
当日志完成redo后,将内存中恢复的数据写入硬盘。
同时,为了避免在数据写入硬盘时发生故障,使用影子分页方法来实现硬盘的原子写。首先将内存中的数据写入影子分页,一旦完成写入,则将原页面的引用修改为影子分页的引用,最后将NVM中的所有日志删除;如果在数据写入过程中发生故障,则删除影子分页,重新执行故障恢复。
按照本发明的另一方面,提供了一种基于非易失内存的时序数据库日志存储系统,包括计算机可读存储介质和处理器;计算机可读存储介质用于存储可执行指令;处理器用于读取计算机可读存储介质中存储的可执行指令执行上述实施例中的基于非易失内存的时序数据库日志存储方法。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种基于非易失内存的时序数据库日志存储方法,其特征在于,包括:
S1、根据时序数据库中事务访问的数据计算当前事务日志的LSN;
S2、按照日志中记录的数据键值将当前日志划分到对应的线程,并引入线程快照根据计算得到的日志LSN进行线程同步;
S3、将当前日志压缩后按照非易失内存NVM最小写入单元对齐;
S4、针对每个线程,以流水线形式将日志并发写入NVM;
其中,S1包括:
S11、对事务访问数据中的时间戳字段进行扩展,得到扩展时间戳,所述扩展时间戳从高位到低位包括:数据锁、墓碑标记及数据修改时间戳UTS,数据锁用于实现事务的并发控制,墓碑标记用于记录本条数据是否被删除;
S12、用所述UTS设计LSN计算协议:
每条新插入数据的UTS初始化为0;
写入事务日志的LSN为0;
更新事务日志的;/>表示当前事务访问数据集合/>中UTS的最大值;/>表示/>中任一数据点/>的UTS;
事务提交前,将所有被修改数据的UTS原子更新为当前事务日志的LSN;
S2中,引入线程快照根据计算得到的日志LSN进行线程同步,包括:
S21、构建线程快照的数据结构,所述数据结构包括的日志数量数组/>和LSN数组;其中,m表示日志线程数,n表示每个日志线程维护的队列数;数组/>用于记录每个队列写入的更新事务日志数量,数组/>用于记录每个线程中队列当前处理日志的最大LSN;对于队列/>,当其中的日志LSN大于0时,/>,且日志写入NVM后,将增加1,并将/>置为0;
S22、进行日志线程同步:对于当前的更新事务,通过数组获取当前各日志队列的最大LSN,若数组/>中的LSN都为0或者都大于等于当前更新事务的LSN,则将当前更新事务日志写入NVM;否则,当前更新事务日志循环等待,直到数组/>中的LSN都大于等于当前更新事务日志的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所述的方法,其特征在于,S3中,将当前日志压缩,包括:
S31、以时序数据库中时间序列的键值为键值,以对应日志的字符编码、整型字段、差值、浮点字段、浮点数编码以及日志元信息为value,构建哈希表;
S32、对于每条日志,使用1位的压缩标志用于记录日志是否被压缩,在当前日志写入NVM之前,查看当前日志中数据的键值是否包含在所述哈希表中,若是,则读取所述哈希表的原始数据对当前日志进行压缩,并将当前日志的压缩标志位置1;否则,将当前日志中的数据写入所述哈希表中,并将当前日志的压缩标志位置0。
6.根据权利要求5所述的方法,其特征在于,S32中,针对当前日志中的时间序列键值,采用字典编码进行压缩;
针对当前日志中的时间戳,采用delta-of-delta编码进行压缩;
针对当前日志中的浮点型数据,采用异或编码进行压缩。
7.根据权利要求5或6所述的方法,其特征在于,还包括:当S1中计算得到的LSN溢出时,执行检查点操作,包括:将脏数据落盘、删除旧日志、记录检查点日志以及重置所有数据点的扩展时间戳为0;
所述检查点日志包括:检查点执行的时间段和LSN更新时间/>,检查点执行时间段内的日志以及哈希表。
8.根据权利要求7所述的方法,其特征在于,还包括:当数据库出现故障时,按照LSN的大小顺序重做日志,以进行故障恢复,包括:
读取NVM中存储的日志并解析:若无检查点日志,则读取当前哈希表对日志解压;若包含检查点日志,则读取检查点起始时间、/>及LSN更新时间/>,并分别读取检查点哈希表和当前哈希表,从所述检查点日志中记录的日志起始地址开始,依次读取日志记录,数据时间戳在/>以前的日志使用检查点哈希表解压,数据时间戳在/>以后的日志使用当前哈希表解压;
对记录在检查点日志中之前的日志和/>之后的日志分别进行分类:在内存中建立/>个缓冲区,/>为扩展时间戳中UTS所能表示的最大LSN;若解析后的日志LSN为0,直接恢复至内存;否则,当/>时,将日志写入第/>个缓冲区;
恢复更新事务日志:若无检查点日志,将所有日志按照LSN由小到大的顺序执行redo操作;否则,则先后对以前的日志和/>以后的日志,按照LSN编号由小到大的顺序,依次对缓冲区中的日志执行redo;redo操作后将内存中恢复的数据写入硬盘。
9.一种基于非易失内存的时序数据库日志存储系统,其特征在于,包括计算机可读存储介质和处理器;
所述计算机可读存储介质用于存储可执行指令;
所述处理器用于读取所述计算机可读存储介质中存储的可执行指令执行权利要求1-8任一项所述的方法。
CN202310868838.1A 2023-07-17 2023-07-17 一种基于非易失内存的时序数据库日志存储方法及系统 Active CN116595012B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310868838.1A CN116595012B (zh) 2023-07-17 2023-07-17 一种基于非易失内存的时序数据库日志存储方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310868838.1A CN116595012B (zh) 2023-07-17 2023-07-17 一种基于非易失内存的时序数据库日志存储方法及系统

Publications (2)

Publication Number Publication Date
CN116595012A CN116595012A (zh) 2023-08-15
CN116595012B true CN116595012B (zh) 2023-09-22

Family

ID=87601249

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310868838.1A Active CN116595012B (zh) 2023-07-17 2023-07-17 一种基于非易失内存的时序数据库日志存储方法及系统

Country Status (1)

Country Link
CN (1) CN116595012B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117118824B (zh) * 2023-10-20 2024-02-27 成都卓拙科技有限公司 一种日志数据收集方法及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017109850A1 (ja) * 2015-12-22 2017-06-29 三菱電機株式会社 ロギング装置及びロギング方法
CN112540931A (zh) * 2020-12-16 2021-03-23 华中科技大学 保证安全非易失内存中数据崩溃一致性的方法及处理器
CN114328468A (zh) * 2022-01-10 2022-04-12 安捷中科(北京)数据科技有限公司 时序实时数据库数据存储和处理的方法、系统及电子设备
CN115374161A (zh) * 2022-08-26 2022-11-22 山东云海国创云计算装备产业创新中心有限公司 一种提高事务型数据库事务提交速度的方法和系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9244775B2 (en) * 2013-03-14 2016-01-26 International Business Machines Corporation Reducing reading of database logs by persisting long-running transaction data
US20180144015A1 (en) * 2016-11-18 2018-05-24 Microsoft Technology Licensing, Llc Redoing transaction log records in parallel

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017109850A1 (ja) * 2015-12-22 2017-06-29 三菱電機株式会社 ロギング装置及びロギング方法
CN112540931A (zh) * 2020-12-16 2021-03-23 华中科技大学 保证安全非易失内存中数据崩溃一致性的方法及处理器
CN114328468A (zh) * 2022-01-10 2022-04-12 安捷中科(北京)数据科技有限公司 时序实时数据库数据存储和处理的方法、系统及电子设备
CN115374161A (zh) * 2022-08-26 2022-11-22 山东云海国创云计算装备产业创新中心有限公司 一种提高事务型数据库事务提交速度的方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
NVRAM-aware logging in transaction systems;Jian Huang等;jian-vldb15;389-400 *
基于Memcached时序数据缓存的设计与实现;金祝光;中国优秀硕士学位论文全文数据库 (基础科学辑);I137-53 *

Also Published As

Publication number Publication date
CN116595012A (zh) 2023-08-15

Similar Documents

Publication Publication Date Title
US9483512B2 (en) Columnar database using virtual file data objects
US10261869B2 (en) Transaction processing using torn write detection
US10936441B2 (en) Write-ahead style logging in a persistent memory device
EP3047400B1 (en) Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
EP3827347B1 (en) Constant time database recovery
US20190073277A1 (en) Transaction Recovery Method in Database System, and Database Management System
US7395278B2 (en) Transaction consistent copy-on-write database
CN105009067B (zh) 管理对存储数据单元的操作
US7406489B2 (en) Apparatus, system and method for persistently storing data in a data synchronization process
US8843449B2 (en) Unobtrusive copies of actively used compressed indices
US11409616B2 (en) Recovery of in-memory databases after a system crash
RU2560786C2 (ru) Корректность без зависимости от упорядоченности
JP6491605B2 (ja) 記憶されたデータユニットに対する操作の管理
CN116595012B (zh) 一种基于非易失内存的时序数据库日志存储方法及系统
EP2590078A2 (en) Shadow paging based log segment directory
US11537582B2 (en) Data access method, a data access control device, and a data access system
CN113821382B (zh) 一种实时数据库数据处理方法、系统和设备
US10482013B2 (en) Eliding memory page writes upon eviction after page modification
Wust et al. Efficient logging for enterprise workloads on column-oriented in-memory databases
CN113220490A (zh) 异步写回持久化内存的事务持久化方法及系统
JP2004062759A (ja) データベースログの管理方法、その装置およびそのプログラム
Kang et al. S-WAL: Fast and efficient write-ahead logging for mobile devices
Oh et al. Doubleheader logging: Eliminating journal write overhead for mobile dbms
KR101809679B1 (ko) 데이터베이스의 일관성 유지를 위한 컴퓨팅 장치 및 방법
CN113986587A (zh) 基于值日志的检查点实现方法、系统、存储介质及设备

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