CN116450751A - 事务处理方法及装置 - Google Patents

事务处理方法及装置 Download PDF

Info

Publication number
CN116450751A
CN116450751A CN202310334624.6A CN202310334624A CN116450751A CN 116450751 A CN116450751 A CN 116450751A CN 202310334624 A CN202310334624 A CN 202310334624A CN 116450751 A CN116450751 A CN 116450751A
Authority
CN
China
Prior art keywords
data
memory
transaction
target
memory block
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.)
Pending
Application number
CN202310334624.6A
Other languages
English (en)
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.)
Hundsun Technologies Inc
Original Assignee
Hundsun Technologies Inc
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 Hundsun Technologies Inc filed Critical Hundsun Technologies Inc
Priority to CN202310334624.6A priority Critical patent/CN116450751A/zh
Publication of CN116450751A publication Critical patent/CN116450751A/zh
Pending legal-status Critical Current

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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • 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/23Updating
    • 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/25Integrating or interfacing systems involving database management systems
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书提供事务处理方法及装置,应用于数据库管理端,数据库管理端用于管理关系数据库,其中事务处理方法包括:基于关系数据库的数据库日志确定目标事务;在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象;建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块;其中,存储数据的内存块构成存储链路;基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,用于执行目标事务。基于映射关系存储数据,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,减少读取的文件字节数,提高数据读取效率。

Description

