CN115145697B - 数据库事务的处理方法、装置及电子设备 - Google Patents
数据库事务的处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN115145697B CN115145697B CN202210793116.XA CN202210793116A CN115145697B CN 115145697 B CN115145697 B CN 115145697B CN 202210793116 A CN202210793116 A CN 202210793116A CN 115145697 B CN115145697 B CN 115145697B
- Authority
- CN
- China
- Prior art keywords
- database
- log
- cache
- transaction
- database transaction
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据库事务的处理方法、装置、电子设备及计算机可读存储介质,涉及数据库领域。该方法包括:接收数据处理请求,数据处理请求包括待处理的数据库事务;对于每个数据库事务,生成数据库事务对应的至少一个日志,将各个日志存储至分布式的日志存储***;对于数据库事务的每个日志,在分布式缓存中更新与日志对应的缓存页面,当确定分布式缓存中更新完成数据库事务对应的各个缓存页面时,将各个日志落库;根据落库的各个日志执行数据库事务。本申请实施例保障应用***在业务无感的情况实现数据强一致性保障以及数据隔离。
Description
技术领域
本申请涉及数据库技术领域,具体而言,本申请涉及一种数据库事务的处理方法、装置及电子设备。
背景技术
目前微服务之间的分布式事务***,在处理一个业务请求时需要涉及到向多个事务对应的数据库中读数据或写数据。在实际实现过程中,可能某一事务被认定为执行失败,但事实上该事务对应的数据库中的数据已经完成了更新,最终将导致事务处理结果与数据库中的数据不一致的问题。分布式事务***中关于数据不一致的问题,一直是本领域技术人员研究的热点问题。
为了保证分布式事务***中数据一致性的问题,最首要的是要将事务和数据隔离进行管理,将二者隔离管理在后续出现事务处理结果与数据不一致的问题时,才可以通过将数据库中的数据进行回退、或者技术人员手动校正等手段,将事务处理结果与数据库中管理的数据调整一致。
可见,目前迫切需要本领域技术人员提供一种将事务和数据隔离管理的技术手段。
发明内容
本申请实施例提供了一种数据库事务的处理的方法、装置及电子设备,可以解决现有技术的上述问题。所述技术方案如下:
根据本申请实施例的一个方面,提供了一种数据库事务的处理方法,该方法包括:
接收数据处理请求,所述数据处理请求包括待处理的数据库事务;
对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至分布式的日志存储***;
对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,当确定分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将所述各个日志存储至数据库;
根据数据库的所述各个日志执行所述数据库事务。
根据本申请实施例的另一个方面,提供了一种数据库事务的处理装置,该装置包括:
数据请求接收模块,用于接收数据处理请求,所述数据处理请求包括待处理的数据库事务;
缓存更新模块,用于对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至日志存储***;
存储至数据库模块,用于对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,当确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将所述各个日志存储至数据库;
事务执行模块,用于根据数据库的所述各个日志执行所述数据库事务。
根据本申请实施例的另一个方面,提供了一种电子设备,该电子设备包括:存储器、处理器及存储在存储器上的计算机程序,处理器执行计算机程序以实现上述的数据库事务的处理方法的步骤
根据本申请实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述的数据库事务的处理方法的步骤。
根据本申请实施例的一个方面,提供了一种计算机程序产品,该计算机程序被处理器执行时实现上述的数据库事务的处理方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:
通过接收数据处理请求,所述数据处理请求包括待处理的数据库事务,对于每个数据库事务,生成所述数据库事务对应的至少一个日志,通过日志记录业务数据何时修改、修改前值和修改后值,将日志写入分布式的日志存储***,相比非分布式的日志存储***存在的单机性能瓶颈,考虑了***容灾风险,有效保证高可用性,利用分布式日志存储***集群机制保证高可用,通过在分布式缓存中更新日志对应的缓存页面,当确定所述缓存中更新完成所述数据库事务对应的各个缓存页面时将所述各个日志存储至数据库,可以提高***性能(例如日志的访问效率),由于是基于存储至数据库的日志执行数据库事务,而非在接收数据处理请求时直接根据数据库事务对数据库进行操作,实现了业务(数据)和事务的隔离管理,为后续在面对数据不一致问题时,快速在数据库中进行回退、校正奠定基础,本方案对业务侵入性更弱。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的数据库事务的处理方法的流程示意图;
图2为本申请实施例提供的一种在缓存中更新缓存页面的流程图;
图3为本申请实施例提供的一种日志存储至数据库的流程示意图;
图4为本申请实施例提供的一种基于文件索引记录数据库中日志的流程示意图;
图5为本申请实施例提供的一种基于检查点清理存数据库中的日志的流程示意图;
图6为本申请实施例提供的一种进行数据恢复的流程示意图;
图7为本申请实施例提供的一种数据库事务的处理装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
1)MVCC(Multi-Version Concurrency Control):多版本并发控制,是一种并发控制的方法,一般在数据库管理***中,实现对数据库的并发访问,在编程语言中实现事务内存。
2)脏页,不能直接修改硬盘上的数据,而是先将数据从硬盘读入到内存的datacache,然后在内存中修改(被修改过的页称为脏数据页),最后再从内存回写到硬盘
3)预写日志(Write Ahead Log,WAL)是关系型数据库中用于实现事务性和持久性的一系列技术。简单来说就是做一个操作之前先将这件事情记录下来。
本申请提供的数据库事务的处理方法、装置、电子设备、计算机可读存储介质以及计算机程序产品,旨在解决现有技术的如上技术问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图1为本申请实施例提供了一种数据库事务的处理方法的流程示意图,如图1所示,该方法包括:
S101、接收数据处理请求,所述数据处理请求包括待处理的数据库事务。
本申请实施例的数据库事务(transaction)是指访问并可能操作各种数据项的一个数据库操作序列,也即数据库事务包括了至少一个对数据项进行操作的操作指令。
S102、对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至分布式的日志存储***。
一个数据处理请求可以包括至少一个待处理的数据库事务,相应的,一个待处理的数据库事务,也可以生成至少一个日志,每个日志包括至少一个操作指令。本申请实施例将通过日志记录被修改数据实体的旧值、新值以及操作类型。
本申请实施例的分布式日志存储***可以为BookKeeper管理器,BookKeeper管理器是一个提供日志条目流存储持久化的服务框架。常用语日志流存储,本申请实施例考虑到分布式体系下的单机性能瓶颈以及***容灾,引入分布式的日志存储***的集群机制来保证整个***的高可用。
在一些实施例中,通过进一步考虑到磁盘顺序写入效率最高,因此本申请的日志可以为wal日志,利用wal日志的连续写入功能,以顺序追加写的方式保障最大的磁盘IO使用效率,提高写效率。
在一些实施例中,分布式的日志存储***中存储了缓存页面的编号、版本号、缓存页面对应的日志的编号(用于定序)以及时间信息(用于确定LRU状态记录点)等信息。
S103、对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,当确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时将所述各个日志存储至数据库。
本申请实施例通过分布式缓存中更新日志的缓存页面,提升了日志的访问效率,也即提升了事务的整体效率,在确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将各个日志落库,为后续将数据库事务转化为业务数据进行落库(即存储至数据库)奠定基础。日志即将日志存储至数据库中。
S104、根据存储至数据库的所述各个日志执行所述数据库事务。
本申请实施例通过接收数据处理请求,所述数据处理请求包括待处理的数据库事务,对于每个数据库事务,生成所述数据库事务对应的至少一个日志,通过日志记录业务数据何时修改、修改前值和修改后值,将日志写入分布式的日志存储***,相比非分布式的日志存储***存在的单机性能瓶颈,考虑了***容灾风险,有效保证高可用性,利用分布式日志存储***集群机制保证高可用,通过在分布式缓存中更新日志对应的缓存页面,当确定所述缓存中更新完成所述数据库事务对应的各个缓存页面时将所述各个日志存储至数据库,可以提高***性能(日志的访问效率),由于是基于存储至数据库的日志执行数据库事务,而非在接收数据处理请求时直接根据数据库事务对数据库进行操作,实现了业务(数据)和事务的隔离管理,为后续在面对数据不一致问题时,快速在数据库中进行回退、校正奠定基础,本方案对业务侵入性更弱
需要注意的是,一方面日志源源不断地存储至Bookkeeper管理器的,另一方面日志存储***中存储的日志也不断被消费(即更新缓存页面)。
本申请实施例考虑到直接对数据进行修改效率更低,所以借鉴数据库的MVCC机制,通过分布式缓存中缓存的脏页数据来提高访问效率,MVCC机制可以更好地处理读-写冲突,也就是为事务分配单向增长的时间戳,并且为每个操作项保存一个版本,版本与事务的时间戳关联,读操作只读该事务开始前的数据库的快照。
在上述各实施例的基础上,作为一种可选实施例,在分布式缓存中更新与所述日志对应的至少一个缓存页面,包括:
S201、确定所述数据库事务对应的事务标识以及所述数据库事务对应的各个缓存页面的版本号;
S202、根据所述事务标识和所述版本号,基于MVCC机制确定所述各个缓存页面在所述分布式缓存中的存储区域,将所述各个缓存页面存储至对应的存储区域;
S203、开启各个所述缓存页面对应的读写锁,并根据所述日志更新对应的缓存页面,当所述数据库事务提交成功或失败时,释放所述数据库事务对应的各个读写锁。
当事务开始执行时,创建该事务对应的事务标识,事务标识能够唯一地表示一个事务,即当事务对应的日志存储至Bookkeeper管理器时,事务就具有对应的事务标识。
由于本申请是批量地处理数据库事务,在缓存中更新日志对应的缓存页面时,会先确定处理中的每个事务对应的事务标识以及第二日志。针对每个日志,创建对应的缓存页面,本申请创建缓存页面的方式包括复制和新建两种方式,复制,即对缓存中已有的缓存页面进行复制,复制前后的缓存页面的版本号相同,而新建即在缓存中新建一个缓存页面,该新建的缓存页面的版本号是全新的。
本申请实施例利用MVCC机制实现缓存页面的隔离能力,每个缓存页面根据事务标识以及版本号进行绑定,来隔离脏页表里的存储区域,具体而言,即对于同一个事务标识的事务,当相关的日志确定的各个缓存页面的版本号存在差异时,各个缓存页面需要存储在不同的存储区域中。
在创建缓存页面后,需要对缓存页面开启对应的读写锁,对于开启读写锁的缓存页面,只有一个线程能够对该缓存页面进行写操作,而其他线程只能进行读操作,这样就避免了因多线程并发时对脏页数据争抢导致的隔离性问题。应当理解的是,由于日志中记录具体的操作指令,因此可以根据该操作质量对缓存页面进行更新。
由于数据库事务具有原子性,事务中的多个数据库操作是一个不可分割的原子单元整体,只有所有的操作执行成功,整个事务才提交,因此当数据库事务提交成功,或者提交失败时,才会释放目标数据库事务的所有读写锁。
请参见图2,其示例性地示出了本申请实施例在缓存中更新缓存页面的流程图,如图所示,包括:
响应于日志存储***(例如Bookkeeper管理器)中更新某数据库事务的LSN1状态记录点,创建该事务的事务标识以及ledger,当Bookkeeper管理器中更新LSN1状态记录点时,表示该事务开启;
本申请通过追踪更新的状态记录点,从而在不同的时机自动执行相应的处理;
根据创建的事务标识,逐个将该数据库事务对应的日志写入Bookkeeper管理器;
对当前写入Bookkeeper管理器的日志,在脏页表中复制或创建缓存页面;
对缓存页面设置分布式锁,并对缓存页面进行更新;
在缓存页面更新后判断该数据库事务是否还有日志未处理,若有,则重复上述写入Bookkeeper管理器的步骤,若没有,则Bookkeeper管理器中会针对该数据库事务更新LSN2状态记录点,LSN2状态记录点表示数据库事务已经关闭,该数据库事务的所有日志的缓存页面均已更新完成,封账并释放读写锁。
需要说明的是,LSN1和LSN2联合起来标识一组完整的事务数据,如果一个数据库事务仅有LSN1,没有LSN2,说明该数据库事务异常退出,此时执行恢复操作时事务进行回退。
在上述各实施例的基础上,作为一种可选实施例,将所述各个日志存储至数据库,包括:
S301、若确定所述日志存储***的可用空间、所述分布式缓存的可用空间以及所述各个缓存页面的利用率中的一种符合预设条件,则从所述分布式缓存中获取所述各个缓存页面;
S302、将所述各个缓存页面以及与所述各个缓存页面存在关联的附加缓存页面,作为目标缓存页面;
S303、确定与所述目标缓存页面对应的日志,将与所述目标缓存页面对应的日志存储至数据库
具体地,本申请实施例可以设置针对日志存储***的可用空间的第一预设阈值、针对缓存的可用空间的第二预设阈值以及针对缓存页面的利用率的第三预设阈值,当日志存储***的可用空间达到第一预设阈值,说明日志存储***中存储的日志较多,需要对日志存储***中的日志进行清理,当缓存的可用空间达到第二预设阈值,说明缓存中的缓存页面较多,需要对缓存页面进行清理,当一个缓存页面的利用率达到第三预设阈值时,说明该缓存页面被利用的次数太多了,也需要及时进行清理。
本申请实施例主要针对日志存储至数据库,这样在日志存储至数据库后,既可以将日志存储***中存储的该日志,以及在缓存页面中更新的该日志对应的缓存页面进行清理。
由于数据库事务通常是对数据库的一系列具有继承关系的修改,因此对于步骤S102更新的各个缓存页面,需要确定与之存在关联关系的缓存页面,从而完整地将相关的日志存储至数据库(也即存储至数据库)。
请参见图3,其示例性地示出了本申请实施例日志存储至数据库的流程示意图,如图3所示,通过定时任务的方式,对各个数据库事务进行相关处理,由于Bookkeeper管理器中所有的ledger是自排序的,因此可以根据ledger的编号由小到大依次处理即可,定时任务定期检测Bookkeeper管理器的可用空间、缓存的可用空间和/或各个缓存页面的利用率中的一种是否符合预设条件,只要有一个维度的信息符合条件,即开始日志存储至数据库——首先从缓存的脏页表中获得各个缓存页面,通过分析各个缓存页面之间的关联关系,确定缓存页面对应的日志的编号,基于该编号从Bookkeeper管理器中获取相应的日志进行存储至数据库,并在Bookkeeper管理其中更新第三状态记录点(LSN3)。
在上述各实施例的基础上,作为一种可选实施例,根据存储至数据库的所述各个日志执行所述数据库事务,包括:
S401、将所述各个日志记录至第一文件索引,以根据所述第一文件索引记录的所述各个日志在所述数据库执行对应的数据库事务;
S402、当所述各个日志对应的数据库事务处理完成时,在第二文件索引中记录所述各个日志,并在所述第一文件索引中删除所述各个日志。
本申请实施例通过第一文件索引记录存储至数据库的日志,当日志对应的数据库事务处理完成时,再利用第二文件索引记录上述日志,这样的好处就是如果出现数据库事务执行失败时,可以根据第一文件索引中记录的日志进行复原,当数据库事务执行成功时,再将第一文件索引中的日志删除,可有效避免数据清理失败时回退失败的问题。
请参见图4,其示例性地示出了本申请实施例基于文件索引记录数据库中日志的流程示意图,如图所示,当日志存储至数据库后,日志将以数据文件的形式记录在数据库中,将数据文件的信息登记在第一文件索引中,根据LSN3的日志修改相应的数据文件,即数据存储至数据库的过程,当数据成功存储至数据库后,在Bookkeeper管理器中新建第四状态记录点(LSN4),在第二文件索引中登记需要清理的日志,同时将第二文件索引中记录的日志的信息在第一文件索引中解登记。
在上述各实施例的基础上,作为一种可选实施例,将所述各个日志存储至数据库,之后还包括:
当所述各个日志开始存储至数据库时,建立新的检查点;
当所述各个日志完成存储至数据库时,清理所述新的检查点与上一个检查点期间存储至数据库的日志。
具体地,清理新的检查点的前一个历史检查点存储至数据库的各个日志,包括:在数据库中删除第二文件索引中记录的各个日志;根据第一文件索引记录的各个日志在数据库执行对应的数据库事务,之后还包括:当任意一个数据修改失败时,在数据库中恢复第一文件索引中的各个日志。
需要说明的是,本申请通过建立检查点记录上一次的成功合并后的数据镜像点,每次进行数据合并时防止由于异常导致无法回退。每次依据日志进行合并成功后即创建一个新的检查点,替换原有的检查点,之后从上一次检查点到新检查点之间的日志就可以进行清理了,此时只要把相关日志登记到第一文件索引里即可。如果数据合并时发生错误,就在最近一次检查点上重新进行wal数据合并。
请参见图5,其示例性地示出了本申请基于检查点清理存储至数据库日志的流程示意图,如图所示,通过定时任务定期开启清理进程,从数据库中确定最近一次创建的检查点之前更新的日志文件进行清除,并对第二文件索引中记录的日志进行解登记,建立与最近一次创建的检查点之后更新的日志文件对应的新的检查点,在Bookkeeper管理器中更新第五状态记录点(LSN5)并根据新的检查点修改检查点登记表,本申请可以通过检查点登记表记录每一个检查点以及对应的日志。
在上述各实施例的基础上,作为一种可选实施例,本申请实施例还包括:
在所述日志存储***中记录状态记录点;具体地,本申请实施例的状态记录点包括记录数据库事务开启执行的第一状态记录点;记录数据库事务关闭执行的第二状态记录点;记录数据库事务对应的各个日志完成存储至数据库的第三状态记录点;记录数据库事务完成的第四状态记录点;记录检查点处理成功的第五状态记录点。
建立与各个状态记录点对应的异常判断规则和数据恢复规则;
当各个状态记录点更新时,若根据对应的异常判断规则确定数据库事务执行异常,则根据对应的数据恢复规则进行数据恢复。
如果程序在运行过程中任意一个进程发生宕机都会导致数据出现异常,因此需要进行相关的监控和数据恢复,主要流程如下:
利用状态记录点记录事务主进程、落库进程、清理进程以及合并进程,一方面用于监控,如果发现状态记录点没有更新就说明相关进程宕机,另一方面可以通过状态记录点校验确定最后一次处理是否正常,同时通过不同的状态记录点的确认,需要执行不同的数据恢复流程。
请参见图6,其示例性地示出了本申请进行数据恢复的流程示意图,如图所示,包括:
当Bookkeeper管理器中更新LSN5状态记录点时,执行LSN5状态记录点对应的异常判断规则:对检查点文件进行校验,若没有检查点文件则进行报警并记录;
若存在检查点文件,则执行LSN4状态记录点对应的异常判断规则:检查全部数据文件以及落盘的日志的MD5值、第一文件索引中的各日志是否全部完成,若上述MD5值有误或者日志没有全部完整,则进行报警并记录;
如果状态记录点LSN3和状态记录点LSN4均正常,则基于状态记录点LSN4和日志回复数据文件;
如果状态记录点LSN3和状态记录点LSN4至少一个不正常,则判断LSN3和5是否均正常,若不是,则确定数据恢复失败,若是,则由检查点和所有LSN日志恢复数据文件,并由基于状态记录点LSN4和日志回复数据文件;
在基于状态记录点LSN4和日志回复数据文件后,生成新的检查点,并开启清理锁,清理所有ledger、文件以及数据库中的日志,数据恢复结束。
本申请实施例提供了一种数据库事务的处理装置,如图7所示,该数据库事务的处理装置可以包括:数据请求接收模块101、缓存更新模块102、落库模块103以及事务执行模块104,其中,
数据请求接收模块101,用于接收数据处理请求,所述数据处理请求包括待处理的数据库事务;
缓存更新模块102,用于对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至日志存储***;
存储至数据库模块103,用于对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,当确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将所述各个日志存储至数据库;
事务执行模块104,用于根据存储至数据库的所述各个日志执行所述数据库事务。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现数据库事务的处理的步骤,与相关技术相比可实现:通过接收数据处理请求,所述数据处理请求包括待处理的数据库事务,对于每个数据库事务,生成所述数据库事务对应的至少一个日志,通过日志记录业务数据何时修改、修改前值和修改后值,将日志写入分布式的日志存储***,相比非分布式的日志存储***存在的单机性能瓶颈,考虑了***容灾风险,有效保证高可用性,利用分布式日志存储***集群机制保证高可用,通过在分布式缓存中更新日志对应的缓存页面,当确定所述缓存中更新完成所述数据库事务对应的各个缓存页面时将所述各个日志存储至数据库,可以提高***性能(日志的访问效率),由于是基于存储至数据库的日志执行数据库事务,而非在接收数据处理请求时直接根据数据库事务对数据库进行操作,实现了业务(数据)和事务的隔离,本方案对业务侵入性更弱。
在一个可选实施例中提供了一种电子设备,如图8所示,图8所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器4003用于存储执行本申请实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (10)
1.一种数据库事务的处理方法,其特征在于,包括:
接收数据处理请求,所述数据处理请求包括待处理的数据库事务;
对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至分布式的日志存储***,所述分布式的日志存储***为Bookkeeper管理器;
对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,所述缓存页面为Ledger;
当确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将所述各个日志存储至数据库;
根据数据库中的所述各个日志执行所述数据库事务;其中,在分布式缓存中更新与所述日志对应的缓存页面,包括:
确定所述数据库事务对应的事务标识以及所述数据库事务对应的各个缓存页面的版本号;
根据所述事务标识和所述版本号,确定所述各个缓存页面在所述分布式缓存中的存储区域,将所述各个缓存页面存储至对应的存储区域;
开启各个所述缓存页面对应的读写锁,并根据所述日志更新对应的缓存页面,当所述数据库事务提交成功或失败时,释放所述数据库事务对应的各个读写锁。
2.根据权利要求1所述的方法,其特征在于,所述将所述各个日志存储至数据库,包括:
若确定所述日志存储***的可用空间、所述分布式缓存的可用空间以及所述各个缓存页面的利用率中的一种符合预设条件,则从所述分布式缓存中获取所述各个缓存页面;
将所述各个缓存页面以及与所述各个缓存页面存在关联的附加缓存页面,作为目标缓存页面;
确定与所述目标缓存页面对应的日志,将与所述目标缓存页面对应的日志存储至数据库。
3.根据权利要求2所述的方法,其特征在于,所述若确定所述日志存储***的可用空间、所述分布式缓存的可用空间以及所述各个缓存页面的利用率中的一种符合预设条件,包括:
若所述日志存储***的可用空间小于第一预设阈值、所述分布式缓存的可用空间小于第二预设阈值和/或所述各个缓存页面的利用率大于第三预设阈值,确定所述分布式缓存中的各个缓存页面符合预设条件。
4.根据权利要求1所述的方法,其特征在于,所述根据数据库中的所述各个日志执行所述数据库事务,包括:
将所述各个日志记录至第一文件索引,以根据所述第一文件索引记录的所述各个日志在所述数据库执行对应的数据库事务;
当所述各个日志对应的数据库事务处理完成时,在第二文件索引中记录所述各个日志,并在所述第一文件索引中删除所述各个日志。
5.根据权利要求4所述的方法,其特征在于,所述将所述各个日志存储至数据库,之后还包括:
当所述各个日志开始存储至数据库时,建立新的检查点;
当所述各个日志完成存储至数据库时,清理所述新的检查点与上一个检查点期间存储至数据库的日志。
6.根据权利要求5所述的方法,其特征在于,所述清理所述新的检查点与上一个检查点期间存储至数据库的日志,包括:
在数据库中删除所述第二文件索引中记录的所述各个日志;
所述根据所述第一文件索引记录的所述各个日志在所述数据库执行对应的数据库事务,之后还包括:
当针对所述数据库事务的任意一个数据修改失败时,恢复所述第一文件索引中的所述各个日志。
7.根据权利要求1-6任意一项所述的方法,其特征在于,还包括:
在所述日志存储***中记录状态记录点;
建立与各个状态记录点对应的异常判断规则和数据恢复规则;
当各个状态记录点更新时,若根据对应的异常判断规则确定数据库事务执行异常,则根据对应的数据恢复规则进行数据恢复。
8.根据权利要求7所述的方法,其特征在于,所述状态记录点包括以下至少一种:
记录数据库事务开启执行的第一状态记录点;
记录数据库事务关闭执行的第二状态记录点;
记录数据库事务对应的各个日志完成存储至数据库的第三状态记录点;
记录数据库事务完成的第四状态记录点;
记录检查点处理成功的第五状态记录点。
9.一种数据库事务的处理装置,其特征在于,包括:
数据请求接收模块,用于接收数据处理请求,所述数据处理请求包括待处理的数据库事务;
缓存更新模块,用于对于每个数据库事务,生成所述数据库事务对应的至少一个日志,将各个日志存储至分布式的日志存储***,所述分布式的日志存储***为Bookkeeper管理器;
落库模块,用于对于所述数据库事务的每个日志,在分布式缓存中更新与所述日志对应的缓存页面,所述缓存页面为Ledger;当确定所述分布式缓存中更新完成所述数据库事务对应的各个缓存页面时,将所述各个日志存储至数据库;
事务执行模块,用于根据数据库的所述各个日志执行所述数据库事务;
其中,落库模块包括:
标识版号确定单元,用于确定所述数据库事务对应的事务标识以及所述数据库事务对应的各个缓存页面的版本号;
页面存储模块,用于根据所述事务标识和所述版本号,确定所述各个缓存页面在所述分布式缓存中的存储区域,将所述各个缓存页面存储至对应的存储区域;
锁更新模块,用于开启各个所述缓存页面对应的读写锁,并根据所述日志更新对应的缓存页面,当所述数据库事务提交成功或失败时,释放所述数据库事务对应的各个读写锁。
10.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-8任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210793116.XA CN115145697B (zh) | 2022-07-05 | 2022-07-05 | 数据库事务的处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210793116.XA CN115145697B (zh) | 2022-07-05 | 2022-07-05 | 数据库事务的处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115145697A CN115145697A (zh) | 2022-10-04 |
CN115145697B true CN115145697B (zh) | 2023-07-25 |
Family
ID=83412728
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210793116.XA Active CN115145697B (zh) | 2022-07-05 | 2022-07-05 | 数据库事务的处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115145697B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115827413B (zh) * | 2023-02-14 | 2023-04-18 | 北京大道云行科技有限公司 | 一种基于大页内存的存储监控***及方法 |
CN115858252B (zh) * | 2023-02-21 | 2023-06-02 | 浙江智臾科技有限公司 | 一种数据恢复方法、装置及存储介质 |
CN116541407B (zh) * | 2023-07-07 | 2023-10-10 | 之江实验室 | 一种数据处理的方法、装置、存储介质及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN110990182A (zh) * | 2019-12-03 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9626421B2 (en) * | 2007-09-21 | 2017-04-18 | Hasso-Plattner-Institut Fur Softwaresystemtechnik Gmbh | ETL-less zero-redundancy system and method for reporting OLTP data |
US7991744B2 (en) * | 2008-07-10 | 2011-08-02 | International Business Machines Corporation | Method and system for dynamically collecting data for checkpoint tuning and reduce recovery time |
CN101706811B (zh) * | 2009-11-24 | 2012-01-25 | 中国科学院软件研究所 | 一种分布式数据库***事务提交方法 |
US20200034472A1 (en) * | 2018-07-27 | 2020-01-30 | Futurewei Technologies, Inc. | Asynchronous cache coherency for mvcc based database systems |
US11544245B2 (en) * | 2019-12-03 | 2023-01-03 | Tencent Technology (Shenzhen) Company Limited | Transaction processing method, apparatus, and device and computer storage medium |
-
2022
- 2022-07-05 CN CN202210793116.XA patent/CN115145697B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103729442A (zh) * | 2013-12-30 | 2014-04-16 | 华为技术有限公司 | 记录事务日志的方法和数据库引擎 |
CN110990182A (zh) * | 2019-12-03 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 事务处理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115145697A (zh) | 2022-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115145697B (zh) | 数据库事务的处理方法、装置及电子设备 | |
US10671642B2 (en) | Copying data changes to a target database | |
KR101255391B1 (ko) | 데이터베이스 손상 복구 시스템 및 방법 | |
US9183236B2 (en) | Low level object version tracking using non-volatile memory write generations | |
US20140344311A1 (en) | Systems and methods for asynchronous schema changes | |
US20150339366A1 (en) | Replication for on-line hot-standby database | |
US10459804B2 (en) | Database rollback using WAL | |
JPH0812631B2 (ja) | データベース・トランザクション及び照会処理システム | |
CN110543446B (zh) | 一种基于快照的区块链直接归档方法 | |
CN106991606B (zh) | 交易数据处理方法及装置 | |
CN113515501B (zh) | 非易失性内存数据库管理***恢复方法、装置和电子设备 | |
CN110597663A (zh) | 一种事务处理方法及装置 | |
US20140324782A1 (en) | Applying write elision | |
CN113821382B (zh) | 一种实时数据库数据处理方法、***和设备 | |
US20160170842A1 (en) | Writing to files and file meta-data | |
US20170068603A1 (en) | Information processing method and information processing apparatus | |
CN112765126B (zh) | 数据库事务的管理方法、装置、计算机设备和存储介质 | |
CN110543485B (zh) | 一种基于快照的区块链预约归档方法 | |
KR100501414B1 (ko) | 파일 시스템의 메타 데이터 회복을 위한 로깅과 회복 방법및 장치 | |
US20060004846A1 (en) | Low-overhead relational database backup and restore operations | |
JPS62245348A (ja) | データベース更新方法 | |
CN116257531B (zh) | 一种数据库空间回收方法 | |
CN111143277B (zh) | 一种数据处理方法、装置及电子设备 | |
CN111427989B (zh) | 一种全文检索的索引处理方法、索引处理***及存储介质 | |
CN118012669A (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 |