事务处理方法及装置
技术领域
本说明书涉及计算机技术领域,特别涉及一种事务处理方法。本说明书同时涉及一种事务处理装置,一种计算设备,以及一种计算机可读存储介质。
背景技术
随着计算机技术的发展,大数据时代逐渐到来。在数据库领域,随之而来的则是事务并发问题。现有技术中,为应对Oracle数据库快速产生的Redo数据,尤其是并发产生的事务多、事务大的情况,通常是将从Redo日志文件中解析出的未提交事务数据缓存在内存中,直接解析到事务控制语句(Commit/Rollback)后,再次遍历内存中对应事务的所有数据,合并处理后向下流转。
但是这种处理方式需要为同步进程配置较大的物理内存来缓存未提交的事务数据,每次事务控制都需要对缓存文件进行扫描,性能开销较大,读写效率低。因此,亟需一种有效的方法以解决上述问题。
发明内容
有鉴于此,本说明书实施例提供了一种事务处理方法。本说明书同时涉及一种事务处理装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种事务处理方法,应用于数据库管理端,数据库管理端用于管理关系数据库,包括:
基于所述关系数据库的数据库日志确定目标事务;
在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象;
建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路;
基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
可选地,所述基于所述关系数据库的数据库日志确定目标事务,包括:
响应于数据处理请求,读取所述关系数据库的数据库日志中存储的日志记录,根据读取结果确定目标日志记录;
对所述目标日志记录进行解析,根据解析结果确定目标事务。
可选地,所述在内存空间中确定与所述目标事务对应的内存对象,包括:
确定所述数据文件的数据量;
根据所述数据量在所述内存空间中申请至少一个内存块,由至少一个内存块组成所述目标事务对应的内存对象。
可选地,所述基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块,包括:
在所述内存对象中确定第i内存块,基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块,其中,i从1开始取值且为正整数;
在第i内存块处于写满状态且所述数据文件中包含未被存储的数据的情况下,i按序自增,并执行所述基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块的步骤;
直至所述数据文件中不包含未被存储的数据,执行所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务的步骤。
可选地,所述存储链路中内存块对应的节点之间具有链接存储关系,存储数据的内存块的索引信息包含标记索引项,状态索引项,数据索引项,前关联索引项和后关联索引项;
其中,所述存储链路中的两个相邻内存块通过所述前关联索引项和所述后关联索引项进行链接。
可选地,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
基于所述存储链路确定内存块排列顺序;
按照所述内存块排列顺序在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
可选地,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务步骤执行之后,还包括:
在所述目标事务执行完成的情况下,释放所述内存对象中的内存块。
可选地,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
对所述目标事务对应的事务记录表中包含的事务记录进行合并,根据合并结果确定目标事务记录表;
基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务记录表对应的目标数据。
可选地,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
在所述目标事务的事务记录表中确定第j事务记录;
判断所述第j事务记录是否为回撤记录;
若是,基于所述第j事务记录对所述事务记录表进行更新,将更新后的事务记录表作为所述事务记录表,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;
若否,基于所述存储链路在所述内存对象包含的内存块中确定所述第j事务记录对应的第j数据,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;
直至j自增至k,将确定的数据作为所述目标数据,其中,j从1开始取值直至为k且为正整数,k为所述事务记录表中事务记录的数量。
可选地,在所述事务记录为回撤记录的情况下,在所述存储链路中确定所述回撤记录对应的终止内存块,并对所述终止内存块中数据记录索引的记录数值进行更新;
在更新后的记录数值小于等于零的情况下,基于所述存储链路确定与所述终止内存块对应的前序内存块,并释放所述终止内存块;
根据释放结果和所述前序内存块更新所述存储链路,并基于更新后的存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
根据本说明书实施例的第二方面,提供了一种事务处理装置,应用于数据库管理端,数据库管理端用于管理关系数据库,包括:
第一确定模块,被配置为基于所述关系数据库的数据库日志确定目标事务;
第二确定模块,被配置为在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象;
存储模块,被配置为建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路;
读取模块,被配置为基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
根据本说明书实施例的第三方面,提供了一种计算设备,包括:
存储器和处理器;
所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该指令被处理器执行时实现所述事务处理方法的步骤。
根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该指令被处理器执行时实现所述事务处理方法的步骤。
本说明书提供的事务处理方法,应用于数据库管理端,数据库管理端用于管理关系数据库,其中事务处理方法包括:基于关系数据库的数据库日志确定目标事务;在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象;建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块;其中,存储数据的内存块构成存储链路;基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,用于执行目标事务。
本说明书一实施例通过建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据有序存储至内存对象包含的内存块,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,实现了数据的有序读取,减少读取的文件字节数,提高数据读取效率。从而在读写混合时,提高读写效率,降低性能开销。
附图说明
图1示出了根据本说明书一实施例提供的一种事务处理方法的示意图;
图2示出了根据本说明书一实施例提供的一种事务处理方法的流程图;
图3a示出了根据本说明书一实施例提供的一种事务处理方法应用于数据存储的存储链路构建示意图;
图3b示出了根据本说明书一实施例提供的一种事务处理方法中的事务记录表更新的示意图;
图4示出了根据本说明书一实施例提供的一种应用于数据同步的事务处理方法的处理流程图;
图5示出了根据本说明书一实施例提供的一种事务处理装置的结构示意图;
图6示出了根据本说明书一实施例提供的一种计算设备的结构框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
Mmap:一种内存映射文件的方法,Mmap将一个文件或者其它对象映射进内存。
Oracle数据库通过Redo来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。Redo可以理解为重做,在Oracle数据库中,通过Redo实现对数据库中的事务进行重新执行;相应的,Redo日志即为记录数据库变化的日志。而基于Redo日志的CDC(change data capture,变化数据捕捉)技术是当前最优的实现方式,即通过解析数据库Redo日志,识别和捕获对数据库中的数据所做的更改(包括数据或数据表的插入、更新、删除等),并实时传送到下游流程或系统的过程;通过这种方式,CDC能够向数据仓库提供高效、低延迟的数据传输。
Oracle数据库将数据变更顺序写入Redo日志,包括事务控制和DML(Insert、Delete、Update),当DML涉及的单行记录跨多个数据块时,会生成多个Redo日志记录;在事务控制方面,除事务数据被正常提交之外,还存在事务整个回滚、事务部分回滚等操作。
现有技术中,为应对Oracle数据库快速产生的Redo日志记录,尤其是并发产生的事务多、事务大时。通常会从Redo日志文件中解析出的未提交事务数据缓存在内存中,直接解析到事务控制语句(Commit提交/Rollback回滚)后,再次遍历内存中对应事务的所有数据,合并处理后向下流转;或者从Redo日志记录解析出的数据顺序写入缓存文件,当解析到事务控制语句(Commit/Rollback)后,从缓存文件中遍历查找对应事务的所有数据,合并处理后向下流转;还可以采用Nosql(非关系型数据库)代替缓存文件,当解析到事务控制语句(Commit/Rollback)后,基于事务号快速确定该事务的所有数据,合并处理后向下流转。
然而上述方法,需要为同步进程配置较大的物理内存来缓存未提交的事务数据;每次事务控制都需要对缓存文件扫描一次,影响同步效率;采用Nosql虽然简化事务写入、遍历以及清理删除等逻辑,但Nosql的写放大,严重影响同步效率。因此本实施例提供一种采用较小的物理内存、极高的存取效率缓存解析出的Redo日志记录的方法。
图1示出了根据本说明书一实施例提供的一种事务处理方法的示意图,如图1所示,基于关系数据库的数据库日志确定目标事务。在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象。建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块。存储数据的内存块构成存储链路。基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,用于执行目标事务。
通过建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据有序存储至内存对象包含的内存块,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,实现了数据的有序读取,减少读取的文件字节数,提高数据读取效率。从而在读写混合时,提高读写效率,降低性能开销。
在本说明书中,提供了一种事务处理方法,本说明书同时涉及一种事务处理装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
图2示出了根据本说明书一实施例提供的一种事务处理方法的流程图,本实施例提供的事务处理方法应用于数据库管理端,所述数据库管理端用于管理关系数据库,具体包括以下步骤:
步骤S202,基于所述关系数据库的数据库日志确定目标事务。
本说明书提供的事务处理方法中通过数据库管理端执行,且数据库管理端用于管理关系数据库,其中关系数据库可以是Oracle、db2、sqlserver、mysql等。本实施例以Oracle为例,对事务处理方法进行说明,其他类型的数据库的事务处理过程均可参见本实施例相同或相应的描述,在此不作过多赘述。
具体的,关系数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织;数据库日志记录了所有对数据库的数据、表结构、索引等变更的操作;数据库日志记录着所有事务对数据的完整修改记录,这些记录能够帮助数据库在恢复数据时执行Undo/Redo;Undo是指撤销、还原;Undo撤销数据是反转DML语句(Data Manipulation Language语句,数据操纵语句)结果所需要的信息,还被称为“回滚数据”;例如对数据进行修改,执行Undo则实现了撤销修改;目标事务即为与数据库日志对应的数据库事务;目标事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位;事务由事务开始与事务结束之间执行的全部数据库操作组成。
基于此,在接收到数据处理请求时,响应于数据处理请求,读取关系数据库的数据库日志中存储的日志记录,根据读取结果在数据库日志中确定目标日志记录,从而对目标日志记录进行解析。
实际应用中,关系数据库可以为Oracle数据库,数据处理请求可以是数据同步、数据迁移、数据备份对应的数据处理请求,还可以是通过获取目标事务对应的数据推进下游业务的执行,例如对获取到的目标事务对应的数据进行实时计算、统计和分析等。
进一步的,在关系数据库中,数据的变更会按照变更顺序生成数据库日志,在确定目标事务时考虑到直接获取目标事务可能会导致获取不完整的问题,因此可以通过对目标日志记录进行解析的方式实现完整的目标事务的获取,具体实现如下:
响应于数据处理请求,读取所述关系数据库的数据库日志中存储的日志记录,根据读取结果确定目标日志记录;对所述目标日志记录进行解析,根据解析结果确定目标事务。
具体的,数据处理请求是指针对数据库提交的用于对数据库中的数据进行处理的计算机指令,数据处理请求可以是数据同步、数据迁移、数据备份等操作对应的数据处理请求;日志记录是指数据库日志中存储的针对数据库做出每项操作后生成的描述性记录;相应的,目标日志记录即为在数据库日志中选择的用于进行数据处理的日志记录;通过对目标日志记录进行解析能够确定与该条日志记录对应的事务,即目标事务。
基于此,接收数据处理请求,确定关系数据库中的数据库日志,响应于数据处理请求,读取数据库日志中存储的日志记录,根据读取结果确定目标日志记录;对目标日志记录进行解析,根据解析结果确定目标事务;在读取数据库日志中存储的日志记录时,可以按照数据库日志中日志记录的存储顺序进行读取。
举例说明,在基于Redo日志记录进行数据同步时,需要对数据库中的事务进行完整的分析。在接收到用于实现数据同步的数据同步请求时,读取数据库日志中的日志记录,对日志记录进行解析能够获得与日志记录对应的事务1。事务1涉及的记录可能跨多个数据块。在事务控制方面,除事务数据被正常提交之外,还存在事务整个回滚、事务部分回滚等操作。
综上所述,通过对目标日志记录进行解析,根据解析结果确定目标事务,从而提高目标事务确定的准确性,以便于后续对目标事务对应的数据进行读取,以完成数据处理。
步骤S204,在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象。
具体的,在上述基于关系数据库的数据库日志确定目标事务之后,即可在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象,其中,数据文件是指与目标事务对应的存储目标事务的全部数据的文件;内存空间是指与关系数据库对应的用于临时存储关系数据库中目标事务对应的数据的一段连续的存储空间;内存空间中包括多个连续的内存块,内存块可以被选择并存储数据,当数据被读取之后,存储数据的内存块即可被释放,从而被其他事务选择用于存储数据;内存对象是指根据数据文件所需的内存空间大小,在内存空间中选择的至少一个内存块组成的对象;选择的多个内存块可以是内存空间中不连续的多个内存块。多个内存块是否连续取决于内存空间中处于空闲状态的内存块是否连续。
基于此,在基于关系数据库的数据库日志确定目标事务之后,在关系数据库中确定与目标事务对应的存储了目标事务的数据文件,以及在内存空间中选择与目标事务对应的内存对象。在内存对象选择时,根据目标事务的数据量确定内存对象包含的数据块数量。使得目标事务对应的数据能够全部存储至内存对象中。
实际应用中,在内存空间确定与目标事务对应的内存对象时,内存对象中包含的数据块可以是不连续的至少一个数据块。由于内存空间中的数据块能够被复用,因此在确定内存对象时,根据目标事务对应的数据量在内存对象中选择能够存储目标事务对应的数据的至少一个内存块,即,选择内存对象中处于空闲状态或未被占用的内存块。
进一步的,考虑到数据文件中包含的数据量不同,因此在对数据文件中包含的数据进行存储时,则需要占用较多的内存空间,为了避免内存空间不足,可以在对数据文件中的数据进行存储之前,根据数据文件的数据量在内存空间中申请与数据量对应的至少一个内存块,用于存储数据文件中的数据,具体实现如下:
确定所述数据文件的数据量;根据所述数据量在所述内存空间中申请至少一个内存块,由至少一个内存块组成所述目标事务对应的内存对象。
具体的,数据量是指数据文件中包含的数据所占用的内存空间的大小,通常以字节表示;相应的,内存块为存储数据文件中的数据的存储单元,一个内存块可以包含多个数据块,用于存储数据;由数据文件对应的至少一个内存块组成内存对象。
基于此,计算数据文件对应的数据量。根据数据量在内存空间中申请与数据量对应的至少一个内存块,由至少一个内存块组成目标事务对应的内存对象,内存对象用于存储数据文件中的全部数据。还可以根据内存空间中内存块能够存储的数据量对数据文件中的数据进行分组处理,进而基于数据文件对应的分组数量在内存空间中申请与分组数量对应的内存块,从而实现将每组数据分别存储至内存块中。
沿用上例,对事务1对应的数据文件的数据量进行计算,预估数据文件中的数据进行存储需要的内存空间中的内存块的数量,并在内存空间中申请相应数量的内存块。还可以对数据文件中包含的数据分片进行计算,每个数据分片存储至一个内存块中,则需要申请的内存块数量与数据文件中数据分片的数量相对应。
综上所述,根据数据文件的数据量在内存空间中申请至少一个内存块,由至少一个内存块组成内存对象,从而实现内存块的按序申请,避免占用过多资源,同时也避免了资源浪费。
步骤S206,建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路。
具体的,在上述在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象之后,即可建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块;存储数据的内存块构成存储链路,其中,映射关系在本实施例中是指目标事务和内存对象之间,以及内存对象和数据文件之间的指向关系;即,将目标事务、内存对象、数据文件通过“指针”的方式建立起连接,从而便于后续基于映射关系将数据文件中的数据存储至内存对象中;存储链路是指由内存对象中的多个内存块首尾顺次连接组成的链路,存储链路中按照数据文件中数据的存储顺序,将数据文件中的数据存储在存储链路的内存块中,从而实现数据的有序存储。
基于此,在关系数据库中确定与目标事务对应的数据文件,以及在内存空间中确定与目标事务对应的内存对象后,根据映射关系建立策略建立目标事务、内存对象和数据文件之间的映射关系,并基于建立好的映射关系将数据文件中的数据依次存储至内存对象包含的内存块,存储数据的内存块根据数据文件中存储至数据块的顺序构成存储链路,存储链路中包含的存储块之间具有链接关系,目标事务分别与存储链路中包含的起始内存块和终止内存块链接。
实际应用中,建立目标事务、内存对象和数据文件之间的映射关系,可以是建立目标事务与内存对象之间的映射关系,以及建立内存对象和数据文件之间的映射关系。在基于映射关系将数据文件中的数据存储至内存对象包含的内存块中时,由于数据文件中的数据可能无法全部存储至一个内存块中,因此需要将数据文件中的数据存储至内存对象中的多个内存块,在进行存储时,在内存对象中确定首个内存块,将数据文件中的数据按照数据存储顺序存储至首个内存块中,在首个内存块存满的情况下,在内存对象中确定下一内存块,并继续将数据文件中需要进行存储的数据存储至下一内存块,直至数据文件中的全部数据均存储至内存对象中,根据数据存储时内存块选择顺序确定由内存对象中的内存块组成的存储链路。目标事务中的起始事务索引指向存储链路中的首个内存块,终止索引指向存储链路中末尾位置的内存块。
进一步的,考虑到在内存空间中确定的内存对象包含至少一个内存块,由于内存空间中内存块可以复用,因此申请到的多个内存块一般不为连续的内存块,因此在将数据文件中的数据存储至内存块时,可以依次写入并建立相邻两个内存块之间的链接,从而便于后续数据读取,具体实现如下:
在所述内存对象中确定第i内存块,基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块,其中,i从1开始取值且为正整数;在第i内存块处于写满状态且所述数据文件中包含未被存储的数据的情况下,i按序自增,并执行所述基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块的步骤;直至所述数据文件中不包含未被存储的数据,执行所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务的步骤。
基于此,在内存对象包含的多个内存块中随机选择一个内存块作为第i内存块,基于预先建立的目标事务、内存对象和数据文件之间的映射关系将数据文件中未被存储的数据存储至第i内存块,直至第i内存块被写满,i从1开始取值且为正整数。在第i内存块处于写满状态且数据文件中还包含未被存储的数据的情况下,i按序自增,并基于映射关系将数据文件中未被存储的数据存储至第i+1内存块中,以此类推,直至数据文件中不包含未被存储的数据,则表示数据文件中的数据全部存储至内存块中,在确定第i内存块对应的第i+1内存块之后,即可建立第i内存块和第i+1内存块之间的链接,在需要进行数据读取时,基于内存块依次排列和链接后组成的存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,用于目标事务的执行。
进一步的,在进行数据存储时,还可以根据内存块的索引信息建立内存块之间的链接,具体实现如下:所述存储链路中内存块对应的节点之间具有链接存储关系,存储数据的内存块的索引信息包含标记索引项,状态索引项,数据索引项,前关联索引项和后关联索引项;其中,所述存储链路中的两个相邻内存块通过所述前关联索引项和所述后关联索引项进行链接。
基于此,在内存对象中确定第i内存块,建立目标事务的起始事务项与第i内存块的标记索引项之间的链接,以及建立目标事务的终止事务项与第i内存块的标记索引项之间的链接,基于映射关系将数据文件中未被存储的数据存储至第i内存块;在第i内存块处于写满状态且数据文件中包含未被存储的数据的情况下,在内存对象中确定第i+1内存块,将目标事务的终止事务项与第i内存块的标记索引项之间的链接取消,建立目标事务的终止事务项与第i+1内存块的标记索引项之间的链接,建立第i内存块的后关联索引项和第i+1内存块的标记索引项之间的链接,以及建立第i内存块的标记索引项和第i+1内存块的前关联索引项之间的链接,从而实现建立第i内存块和第i+1内存块之间的链接,以此类推,直至将数据文件中的数据全部存储至内存块中,由存储了数据的内存块构成存储链路。
沿用上例,图3a示出了根据本说明书一实施例提供的一种事务处理方法应用于数据存储的存储链路构建示意图,如图3a中(a)所示,在申请的内存块为3个,内存块标记索引项分别为01、03和06的情况下,选择内存块标记索引项为01的内存块作为起始内存块,建立目标事务001的起始标志与标记索引项为01的内存块的标记索引项之间的链接,建立目标事务001的终止标志与标记索引项为01的内存块的标记索引项之间的链接。
在数据文件中确定待存储的数据a,并将待存储数据a依次存储至标记索引项为01的内存块中,直至标记索引项为01的内存块被写满,则在申请的3个内存块中选择未存储数据的标记索引项为03的内存块,建立标记索引项为01的内存块和标记索引项为03的内存块之间的链接,由标记索引项为01的内存块的后关联索引项指向标记索引项为03的内存块的标记索引项,由标记索引项为03的内存块的前关联索引项指向标记索引项为01的内存块的标记索引项,将数据文件中未被存储的数据b存储至标记索引项为03的内存块。以此类推,直至数据文件中全部数据存储至内存块中,将标记索引项为06的内存块作为末尾位置的内存块,将建立目标事务001的终止标志与标记索引项为06的内存块的前关联索引项之间的链接。
综上所述,在对数据文件中的数据进行存储的过程中生成存储链路,从而实现数据文件中数据的有序存储,以便于在后续进行数据读取时,提高数据读取效率。
步骤S208,基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
具体的,在上述建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块之后,即可基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,其中,目标数据即为从内存对象包含的内存块中读取到的数据,目标数据可以为数据文件中的全部数据,也可以为数据文件中的部分数据。
基于此,在建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据存储至内存对象包含的内存块后,在对目标事务对应的数据进行读取的情况下,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,用于目标事务的执行。在进行数据读取时,确定存储链路中的首个内存块,对首个内存块中存储的数据进行读取,进而再确定存储链路中与首个内存块链接的下一内存块并读取数据,直至存储链路对应的全部数据均被读取。
实际应用中,在Oracel数据库Redo日志记录回滚时,采用的则是栈的思想,即写入、回滚顺序严格一致,即先进后出,后进先出;基于该特性,本实施例在处理回撤时,采用直接修改元数据信息,即,直接修改内存对象的内存块中的数据的方式,无须操作数据文件中的真实数据,从而提高效率。
进一步的,在进行数据读取时,考虑到随机读取无法确保数据读取的连续性,由于存储链路是由内存对象中包含的内存块组成的,数据文件中的数据也是按照存储链路中内存块的排列顺序存储的,因此为了确保读取到的数据与数据文件中的数据排列顺序相同,在进行数据读取时,需要确定存储链路中内存块的排列顺序,具体实现如下:
基于所述存储链路确定内存块排列顺序;按照所述内存块排列顺序在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
基于此,内存块排列顺序是指由内存块构成的存储链路中内存块之间的链接顺序。由于目标事务对应的目标数据存储在存储链路中的内存块中,且目标数据具有存储顺序,在读取目标事务对应的目标数据时,先确定存储链路中内存块的排列顺序,基于存储链路中内存块的排列顺序在内存对象包含的内存块中读取目标事务对应的目标数据,此时读取到的目标数据与数据文件中的数据相对应。
举例说明,如图3a中(b)所示,目标事务04001对应内存块01、04和12组成的存储链路;目标事务04002对应内存块02和03组成的存储链路;目标事务04003对应内存块05和06组成的存储链路。在进行数据读取时,也按照各个目标事务对应的存储链路中内存块的排列顺序进行数据读取,从而确保获取到的数据的顺序与数据文件中数据存储顺序相同,即,读取目标事务04001对应内存块01中的数据R0-R5、内存块04中的数据R10-R15以及内存块12中的数据R20-R25,直至完成每个目标事务的数据读取。
综上所述,通过基于存储链路中内存块的排列顺序在内存对象包含的内存块中读取目标数据,从而确保目标数据读取的准确性,对内存对象包含的内存块中存储的数据进行顺序读取,提高数据读取的顺序性,从而便于下游业务的执行。
进一步的,内存块的长时间占用会造成不必要的资源浪费,因此在内存块中存储的数据被读取完成或处于无用状态的情况下,可以释放内存块,从而实现内存块的复用,具体实现如下:
在所述目标事务执行完成的情况下,释放所述内存对象中的内存块。
基于此,在目标事务执行完成的情况下,表示目标事务对应的内存对象中不再需要存储与目标事务对应的数据文件中的数据,此时即可将数据文件占用的内存对象包含的内存块释放,归还至内存空间,用于被其他事务申请和使用,实现内存块复用的目的,解除目标事务,内存对象和数据文件之间的映射关系。
沿用上例,目标事务可以是数据同步、数据迁移、数据备份等事务,还可以是通过获取数据推进下游业务的执行,例如对获取到的数据进行实时计算、统计和分析等。在目标事务执行完成后,即可释放目标事务占用的01内存块、03内存块和06内存块。
综上所述,在目标事务执行完成的情况下,释放内存对象中的内存块,从而实现内存块的复用,降低性能开销,提高资源利用率。
进一步的,在处理回撤时,考虑到目标事务对应的事务记录表中包含的事务记录较多,因此可以分别对每条事务记录进行分析,并对事务记录进行合并,实现对事务记录表的更新,进而基于更新后的事务记录表进行数据读取,具体实现如下:
对所述目标事务对应的事务记录表中包含的事务记录进行合并,根据合并结果确定目标事务记录表;基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务记录表对应的目标数据。
具体的,事务记录表是与目标事务对应的,存储事务对应的操作记录的表,事务记录表中存储了数据被正常提交的记录之外,还存储了回滚记录(撤销记录),合并是指对目标事务对应的事务记录表中的记录进行的合并操作,包括对数据正常提交记录和与其对应的回滚记录进行的抵消操作。
基于此,确定目标事务对应的事务记录表,对目标事务对应的事务记录表中包含的不同类型的事务记录进行合并,根据合并结果确定目标事务记录表。基于存储链路在内存对象包含的内存块中读取目标事务记录表对应的目标数据。
沿用上例,图3b示出了根据本说明书一实施例提供的一种事务处理方法中的事务记录表更新的示意图,如图3b所示,事务记录表中记录了序列号、事务标识、数据行号、拆分标识、操作和回滚等信息。对事务记录表中存储的9条记录进行合并,XR表示撤销操作,目的是撤销距离XR最近的上一XA事务记录,与其进行两两抵消,因此,根据箭头指向,事务记录101-XA与其最近的事务记录101-XR抵消,事务记录101-XA与事务记录102-XR抵消,事务记录102-XA与其最近的事务记录102-XR抵消,对事务记录表中的事务记录进行合并,即可获得事务记录100-XA,读取该事务记录对应的数据作为目标数据。
综上所述,通过统一对事务记录表中包含的事务记录进行合并,进而基于存储链路在内存对象包含的内存块中读取目标事务记录表对应的目标数据,从而提高目标数据读取的效率。
进一步的,除了对目标事务对应的事务记录记录表中包含的事务记录进行合并之外,还可以对事务记录进行逐条处理,具体实现如下:
在所述目标事务的事务记录表中确定第j事务记录;判断所述第j事务记录是否为回撤记录;若是,基于所述第j事务记录对所述事务记录表进行更新,将更新后的事务记录表作为所述事务记录表,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;若否,基于所述存储链路在所述内存对象包含的内存块中确定所述第j事务记录对应的第j数据,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;直至j自增至k,将确定的数据作为所述目标数据,其中,j从1开始取值直至为k且为正整数,k为所述事务记录表中事务记录的数量。
基于此,回撤记录即为回滚记录,在目标事务的事务记录表中确定第j事务记录;判断第j事务记录是否为回撤记录;若是回撤记录,表示第j事务记录无法执行,且第j事务记录对应的前序事务记录将被撤销,基于第j事务记录对事务记录表进行更新,在事务记录表中删除第j事务记录对应的前序事务记录,将更新后的事务记录表作为事务记录表,并在目标事务的事务记录表中确定第j+1事务记录继续判断第j+1事务记录是否为回撤记录;若不是回撤记录,表示第j事务记录可以执行,即第j事务记录对应的数据可以被提交,基于存储链路在内存对象包含的内存块中确定第j事务记录对应的第j数据,并在目标事务的事务记录表中确定第j+1事务记录的步骤,第j数据用于执行目标事务,实现数据的删除、修改等操作。以此类推,直至j自增至k,将确定的数据作为目标数据。
沿用上例,在目标事务的事务记录表中确定第1事务记录;判断第1事务记录是否为回撤记录;若第1事务记录为回撤记录,表示第1事务记录无法执行,且第1事务记录对应的前序事务记录将被撤销,基于第1事务记录对事务记录表进行更新,在事务记录表中删除第1事务记录对应的前序事务记录,将更新后的事务记录表作为事务记录表,并在目标事务的事务记录表中确定第2事务记录继续判断第2事务记录是否为回撤记录;若第1事务记录不为回撤记录,表示第1事务记录可以执行,即第1事务记录对应的数据可以被提交,基于存储链路在内存对象包含的内存块中确定第1事务记录对应的第1数据,并在目标事务的事务记录表中确定第2事务记录的步骤,第1数据用于执行目标事务,实现数据的删除、修改等操作。以此类推,直至完成事务记录表中全部事务记录的处理,读取到目标数据。
综上所述,通过对事务记录进行逐条处理,从而提高目标数据读取的准确性和完整性。
进一步的,在处理回撤时,考虑到存在存储链路中内存块存储的数据全部进行回撤的情况,因此可以在内存块中存储的全部数据进行回撤后释放该内存块,具体实现如下:
在所述事务记录为回撤记录的情况下,在所述存储链路中确定所述回撤记录对应的终止内存块,并对所述终止内存块中数据记录索引的记录数值进行更新;在更新后的记录数值小于等于零的情况下,基于所述存储链路确定与所述终止内存块对应的前序内存块,并释放所述终止内存块;根据释放结果和所述前序内存块更新所述存储链路,并基于更新后的存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
基于此,在进行事务回滚时,采用栈的思想,即按照与数据写入顺序相反的顺序进行事务回滚。确定存储链路中末尾位置的内存块,在事务记录表中确定末尾位置的事务记录,在末尾位置的事务记录为回撤记录的情况下,在存储链路中确定回撤记录对应的末尾位置的内存块为终止内存块,并对终止内存块中数据记录索引的记录数值进行减一操作,在更新后的记录数值小于等于零的情况下,基于存储链路确定与终止内存块对应的前一个内存块,并释放终止内存块,对存储链路进行更新,并基于更新后的存储链路在内存对象包含的内存块中读取目标事务对应的目标数据。
沿用上例,存储链路中内存块的排列顺序为01内存块、03内存块和06内存块。在进行事务回滚时,按照与数据写入顺序相反的顺序进行事务回滚。存储链路中末尾位置的内存块为06内存块,事务记录表中记录了10条记录,读取第10条记录,在第10条记录为撤销记录的情况下,对06内存块中记录数值records做减一操作,在记录数值减一后小于等于零的情况下,表示06内存块中不再包含目标事务对应的数据,可以将06内存块释放,此时存储链路中仅包含01内存块和03内存块,再对事务记录中的记录继续进行读取和处理,直到完成事务回滚,读取更新后的事务记录表对应的数据作为目标数据。
综上所述,通过建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据有序存储至内存对象包含的内存块,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,实现了数据的有序读取,减少读取的文件字节数,提高数据读取效率。从而在读写混合时,提高读写效率,降低性能开销。
下述结合附图4,以本说明书提供的事务处理方法在数据同步的应用为例,对所述事务处理方法进行进一步说明。其中,图4示出了根据本说明书一实施例提供的一种应用于数据同步的事务处理方法的处理流程图,具体包括以下步骤:
步骤S402,响应于数据同步请求,读取关系数据库的数据库日志中存储的目标日志记录。
Oracle数据库通过Redo日志来保证数据库的事务可以被重演,从而使得在故障之后,数据可以被恢复。在基于Redo日志进行CDC数据同步时,需要对事务进行完整的分析,包括多数据块合并,数据回滚(撤回对应的行)等操作。在进行数据同步时,读取Oracle数据库日志中的日志记录。
步骤S404,对目标日志记录进行解析,根据解析结果确定目标事务。
步骤S406,根据数据文件的数据量选择至少一个文件槽,由至少一个文件槽组成目标事务对应的数据存储对象。
在数据文件包含100M数据的情况下,可以将文件平均切分成10分,每一份(文件偏移位)与文件槽进行一一对应。与数据文件对应的10个文件槽组成数据存储对象。
步骤S408,在数据存储对象中确定第i文件槽,将数据文件中未被存储的数据存储至第i文件槽,其中,i从1开始取值且为正整数。
步骤S410,在第i文件槽处于写满状态且数据文件中包含未被存储的数据的情况下,i按序自增,并执行步骤S408。
步骤S412,在数据文件中不包含未被存储的数据的情况下,完成数据存储。
通过事务号xid定位文件槽信息,在10个文件槽组成的数据存储对象中找到第一个不被使用的文件槽,新建事务和文件槽之间的映射信息;获取当前事务的信息,如果事务的first_slot单元指向为空,则将事务的first_slot单元和last_slot单元均指向第一个不被使用的文件槽的slot,直到此文件槽写存满数据,则从数据存储对象中找到下一个不被使用的文件槽,并将事务的last_slot指向该文件槽。计算文件映射偏移量,通过Mmap映射数据文件至进程内存,向映射空间拷贝当前Redo日志记录的数据。
通过Mmap将数据文件映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系,加速数据的读写效率,当进程出现异常退出后,数据能快速恢复,保证整个缓存系统的数据可靠性。
步骤S414,按照存储链路中文件槽排列顺序在数据存储对象包含的文件槽中读取目标事务对应的目标数据。
10个文件槽组成数据存储对象,每个文件槽顺次链接构成双向的存储链路,从而便于基于存储链路进行数据读取。
步骤S416,在目标事务的事务记录表中确定第j事务记录;
Oracle数据库Redo日志记录回滚采用的是栈的思想,即写入、回滚顺序严格一致,即先进后出后进先出;基于该特性,在处理回撤时,直接修改数据,无须操作缓存文件的真实数据,做到极高的效率。
实际应用中,通过事务号确定文件槽,确定事务对应的数据存储对象中末尾位置的文件槽,即,确定事务的last_slot单元指向的文件槽。
步骤S418,判断第j事务记录是否为回撤记录;若是,执行步骤S420;若否,执行步骤S422。
步骤S420,基于第j事务记录对事务记录表进行更新,将更新后的事务记录表作为事务记录表,j按序自增。
步骤S422,基于存储链路在数据存储对象包含的文件槽中确定第j事务记录对应的第j数据,j按序自增。
步骤S424,判断j是否自增至k;若是,执行步骤S426;若否,执行步骤S416。
步骤S426,将确定的数据作为目标数据,其中,j从1开始取值直至为k且为正整数,k为事务记录表中事务记录的数量。
步骤S428,在事务记录为回撤记录的情况下,在存储链路中确定回撤记录对应的终止文件槽,并对终止文件槽中数据记录索引的记录数值进行更新。
在事务记录为回撤记录的情况下,对文件槽中数据计数:m_records做减1操作,如果m_records减1后小于等于0,修改事务的指向信息,释放当前文件槽,事务中last_slot单元均指向当前文件槽的上一文件槽。
步骤S430,在更新后的记录数值小于等于零的情况下,基于存储链路确定与终止文件槽对应的前序文件槽,并释放终止文件槽。
步骤S432,根据释放结果和前序文件槽更新存储链路,基于更新后的存储链路在数据存储对象包含的文件槽中读取目标事务对应的目标数据进行数据同步。
本说明书一实施例采用Mmap技术优化文件IO,通过Slot思想确保Redo日志记录数据能一定程度上有序写入,避免文件随机IO带来的性能开销,同时采用元数据定位数据文件,类似数据库索引技术,在按事务扫描数据时极大减少读取的文件字节数,提高扫描效率。
综上所述,本说明书一实施例通过建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据有序存储至内存对象包含的内存块,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,实现了数据的有序读取,减少读取的文件字节数,提高数据读取效率。从而在读写混合时,提高读写效率,降低性能开销。
与上述方法实施例相对应,本说明书还提供了事务处理装置实施例,图5示出了根据本说明书一实施例提供的一种事务处理装置的结构示意图,本实施例提供的事务处理装置应用于数据库管理端,所述数据库管理端用于管理关系数据库。如图5所示,该装置包括:
第一确定模块502,被配置为基于所述关系数据库的数据库日志确定目标事务;
第二确定模块504,被配置为在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象;
存储模块506,被配置为建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路;
读取模块508,被配置为基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
一个可选地实施例中,所述第一确定模块502,进一步被配置为:
响应于数据处理请求,读取所述关系数据库的数据库日志中存储的日志记录,根据读取结果确定目标日志记录;对所述目标日志记录进行解析,根据解析结果确定目标事务。
一个可选地实施例中,所述第二确定模块504,进一步被配置为:
确定所述数据文件的数据量;根据所述数据量在所述内存空间中申请至少一个内存块,由至少一个内存块组成所述目标事务对应的内存对象。
一个可选地实施例中,所述存储模块506,进一步被配置为:
在所述内存对象中确定第i内存块,基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块,其中,i从1开始取值且为正整数;在第i内存块处于写满状态且所述数据文件中包含未被存储的数据的情况下,i按序自增,并执行所述基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块的步骤;直至所述数据文件中不包含未被存储的数据,执行所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务的步骤。
一个可选地实施例中,所述存储模块506,进一步被配置为:
所述存储链路中内存块对应的节点之间具有链接存储关系,存储数据的内存块的索引信息包含标记索引项,状态索引项,数据索引项,前关联索引项和后关联索引项;
其中,所述存储链路中的两个相邻内存块通过所述前关联索引项和所述后关联索引项进行链接。
一个可选地实施例中,所述读取模块508,进一步被配置为:
基于所述存储链路确定内存块排列顺序;按照所述内存块排列顺序在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
一个可选地实施例中,所述读取模块508,还被配置为:
在所述目标事务执行完成的情况下,释放所述内存对象中的内存块。
一个可选地实施例中,所述读取模块508,进一步被配置为:
对所述目标事务对应的事务记录表中包含的事务记录进行合并,根据合并结果确定目标事务记录表;基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务记录表对应的目标数据。
一个可选地实施例中,所述读取模块508,进一步被配置为:
在所述目标事务的事务记录表中确定第j事务记录;判断所述第j事务记录是否为回撤记录;若是,基于所述第j事务记录对所述事务记录表进行更新,将更新后的事务记录表作为所述事务记录表,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;若否,基于所述存储链路在所述内存对象包含的内存块中确定所述第j事务记录对应的第j数据,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;直至j自增至k,将确定的数据作为所述目标数据,其中,j从1开始取值直至为k且为正整数,k为所述事务记录表中事务记录的数量。
一个可选地实施例中,所述读取模块508,还被配置为:
在所述事务记录为回撤记录的情况下,在所述存储链路中确定所述回撤记录对应的终止内存块,并对所述终止内存块中数据记录索引的记录数值进行更新;在更新后的记录数值小于等于零的情况下,基于所述存储链路确定与所述终止内存块对应的前序内存块,并释放所述终止内存块;根据释放结果和所述前序内存块更新所述存储链路,并基于更新后的存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
综上所述,本说明书一实施例通过建立目标事务、内存对象和数据文件之间的映射关系,并基于映射关系将数据文件中的数据有序存储至内存对象包含的内存块,实现了数据的有序写入,避免随机写入带来的性能开销;在进行数据读取时,基于存储链路在内存对象包含的内存块中读取目标事务对应的目标数据,实现了数据的有序读取,减少读取的文件字节数,提高数据读取效率。从而在读写混合时,提高读写效率,降低性能开销。
上述为本实施例的一种事务处理装置的示意性方案。需要说明的是,该事务处理装置的技术方案与上述的事务处理方法的技术方案属于同一构思,事务处理装置的技术方案未详细描述的细节内容,均可以参见上述事务处理方法的技术方案的描述。
图6示出了根据本说明书一实施例提供的一种计算设备600的结构框图。该计算设备600的部件包括但不限于存储器610和处理器620。处理器620与存储器610通过总线630相连接,数据库650用于保存数据。
计算设备600还包括接入设备640,接入设备640使得计算设备600能够经由一个或多个网络660通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备640可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备600的上述部件以及图6中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图6所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备600可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备600还可以是移动式或静止式的服务器。
其中,处理器620用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述事务处理方法的步骤。
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的事务处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述事务处理方法的技术方案的描述。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现上述事务处理方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的事务处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述事务处理方法的技术方案的描述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。

Claims (13)

1.一种事务处理方法,其特征在于,应用于数据库管理端,所述数据库管理端用于管理关系数据库,包括:
基于所述关系数据库的数据库日志确定目标事务;
在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象;
建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路;
基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
2.根据权利要求1所述的方法,其特征在于,所述基于所述关系数据库的数据库日志确定目标事务,包括:
响应于数据处理请求,读取所述关系数据库的数据库日志中存储的日志记录,根据读取结果确定目标日志记录;
对所述目标日志记录进行解析,根据解析结果确定目标事务。
3.根据权利要求1所述的方法,其特征在于,所述在内存空间中确定与所述目标事务对应的内存对象,包括:
确定所述数据文件的数据量;
根据所述数据量在所述内存空间中申请至少一个内存块,由至少一个内存块组成所述目标事务对应的内存对象。
4.根据权利要求1所述的方法,其特征在于,所述基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块,包括:
在所述内存对象中确定第i内存块,基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块,其中,i从1开始取值且为正整数;
在第i内存块处于写满状态且所述数据文件中包含未被存储的数据的情况下,i按序自增,并执行所述基于所述映射关系将所述数据文件中未被存储的数据存储至所述第i内存块的步骤;
直至所述数据文件中不包含未被存储的数据,执行所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务的步骤。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述存储链路中内存块对应的节点之间具有链接存储关系,存储数据的内存块的索引信息包含标记索引项,状态索引项,数据索引项,前关联索引项和后关联索引项;
其中,所述存储链路中的两个相邻内存块通过所述前关联索引项和所述后关联索引项进行链接。
6.根据权利要求1所述的方法,其特征在于,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
基于所述存储链路确定内存块排列顺序;
按照所述内存块排列顺序在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
7.根据权利要求1所述的方法,其特征在于,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务步骤执行之后,还包括:
在所述目标事务执行完成的情况下,释放所述内存对象中的内存块。
8.根据权利要求1所述的方法,其特征在于,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
对所述目标事务对应的事务记录表中包含的事务记录进行合并,根据合并结果确定目标事务记录表;
基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务记录表对应的目标数据。
9.根据权利要求1所述的方法,其特征在于,所述基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,包括:
在所述目标事务的事务记录表中确定第j事务记录;
判断所述第j事务记录是否为回撤记录;
若是,基于所述第j事务记录对所述事务记录表进行更新,将更新后的事务记录表作为所述事务记录表,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;
若否,基于所述存储链路在所述内存对象包含的内存块中确定所述第j事务记录对应的第j数据,j按序自增,并执行所述在所述目标事务的事务记录表中确定第j事务记录的步骤;
直至j自增至k,将确定的数据作为所述目标数据,其中,j从1开始取值直至为k且为正整数,k为所述事务记录表中事务记录的数量。
10.根据权利要求9所述的方法,其特征在于,还包括:
在所述事务记录为回撤记录的情况下,在所述存储链路中确定所述回撤记录对应的终止内存块,并对所述终止内存块中数据记录索引的记录数值进行更新;
在更新后的记录数值小于等于零的情况下,基于所述存储链路确定与所述终止内存块对应的前序内存块,并释放所述终止内存块;
根据释放结果和所述前序内存块更新所述存储链路,并基于更新后的存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据。
11.一种事务处理装置,其特征在于,应用于数据库管理端,所述数据库管理端用于管理关系数据库,包括:
第一确定模块,被配置为基于所述关系数据库的数据库日志确定目标事务;
第二确定模块,被配置为在所述关系数据库中确定与所述目标事务对应的数据文件,以及在内存空间中确定与所述目标事务对应的内存对象;
存储模块,被配置为建立所述目标事务、所述内存对象和所述数据文件之间的映射关系,并基于所述映射关系将所述数据文件中的数据存储至所述内存对象包含的内存块;其中,存储数据的内存块构成存储链路;
读取模块,被配置为基于所述存储链路在所述内存对象包含的内存块中读取所述目标事务对应的目标数据,用于执行所述目标事务。
12.一种计算设备,其特征在于,包括存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,以实现权利要求1至10任意一项所述事务处理方法的步骤。
13.一种计算机可读存储介质,其存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1至10任意一项所述事务处理方法的步骤。
CN202310334624.6A 2023-03-24 2023-03-24 事务处理方法及装置 Pending CN116450751A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310334624.6A CN116450751A (zh) 2023-03-24 2023-03-24 事务处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310334624.6A CN116450751A (zh) 2023-03-24 2023-03-24 事务处理方法及装置

Publications (1)

Publication Number Publication Date
CN116450751A true CN116450751A (zh) 2023-07-18

Family

ID=87134966

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310334624.6A Pending CN116450751A (zh) 2023-03-24 2023-03-24 事务处理方法及装置

Country Status (1)

Country Link
CN (1) CN116450751A (zh)

Similar Documents

Publication Publication Date Title
US7418544B2 (en) Method and system for log structured relational database objects
US9953051B2 (en) Multi-version concurrency control method in database and database system
US9047330B2 (en) Index compression in databases
US8560500B2 (en) Method and system for removing rows from directory tables
CN110879813A (zh) 一种基于二进制日志解析的MySQL数据库增量同步实现方法
US9471622B2 (en) SCM-conscious transactional key-value store
US8380663B2 (en) Data integrity in a database environment through background synchronization
US11314719B2 (en) Method for implementing change data capture in database management system
WO2019184618A1 (zh) 数据存储的方法、装置、服务器和存储介质
CN102955792A (zh) 一种实时全文搜索引擎事务处理的实现方法
US20200019474A1 (en) Consistency recovery method for seamless database duplication
CN112000649B (zh) 一种基于map reduce的增量数据同步的方法和装置
CN109933564A (zh) 基于链表和N-ary树结构实现快速回滚的文件系统管理方法、装置、终端、介质
CN115935020A (zh) 一种图数据存储方法和装置
US11003540B2 (en) Method, server, and computer readable medium for index recovery using index redo log
CN109189759A (zh) Kv存储系统中的数据读取方法、数据查询方法、装置及设备
CN111522791A (zh) 一种分布式文件重复数据删除系统及方法
CN113761059A (zh) 数据处理方法及装置
CN113867627A (zh) 一种存储系统性能优化方法及系统
CN112699187A (zh) 关联数据处理方法、装置、设备、介质及产品
CN109213760B (zh) 非关系数据存储的高负载业务存储及检索方法
CN115469810A (zh) 一种数据获取方法、装置、设备及存储介质
CN116450751A (zh) 事务处理方法及装置
CN111949439B (zh) 基于数据库的数据文件更新方法和装置
CN114063935B (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