CN111026772A - 用于保证数据库修改永久性的方法及装置 - Google Patents
用于保证数据库修改永久性的方法及装置 Download PDFInfo
- Publication number
- CN111026772A CN111026772A CN201911170887.8A CN201911170887A CN111026772A CN 111026772 A CN111026772 A CN 111026772A CN 201911170887 A CN201911170887 A CN 201911170887A CN 111026772 A CN111026772 A CN 111026772A
- Authority
- CN
- China
- Prior art keywords
- transaction
- log
- database
- recording
- hardware
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种用于保证数据库修改永久性的方法及装置,其中,用于保证硬件数据库修改永久性的方法包括:在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比硬件数据库的日志和外部用于记录提交事务的日志,得到外部用于记录提交事务的日志中存在但硬件数据库的日志中不存在的第二事务的记录;将从外部用于记录提交事务的日志中读取的第二事务的记录内容记录在硬件数据库的日志中,并根据硬件数据库执行第二事务的情况记录硬件数据库的日志中第二事务的事务状态;其中,第二事务包含数据修改。通过上述或类似方案能够确保数据库的日志记录情况与数据库的执行情况一致,从而保证对数据库修改的永久性。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种用于保证数据库修改永久性的方法及装置,更具体地,涉及一种用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法、电子设备及计算机可读存储介质。
背景技术
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。数据库的存储空间很大,可以存放百万条、千万条甚至上亿条数据。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。随着互联网的发展,数据库的重要性越来越明显。
当系统越来越复杂时,保证数据库的持久性(即,对数据库的改变应该是永久性)显得尤为重要,因为要保证事务提交之后,即使遇到故障或者断电等情况,数据库也要完成该事务。
预写日志记录(Write-Ahead Logging)可以用于在数据库系统中提供原子性和持久性。更改首先记录在日志中,然后将其写入稳定存储,然后将更改写入数据库。该技术被广泛应用于各个数据库,比如MySQL数据库的binlog日志。
然而,在涉及主从数据库时,预写日志记录存在主从不一致、无法完成语句执行等问题。
发明内容
本发明提供了一种用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法、电子设备及计算机可读存储介质,以解决涉及主从数据库时所存在的一项或多项问题。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种用于保证硬件数据库修改永久性的方法,包括:
在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;其中,所述第二事务包含数据修改。
根据本发明实施例的另一个方面,提供了一种用于保证数据库系统修改永久性的方法,包括:
接收包含数据修改的第三事务,并将所述第三事务记录至用于记录提交事务的日志中;
在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;所述第二事务包含数据修改;
在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录;
将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;所述第五事务包含数据修改。
根据本发明实施例的又一个方面,提供了一种用于保证实际数据库修改永久性的方法,包括:
在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录;
将从所述外部硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;其中,所述第五事务包含数据修改。
根据本发明实施例的再一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述方法的步骤。
根据本发明实施例的又一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述方法的步骤。
本发明实施例的用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法、用于保证实际数据库修改永久性的方法、电子设备及计算机可读存储介质,能够确保该数据库的日志记录情况与数据库的执行情况一致,从而能够保证对数据库修改的永久性。另外,通过保证对硬件数据库修改的永久性能够保证利用硬件系统辅助实际数据库执行至少部分操作的数据库系统的修改永久性,其中,硬件数据库能够加快实际数据库的执行过程。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的用于保证硬件数据库修改永久性的方法流程示意图;
图2是本发明一实施例的用于保证数据库系统修改永久性的方法流程示意图;
图3是本发明一实施例的用于保证实际数据库修改永久性的方法流程示意图;
图4是本发明一实施例的用于保证数据库系统修改永久性的方法的框图示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
首先,以MySQL的binlog为例对预写日志记录的缺点进行具体分析说明。binlog有三种格式,分别为Statement、Row和Mixed。
Statement格式:每一条会修改数据的记录都会记录在binlog中,其缺点是存在安全隐患,可能导致主从不一致;对一些具有不确定因素的系统函数不能准确复制或是不能复制。
Row格式:不记录SQL语句上下文相关信息,仅保存那条记录被修改,其缺点是生成的binlog比较大;单语句更新(删除)表的行数过多,会形成大量的binlog;无法从binlog看见用户执行的SQL导致无法进行审计。
Mixed:是Statement和Row两种格式的混合使用,一般的语句修改使用Statement格式保存binlog,Stetement格式无法完成的主从复制操作采用Row格式保存binlog,所以存在Statement和Row的缺点。
为了解决上述问题,本发明实施例提供了一种用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法及用于保证实际数据库修改永久性的方法,能够保证提交后的事务对数据库的修改是永久性的,不受之后的操作或故障的影响。
需要预先说明的是,数据库系统可以包括实际数据库和硬件数据库,其中,硬件数据库可以存在于客户端与实际数据库之间,用于辅助实际数据库完成至少部分SQL语句中的操作。实际数据库可以是在CPU(Central Processing Unit,中央处理器)上运行的数据库,可以称为主数据库,硬件数据库可以是在CPU的外接硬件(例如,GPU(GraphicsProcessing Unit,图形处理器)、FPGA(Field-Programmable Gate Array))上运行的数据库,所以实际数据和硬件数据可以构成主从数据库。
下面分别介绍用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法及用于保证实际数据库修改永久性的方法的具体实施方式。
图1是本发明一实施例的用于保证硬件数据库修改永久性的方法流程示意图。如图1所示,该用于保证硬件数据库修改永久性的方法可包括以下步骤S110和步骤S120。
下面将对步骤S110和步骤S120的具体实施方式进行详细说明。
步骤S110:在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
该硬件数据库可以是一种能够加快SQL语句执行的装置,它存在于客户端与实际数据库中间;该硬件数据库上电之后,可以从数据库加载所有的数据;当接收到客户端发来的SQL语句后,可以在该硬件数据库中执行该SQL语句;如果是改变数据库(如硬件数据库)的SQL语句,改变可以异步应用到实际数据库。
该硬件数据库的日志包括事务状态的字段,可以根据实际情况对事务的状态进行划分,例如,事务状态可以分为待执行、正在执行、执行完成、执行失败。其他实施例中,事务状态可以分为待执行、正在执行、执行完成。其中,待执行是指事务在执行之前的事务状态,正在执行是指事务在执行过程中的事务状态,执行完成是指事务在执行完成并成功的事务状态,执行失败是指事务在执行完成但失败的事务状态。
该硬件数据库的日志除了包括事务状态的字段,还可以包括序列号字段、事务ID(识别信息)字段,序列号字段的数值可以是随着新事务的增加而不断增大,事务ID字段的内容能够用于唯一标识一个事务,同一事务在不同日志中的事务ID可相同。硬件数据库的日志中记录的最新的第一事务是指当前记录的最新事务,可以根据最近增加(或最大)的序列号找到当前记录的最新事务。第一事务中的“第一”仅是用于标识某一事务,并不应被理解为是对事务序号的限定。
该外部用于记录提交事务的日志是指该独立于硬件数据库之外的用于记录提交事务的日志。该外部用于记录提交事务的日志可以用于记录客户端提交的所有事务。用于记录提交事务的日志可包括序列号、事务ID、重做、撤销字段,还可以包括前一个事务序列号等字段。其中,同一事务在用于记录提交事务的日志中与在硬件数据库的日志中的序列号可不同,事务ID一般相同。重做字段可以用于记录用户提交的SQL语句,该SQL语句可以用于重新执行相应事务,撤销字段可以记录用于撤销利用重做字段的查询语句执行的操作的SQL语句,该SQL语句可以用于撤销执行相应事务产生的修改。前一个事务序列号可以指当前事务的记录的紧邻的前一次增加的记录的事务的序列号。例如,硬件数据库的日志为PreLog,用于记录提交事务的日志为HLog。
上述步骤S110中,可以利用硬件数据库中的I/O(输入/输出)线程对比硬件数据库的日志和用于记录提交事务的日志,记录不一致的事务。
示例性地,上述步骤S110中,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,具体地,可包括步骤:S111,通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
该步骤S111,更具体地,可以利用硬件数据库的I/O线程从所述外部用于记录提交事务的日志读出事务的信息,如事务ID,然后,将从所述外部用于记录提交事务的日志读出的事务的信息和逐一从硬件数据库中读出的事务的信息进行比较,判断硬件数据库中是否存在从所述外部用于记录提交事务的日志读出的事务,若存在,可以继续从外部用于记录提交事务的日志读出下一条事务的信息和逐一从硬件数据库中读出的事务的信息进行比较,依次循环进行,可以将所述外部用于记录提交事务的日志中的各条事务和硬件数据库中的各条事务进行比较,从而得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
此外,外部用于记录提交事务的日志中存在但硬件数据库的日志中不存在的第二事务可以是客户端在提交上述第一事务之后提交的新的事务。
步骤S120:将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;其中,所述第二事务包含数据修改。
该第二事务涉及数据修改时,涉及对数据库修改的永久性的问题。该第二事务所涉及的数据修改可以是各种修改,例如,更新。
该步骤S120的具体实施方式,可包括步骤:S121,将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并在所述硬件数据库的日志中将所述第二事务的事务状态记录为待执行;S122,利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行;S123,在所述硬件数据库完成执行所述第二事务的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行完成。
其中,硬件数据库中,事务状态字段的内容可以包括待执行、正在执行和执行完成。
上述步骤S121中,从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容可以包括该第二事务的事务ID等。将该第二事务的记录内容记录在所述硬件数据库的日志中时,同时可以生成其他记录内容进行记录,例如,在硬件数据库的日志中生成该第二事务的记录的序列号,以及该第二事务的初始的事务状态(例如,待执行(Prepared))。
上述步骤S122,即,利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行,具体地,可包括步骤:S1221,利用所述硬件数据库的SQL线程执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行。
在执行该第二事务时,若该第二事务顺利执行完成,则可以通过上述步骤S123更新硬件数据库的日志中的第二事务的事务状态为执行完成,下次执行新的事务时,可以确认该第二事务的状态为执行完成,则可以继续执行新的事务。
在执行该第二事务时,将事务状态标记为正在执行,若执行过程出现故障,例如断电,无法返回执行结果,则该第二事务的状态可一直标记为正在执行的状态,在此情况下,下次执行新的事务时,可以确认该第二事务的状态是否为执行完成,因为是正在执行而不是执行完成,则可以进一步执行其他动作(例如回滚并重新执行),以确保硬件数据库的日志记录与执行情况保持一致。
进一步地,上述步骤S120的具体实施方式,除了包括步骤S121至步骤S123,还可包括步骤:S124,在所述硬件数据库执行所述第二事务失败的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行失败。
在第二事务的事务状态为执行失败的情况下,下次硬件数据库执行新的事务时,可以检查该第二事务的状态,可以执行其他操作(例如回滚),以尽可能使该第二事务执行成功,若执行成功,可以将该第二事务的事务状态更新为执行完成,若仍为执行失败,则可发出提示信息,以通知人工检查。
上述步骤S110是在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下的执行的动作,若该第一事务的事务状态不是执行完成,例如,是正在执行,可以执行一些动作确保硬件数据库的日志记录与实际执行情况一致。
在一些实施例中,图1所示的用于保证硬件数据库修改永久性的方法,还可包括步骤:S130,在硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成的情况下,利用所述外部用于记录提交事务的日志中的所述第一事务的记录内容中的撤销字段和重做字段的内容将所述硬件数据库回滚并利用所述硬件数据库重新执行所述第一事务,并根据重新执行所述第一事务的情况更新所述硬件数据库的日志中的所述第一事务的事务状态,然后,执行通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录的步骤。
该步骤S130中,若第一事务的事务状态不是执行完成,例如,是正在执行或执行失败,则可以利用用于记录提交事务的日志中第一事务的记录中撤销字段的内容(用于撤销的SQL语句)将该硬件数据库回滚,可以消除之前执行该第一事务留下的痕迹,然后利用用于记录提交事务的日志中第一事务的记录中重做字段(用于执行的SQL语句)重新执行该第一事务,若执行成功,则可将所述硬件数据库的日志中该第一事务的事务状态更新为执行完成,若执行失败,则可更新为执行失败。在执行失败的情况下,可以提示人工介入进行检查,并可继续回滚并重新执行至该第一事务执行成功;或者,在执行失败时,直接发送执行失败的信息至客户端,以此可使用户重新提交事务。
上述步骤S130中,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,具体地,可包括步骤:S111,通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
该硬件数据库的I/O线程可以用于向硬件数据库的日志写信息,或从硬件数据库的日志读信息。该硬件数据库的I/O线程还可以用于将实际数据库中的数据加载至硬件数据库,以使该硬件数据库辅助实际数据库执行SQL语句的至少部分操作。
在又一些实施例中,上述步骤S110或步骤S130中执行对比步骤之前,即,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录之前,各实施例所述的用于保证硬件数据库修改永久性的方法还可包括步骤:S140,检查硬件数据库的日志中记录的最新的第一事务的事务状态是不是执行完成。
该步骤S140中,当客户端提交了新事务需要硬件数据库执行时,可以先执行检查动作。具体地,可以从硬件数据库的日志中找到最新的第一事务的记录并读取该第一事务的事务状态字段的内容,将该第一事务的事务状态字段的内容与执行完成进行比较,从而判断硬件数据库的日志中记录的最新事务的事务状态是不是执行完成。若是执行完成的状态,可以执行上述步骤S110,若不是执行完成的状态,可以执行上述步骤S130。
本些实施例中,通过上述步骤S110和步骤S120可以保证数据库系统中硬件数据库的日志与执行情况的一致性。
在包括实际数据库和硬件数据库的数据库系统中,除了要保证硬件数据库的修改永久性,还需要保证实际数据库的修改永久性。对此,本发明实施例提供的用于保证数据库系统修改永久性的方法可以解决该问题。
图2是本发明一实施例的用于保证数据库系统修改永久性的方法流程示意图。如图2所示,该用于保证数据库系统修改永久性的方法,可包括以下步骤S210至步骤S250。
需要预先说明的是,为了便于区分哪个事务是首先在哪个日志中涉及的,所以,步骤S210至步骤S250若涉及类似于前述用于保证硬件数据库修改永久性的方法实施例所提及的事务,沿用同样的表述,例如,“第一事务”、“第二事务”。而且,实施例中所提及的序号“第一”、“第二”、“第三”、“第四”、“第五”等仅是用于表示事务可能是不同的,并非用于限定事务的记录顺序等。
下面将对步骤S210至步骤S250的具体实施方式进行详细说明。
步骤S210:接收包含数据修改的第三事务,并将所述第三事务记录至用于记录提交事务的日志中。
该步骤S210中的用于记录提交事务的日志和前述步骤S110中的外部用于记录提交事务的日志可以是指相同的日志,可以用于记录所有提交的事务,例如,均为PreLog。用于记录提交事务的日志可以位于客户端,或其他位置例如实际数据库的执行主体上。用户可以通过客户端提交事务,提交的所有事务均可以首先记录在用于记录提交事务的日志中。
步骤S220:在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
第三事务可以是最近接收并记录在用于记录提交事务的日志中的,此时,很有可能,该第三事务尚未执行,所以硬件数据库的日志中很可能没有记录该第三事务,所以,该第二事务可以为所述第三事务。在其他实施例中,上述步骤S210和上述步骤S220之间可能还包含其他接收事务和/或执行事务等过程,所以,该第二事务可以不是所述第三事务。
该步骤S220与前述步骤S110类似,主要区别在于,由于在该步骤S220之前在用于记录提交事务的日志中记录了第三事务,所以在该步骤S220提及用于记录提交事务的日志时的描述为“记录所述第三事务后的所述用于记录提交事务的日志”,而在前述步骤S110中,由于该步骤S110之前并未特别说明在用于记录提交事务的日志记录了新的事务,所以用于记录提交事务的日志时直接描述为“所述硬件数据库的日志”。所以,该步骤S220的具体实施方式,可以参照前述步骤S110的具体实施方式执行。
示例性地,上述步骤S220中,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,具体地,可包括步骤:S221,通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
上述步骤S220中执行对比动作之前,即,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录之前,各实施例所述的用于保证数据库系统修改永久性的方法还可包括:S280,检查硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成。
步骤S230:将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;所述第二事务包含数据修改。
该步骤S230和前述步骤S120的区别主要在于“记录所述第三事务后的所述用于记录提交事务的日志”和“所述外部用于记录提交事务的日志”的表述差异,所以,该步骤S230的具体实施方式可以参照前述步骤S120的具体实施方式执行。
示例性地,上述步骤S230的具体实施方式,可包括步骤:S231,将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并在所述硬件数据库的日志中将所述第二事务的事务状态记录为待执行;S232,利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行;S233,在所述硬件数据库完成执行所述第二事务的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行完成。
进一步地,上述步骤S232,即,利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行,具体地,可包括步骤:S2321,利用所述硬件数据库的SQL线程执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行。
在另一些实施例中,上述步骤S230的具体实施方式,还可包括步骤:S234,在所述硬件数据库执行所述第二事务失败的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行失败。
步骤S240:在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
该实际数据库可以是指通常所称的数据库,例如,MySQL数据库、Oracle数据库等。客户端接收提交的数据库后,可以先记录在用于记录提交事务的日志中,之后,记录在硬件数据库的日志中,然后再记录在实际数据库的日志中。该步骤S240可以用于确保实际数据库的日志记录与该实际数据库的执行情况一致。实际数据库的日志中可以包含序列号、事务ID、事务状态等字段。同一事务的事务ID在该实际数据库的日志和其他日志(例如,硬件数据库的日志、用于记录事务的日志)相同。不同日志中同一事务的序列号可以不同。
该步骤S240与前述步骤S110的主要区别在于,步骤S240是针对实际数据库的日志中的事务的状态确认、是与硬件数据库的日志进行对比,而前述步骤S110是针对硬件数据库的日志中的事务的状态确认、是与用于记录提交事务的日志进行对比。执行方式和执行过程中涉及的动作顺序可以相同或类似。
示例性地,上述步骤S240中,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录,具体地,可包括步骤:S241,通过利用所述实际数据库的I/O线程对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
该实际数据库的I/O线程可以用于向该实际数据库的日志写入信息,或者,从该实际数据库的日志读取信息,可以用于将从该实际数据库的日志读取的信息与其他信息(例如从用于记录提交事务的日志读取的信息)进行比较。该步骤S241的具体实施方式可以参照前述步骤S111的具体实施方式执行,区别主要在于,该步骤S241是针对实际数据库,且是将实际数据库的日志和硬件数据库的日志进行比较,而前述步骤S111是针对硬件数据库,且是将硬件数据库的日志和用于记录提交事务的日志进行比较。
例如,该步骤S141,更具体地,可以利用实际数据库的I/O线程从记录所述第二事务的事务状态后的所述硬件数据库的日志读出事务的信息,如事务ID,然后,将从记录所述第二事务的事务状态后的所述硬件数据库的日志读出的事务的信息和逐一从实际数据库中读出的事务的信息进行比较,判断实际数据库中是否存在从记录所述第二事务的事务状态后的所述硬件数据库的日志读出的事务,若存在,可以继续从记录所述第二事务的事务状态后的所述硬件数据库的日志读出下一条事务的信息和逐一从实际数据库中读出的事务的信息进行比较,依次循环进行,可以将记录所述第二事务的事务状态后的所述硬件数据库的日志中的各条事务和实际数据库中的各条事务进行比较,从而得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。该第五事务可能是前述第三事务,所以,所述第二事务和所述第五事务均可能为所述第三事务。
上述步骤S240是确认第一事务的事务状态是执行完成的情况,在他实施例中,若第一事务的事务状态不是执行完成的情况,则可以执行一些动作,以确保对实际数据库修改的永久性。
示例性地,图2所示的用于保证数据库系统修改永久性的方法,还可包括步骤:S260,在硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成的情况下,利用记录所述第三事务后的所述用于记录提交事务的日志中的所述第一事务的记录内容中的撤销字段和重做字段的内容将所述硬件数据库回滚并利用所述硬件数据库重新执行所述第一事务,并根据重新执行所述第一事务的情况更新所述硬件数据库的日志中的所述第一事务的事务状态,然后,执行通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录的步骤。
该步骤S260和前述步骤S130,均是利用用于记录提交事务的日志中的所述第一事务的记录内容中的撤销字段和重做字段的内容执行回滚和重新执行所述第一事务,并更新硬件数据库的日志中的第一事务的状态,主要区别在于,前者为“记录所述第三事务后的所述用于记录提交事务的日志”,而后者为“外部用于记录提交事务的日志”,所以,该步骤S260的具体实施方式可以参照前述步骤S130实施。
上述步骤S260中,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,具体地,可包括步骤:S221,通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
上述步骤S260中执行对比动作之前,即,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录之前,各实施例所述的用于保证数据库系统修改永久性的方法还可包括:S280,检查硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成。
步骤S250:将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;所述第五事务包含数据修改。
该步骤S250和前述步骤S120的区别主要在于,该步骤S250是根据硬件数据库的日志中事务的记录更新实际数据库的日志中事务的状态,且是实际数据库执行事务并在实际数据库的日志中更新事务的状态,而前述步骤S120是根据外部用于记录提交事务的日志中事务的记录更新硬件数据库的日志中事务的状态,且是硬件数据库执行事务并在硬件数据库的日志中更新事务的状态。所以,该步骤S250的具体实施方式可以参照前述步骤S120的具体实施方式执行。
示例性地,上述步骤S250的具体实施方式,可包括步骤:S251,将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并在所述实际数据库的日志中将所述第五事务的事务状态记录为待执行;S252,利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行;S253,在所述实际数据库完成执行所述第五事务的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行完成。
上述步骤S251中,从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容可以包括该第五事务的事务ID等。将该第五事务的记录内容记录在所述实际数据库的日志中时,同时可以生成其他记录内容进行记录,例如,在实际数据库的日志中生成该第五事务的记录的序列号,以及该第五事务的初始的事务状态(例如,待执行(Prepared))。
上述步骤S252,即,利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行,具体地,可包括步骤:S2521,利用所述实际数据库的SQL线程执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行。
在执行该第五事务时,若该第五事务顺利执行完成,则可以通过上述步骤S253更新实际数据库的日志中的第五事务的事务状态为执行完成,下次执行新的事务时,可以确认该第五事务的状态为执行完成,则可以继续执行新的事务。
在执行该第五事务时,将事务状态标记为正在执行,若执行过程出现故障,例如断电,无法返回执行结果,则该第五事务的状态可一直标记为正在执行的状态,在此情况下,下次执行新的事务时,可以确认该第五事务的状态是否为执行完成,因为是正在执行而不是执行完成,则可以进一步执行其他动作(例如回滚并重新执行),以确保实际数据库的日志记录与执行情况保持一致。
在一些实施例中,上述步骤S250的具体实施方式,除了包括步骤S251至步骤S253,还可包括步骤:S254,在所述实际数据库执行所述第五事务失败的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行失败。
在第五事务的事务状态为执行失败的情况下,下次硬件数据库执行新的事务时,可以检查该第五事务的状态,可以执行其他操作(例如回滚),以尽可能使该第五事务执行成功,若执行成功,可以将该第五事务的事务状态更新为执行完成,若仍为执行失败,则可发出提示信息,以通知人工检查。
上述步骤S240是在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下的执行的动作,若该第四事务的事务状态不是执行完成,例如,是正在执行,可以执行一些动作确保实际数据库的日志记录与实际执行情况一致。
在一些实施例中,图2所示的用于保证数据库系统修改永久性的方法,还可包括步骤:S270,在实际数据库的日志中记录的最新的第四事务的事务状态不是执行完成的情况下,利用记录所述第三事务后的所述用于记录提交事务的日志中的所述第四事务的记录内容中的撤销字段和重做字段的内容将所述实际数据库回滚并利用所述实际数据库重新执行所述第四事务,并根据重新执行所述第四事务的情况更新所述实际数据库的日志中的所述第四事务的事务状态,然后,执行通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录的步骤。
该步骤S270中,若第四事务的事务状态不是执行完成,例如,是正在执行或执行失败,则可以利用记录所述第三事务后的用于记录提交事务的日志中第四事务的记录中撤销字段的内容(用于撤销的SQL语句)将该实际数据库回滚,可以消除之前执行该第四事务留下的痕迹,然后利用记录所述第三事务后的用于记录提交事务的日志中第四事务的记录中重做字段(用于执行的SQL语句)重新执行该第一事务,若执行成功,则可将所述实际数据库的日志中该第四事务的事务状态更新为执行完成,若执行失败,则可更新为执行失败。在执行失败的情况下,可以提示人工介入进行检查,并可继续回滚并重新执行至该第四事务执行成功;或者,在执行失败时,直接发送执行失败的信息至客户端,以此可使用户重新提交事务。
上述步骤S270中,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录,具体地,可包括步骤:S241,通过利用所述实际数据库的I/O线程对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
该实际数据库的I/O线程可以用于向该实际数据库的日志写入信息,或者,从该实际数据库的日志读取信息,还可以将从该实际数据库的日志读取的信息与从其他日志(例如,硬件数据库的日志)读取的信息进行比较。
上述步骤S240或步骤S270中执行对比动作之前,即,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录之前,各实施例所述的用于保证数据库系统修改永久性的方法还可包括:S290,检查实际数据库的日志中记录的最新的第四事务的事务状态不是执行完成。
该步骤S290中,当客户端提交了新事务需要实际数据库执行时,可以先执行检查动作。具体地,可以从实际数据库的日志中找到最新的第四事务的记录并读取该第四事务的事务状态字段的内容,将该第四事务的事务状态字段的内容与执行完成进行比较,从而判断实际数据库的日志中记录的最新事务的事务状态是不是执行完成。若是执行完成的状态,可以执行上述步骤S290,若不是执行完成的状态,可以执行上述步骤S240。
在一些实施例中,所述用于记录提交事务的日志可以为PreLog日志,所述硬件数据库的日志可以为HLog日志,所述实际数据库的日志可以为SLog日志。所述硬件数据库可以为硬件加速器中的数据库。所述实际数据库可以为包括MySQL或Oracle的数据库。
本些实施例中,通过上述步骤S220和步骤S230可以保证数据库系统中硬件数据库的日志与执行情况的一致性,通过上述步骤S240和步骤S250可以保证数据库系统中实际数据库的日志与执行情况的一致性。
对于包含实际数据库和硬件数据库的数据库系统中,仅对于实际数据而言,为了保证其修改永久性,本发明实施例提供了一种用于保证实际数据库修改永久性的方法。
图3是本发明一实施例的用于保证实际数据库修改永久性的方法流程示意图。如图3所示,该用于保证实际数据库修改永久性的方法,可包括以下步骤S310和步骤S320。
下面将对步骤S310和步骤S320的具体实施方式进行详细说明。
步骤S310:在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
该步骤S310中,外部硬件数据库中的“外部”主要用于表明该硬件数据库可以位于实际数据库之外,同样可以是指能够辅助实际数据库完成SQL语句中至少部分操作的装置。该步骤S310的具体实施方式可以参照前述步骤S240的具体实施方式执行。
示例性地,上述步骤S310中执行对比动作的步骤,即,通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录,具体地,可包括步骤:S311,通过利用所述实际数据库的I/O线程对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
在一些实施例中,图3所示的用于保证实际数据库修改永久性的方法,还可包括步骤:S330,在实际数据库的日志中记录的最新的第四事务的事务状态不是执行完成的情况下,利用外部用于记录提交事务的日志中的所述第四事务的记录内容中的撤销字段和重做字段的内容将所述实际数据库回滚并利用所述实际数据库重新执行所述第四事务,并根据重新执行所述第四事务的情况更新所述实际数据库的日志中的所述第四事务的事务状态,然后,执行通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录的步骤。
步骤S320:将从所述外部硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;其中,所述第五事务包含数据修改。
该步骤S320的具体实施方式可以参照前述步骤S250的具体实施方式执行。
示例性地,上述步骤S320的具体实施方式,可包括步骤:S321,将从所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并在所述实际数据库的日志中将所述第五事务的事务状态记录为待执行;S322,利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行;S323,在所述实际数据库完成执行所述第五事务的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行完成。
上述步骤S322,即,利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行,具体地,可包括步骤:S3221,利用所述实际数据库的SQL线程执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行。
上述步骤S320的具体实施方式,还可包括步骤:S324,在所述实际数据库执行所述第五事务失败的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行失败。
上述步骤S330中执行对比动作的步骤,即,通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录,具体地,可包括步骤:S311,通过利用所述实际数据库的I/O线程对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
另外,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述的用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法,或用于保证实际数据库修改永久性的方法的步骤。
此外,本发明实施例另提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所述的用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法,或用于保证实际数据库修改永久性的方法的步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
图4是本发明一实施例的用于保证数据库系统修改永久性的方法的框图示意图。其中,本实施例采用预写日志记录方案,在多个层级记录多个日志文件,通过日志文件的记录比对实现数据库的持久性,日志文件之记录对数据库数据做出改变的事务。下面对各个日志进行简单说明:PreLog:用于记录所有提交的事务;HLog:用于记录硬件数据库执行的事务及事务状态;SLog:用于记录数据库(比如MySQL、Oracle等)执行的事务及事务状态。
事务的状态可以包括:Prepared(待执行)、Executing(正在执行)、Finished(执行完成),在日志中可以分别以P、E和F表示。此外,还可包括Failed(执行失败)的事务状态。
PreLog日志中每条记录的字段有:SequenceNumber(序列号)、TransactionID(事务ID)、Redo(重做)、Undo(撤销)、PreviousTransactionNumber(前一个事务序列号);HLog日志中每条记录的字段有:SequenceNumber(序列号)TransactionID(事务ID)TransactionState(事务状态);SLog日志中每条记录的字段有:SequenceNumber(序列号)、TransactionID(事务ID)、TransactionState(事务状态)。
其中,对于SequenceNumber,PreLog、HLog与SLog分别有自己的序列号,每个日志文件的序列号可依次递增;对于TransactionID,事务ID保证唯一性,同一事务在PreLog、HLog与SLog中具有相同的事务ID;对于Redo,该字段记录用户提交的SQL语句,例如,“UPDATE student.stuinfo t SET t.age='24'WHERE t.stuname='Andy';”;对于,Undo,该字段记录可以撤销Redo操作的SQL语句,用户提交SQL后,可在SQL执行之前,取出要修改的字段值并根据Redo自动生成Undo语句进行保存,例如,“UPDATE student.stuinfo t SETt.age='23'WHERE t.stuname='Andy';”;对于,PreviousTransactionNumber,该字段记录当前事务的前一个事务ID;对于TransactionState,事务状态,事务状态可有四种,分别为:Prepared、Executing、Finished和Failed。
参见图4,一实施例的用于保证数据库系统修改永久性的方法中,读写日志文件在I/O线程执行,事务的执行在SQL线程执行,该方法的执行过程可包括以下步骤:
(1)当客户端提交了有数据修改的事务后,先将该事务记录到PreLog日志文件中;
(2)在硬件数据库中,首先检查HLog中最新事务的TransactionState是否为Finished;如果不是,则从PreLog中找到该条事务记录,使用Redo字段将硬件数据库回滚,并在HLog中删除该条事务之前记录或更新事务状态;然后依次执行PreLog中有但HLog中没有的事务记录以使硬件数据库状态最新;硬件数据库执行事务的顺序是:先将事务在I/O线程内将该事务记录到HLog中,其中的TransactionState为Prepared;当SQL线程执行事务时,将TransactionState改为Executing;当事务执行成功后,将TransactionState改为Finished,当事务执行失败时,将TransactionState改为Failed,至此,一条事务在硬件数据库中的执行完成;
(3)在数据库中,首先检查SLog中最新事务的TransactionState是否为Finished;如果不是,则从PreLog中找到该条事务记录,使用Redo字段将数据库回滚,并在SLog中删除该条事务之前记录或更新事务状态;然后依次执行HLog中有但SLog中没有的事务记录以使数据库状态最新。数据库执行事务的顺序同硬件数据库执行事务的顺序。
本实施例的方法相对于现有保证数据库持久性方法,有以下优点:可以保证所有提交的事务全部执行,因为HLog与SLog中记录了事务的执行状态,如果系统在事务执行完、但事务状态还未更新到日志时出现故障,那么下次事务执行前会检测到事务状态为Executing,会回滚该事务并重新执行该事务。此项机制保证了只要事务被提交,那么一定会被执行,也就是持久性;由于硬件数据库的加入,提升了数据库事务的执行效率,并且不影响已有数据库的稳定性。该实施例的方法引入了三种日志以保证数据库的持久性,能够保证新的事务执行流程以及使用日志中的事务执行状态保证持久性。
综上所述,本发明实施例的用于保证硬件数据库修改永久性的方法、用于保证数据库系统修改永久性的方法、用于保证实际数据库修改永久性的方法、电子设备及计算机可读存储介质,通过在确认数据库的日志中最新事务的状态为执行完成的情况下再根据其他日志中的事务更新该数据库执行状态及其日志的事务记录,能够确保该数据库的日志记录情况与数据库的执行情况一致,从而能够保证对数据库修改的永久性。另外,通过保证对硬件数据库修改的永久性能够保证利用硬件系统辅助实际数据库执行至少部分操作的数据库系统的修改永久性,其中,硬件数据库能够加快实际数据库的执行过程。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (19)
1.一种用于保证硬件数据库修改永久性的方法,其特征在于,包括:
在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;其中,所述第二事务包含数据修改。
2.如权利要求1所述的用于保证硬件数据库修改永久性的方法,其特征在于,将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态,包括:
将从所述外部用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并在所述硬件数据库的日志中将所述第二事务的事务状态记录为待执行;
利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行;
在所述硬件数据库完成执行所述第二事务的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行完成。
3.如权利要求2所述的用于保证硬件数据库修改永久性的方法,其特征在于,还包括:
在所述硬件数据库执行所述第二事务失败的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行失败。
4.如权利要求1至3任一项所述的用于保证硬件数据库修改永久性的方法,其特征在于,还包括:
在硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成的情况下,利用所述外部用于记录提交事务的日志中的所述第一事务的记录内容中的撤销字段和重做字段的内容将所述硬件数据库回滚并利用所述硬件数据库重新执行所述第一事务,并根据重新执行所述第一事务的情况更新所述硬件数据库的日志中的所述第一事务的事务状态,然后,执行通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录的步骤。
5.如权利要求4所述的用于保证硬件数据库修改永久性的方法,其特征在于,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,包括:
通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录。
6.如权利要求2所述的用于保证硬件数据库修改永久性的方法,其特征在于,利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行,包括:
利用所述硬件数据库的SQL线程执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行。
7.如权利要求4所述的用于保证硬件数据库修改永久性的方法,其特征在于,通过对比所述硬件数据库的日志和外部用于记录提交事务的日志,得到所述外部用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录之前,所述方法还包括:
检查硬件数据库的日志中记录的最新的第一事务的事务状态是不是执行完成。
8.一种用于保证数据库系统修改永久性的方法,其特征在于,包括:
接收包含数据修改的第三事务,并将所述第三事务记录至用于记录提交事务的日志中;
在硬件数据库的日志中记录的最新的第一事务的事务状态是执行完成的情况下,通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态;所述第二事务包含数据修改;
在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录;
将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;所述第五事务包含数据修改。
9.如权利要求8所述的用于保证数据库系统修改永久性的方法,其特征在于,所述第二事务为所述第三事务;或者,所述第二事务和所述第五事务均为所述第三事务。
10.如权利要求8所述的用于保证数据库系统修改永久性的方法,其特征在于,
将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并根据所述硬件数据库执行所述第二事务的情况记录所述硬件数据库的日志中所述第二事务的事务状态,包括:
将从记录所述第三事务后的所述用于记录提交事务的日志中读取的所述第二事务的记录内容记录在所述硬件数据库的日志中,并在所述硬件数据库的日志中将所述第二事务的事务状态记录为待执行;
利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行;
在所述硬件数据库完成执行所述第二事务的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行完成;
将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;所述第五事务包含数据修改,包括:
将从记录所述第二事务的事务状态后的所述硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并在所述实际数据库的日志中将所述第五事务的事务状态记录为待执行;
利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行;
在所述实际数据库完成执行所述第五事务的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行完成。
11.如权利要求10所述的用于保证数据库系统修改永久性的方法,其特征在于,还包括:
在所述硬件数据库执行所述第二事务失败的情况下,将所述硬件数据库的日志中记录的所述第二事务的事务状态由正在执行更改为执行失败;
在所述实际数据库执行所述第五事务失败的情况下,将所述实际数据库的日志中记录的所述第五事务的事务状态由正在执行更改为执行失败。
12.如权利要求8至10任一项所述的用于保证数据库系统修改永久性的方法,其特征在于,还包括:
在硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成的情况下,利用记录所述第三事务后的所述用于记录提交事务的日志中的所述第一事务的记录内容中的撤销字段和重做字段的内容将所述硬件数据库回滚并利用所述硬件数据库重新执行所述第一事务,并根据重新执行所述第一事务的情况更新所述硬件数据库的日志中的所述第一事务的事务状态,然后,执行通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录的步骤;
在实际数据库的日志中记录的最新的第四事务的事务状态不是执行完成的情况下,利用记录所述第三事务后的所述用于记录提交事务的日志中的所述第四事务的记录内容中的撤销字段和重做字段的内容将所述实际数据库回滚并利用所述实际数据库重新执行所述第四事务,并根据重新执行所述第四事务的情况更新所述实际数据库的日志中的所述第四事务的事务状态,然后,执行通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录的步骤。
13.如权利要求12所述的用于保证数据库系统修改永久性的方法,其特征在于,
通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录,包括:
通过利用所述硬件数据库的I/O线程对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录;
通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录,包括:
通过利用所述实际数据库的I/O线程对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录。
14.如权利要求10所述的用于保证数据库系统修改永久性的方法,其特征在于,
利用所述硬件数据库执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行,包括:
利用所述硬件数据库的SQL线程执行所述第二事务时,将所述硬件数据库的日志中记录的所述第二事务的事务状态由待执行更改为正在执行;
利用所述实际数据库执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行,包括:
利用所述实际数据库的SQL线程执行所述第五事务时,将所述实际数据库的日志中记录的所述第五事务的事务状态由待执行更改为正在执行。
15.如权利要求12所述的用于保证数据库系统修改永久性的方法,其特征在于,
通过对比所述硬件数据库的日志和记录所述第三事务后的所述用于记录提交事务的日志,得到记录所述第三事务后的所述用于记录提交事务的日志中存在但所述硬件数据库的日志中不存在的第二事务的记录之前,所述方法还包括:
检查硬件数据库的日志中记录的最新的第一事务的事务状态不是执行完成;
通过对比所述实际数据库的日志和记录所述第二事务的事务状态后的所述硬件数据库的日志,得到记录所述第二事务的事务状态后的所述硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录之前,所述方法还包括:
检查实际数据库的日志中记录的最新的第四事务的事务状态不是执行完成。
16.如权利要求8所述的用于保证数据库系统修改永久性的方法,其特征在于,所述用于记录提交事务的日志为PreLog日志,所述硬件数据库的日志为HLog日志,所述实际数据库的日志为SLog日志;所述硬件数据库为硬件加速器中的数据库,所述实际数据库为包括MySQL或Oracle的数据库。
17.一种用于保证实际数据库修改永久性的方法,其特征在于,包括:
在实际数据库的日志中记录的最新的第四事务的事务状态是执行完成的情况下,通过对比所述实际数据库的日志和外部硬件数据库的日志,得到所述外部硬件数据库的日志中存在但所述实际数据库的日志中不存在的第五事务的记录;
将从所述外部硬件数据库的日志中读取的所述第五事务的记录内容记录在所述实际数据库的日志中,并根据所述实际数据库执行所述第五事务的情况记录所述实际数据库的日志中所述第五事务的事务状态;其中,所述第五事务包含数据修改。
18.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至17任一项所述方法的步骤。
19.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至17任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911170887.8A CN111026772B (zh) | 2019-11-26 | 2019-11-26 | 用于保证数据库修改永久性的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911170887.8A CN111026772B (zh) | 2019-11-26 | 2019-11-26 | 用于保证数据库修改永久性的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111026772A true CN111026772A (zh) | 2020-04-17 |
CN111026772B CN111026772B (zh) | 2020-11-27 |
Family
ID=70202171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911170887.8A Active CN111026772B (zh) | 2019-11-26 | 2019-11-26 | 用于保证数据库修改永久性的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111026772B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897522A (zh) * | 2020-06-16 | 2020-11-06 | 中科驭数(北京)科技有限公司 | 面向硬件数据库的开发展示系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1842789A (zh) * | 2004-03-29 | 2006-10-04 | 微软公司 | 用于在数据库恢复期间快照查询的系统和方法 |
US20080140734A1 (en) * | 2006-12-07 | 2008-06-12 | Robert Edward Wagner | Method for identifying logical data discrepancies between database replicas in a database cluster |
CN105701190A (zh) * | 2016-01-07 | 2016-06-22 | 深圳市金证科技股份有限公司 | 一种数据同步的方法和装置 |
CN107220145A (zh) * | 2017-05-19 | 2017-09-29 | 北京计算机技术及应用研究所 | 一种闪存数据库数据恢复的方法 |
CN110489274A (zh) * | 2019-07-11 | 2019-11-22 | 新华三大数据技术有限公司 | 数据备份方法、装置及交互系统 |
-
2019
- 2019-11-26 CN CN201911170887.8A patent/CN111026772B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1842789A (zh) * | 2004-03-29 | 2006-10-04 | 微软公司 | 用于在数据库恢复期间快照查询的系统和方法 |
US20080140734A1 (en) * | 2006-12-07 | 2008-06-12 | Robert Edward Wagner | Method for identifying logical data discrepancies between database replicas in a database cluster |
CN105701190A (zh) * | 2016-01-07 | 2016-06-22 | 深圳市金证科技股份有限公司 | 一种数据同步的方法和装置 |
CN107220145A (zh) * | 2017-05-19 | 2017-09-29 | 北京计算机技术及应用研究所 | 一种闪存数据库数据恢复的方法 |
CN110489274A (zh) * | 2019-07-11 | 2019-11-22 | 新华三大数据技术有限公司 | 数据备份方法、装置及交互系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897522A (zh) * | 2020-06-16 | 2020-11-06 | 中科驭数(北京)科技有限公司 | 面向硬件数据库的开发展示系统及方法 |
CN111897522B (zh) * | 2020-06-16 | 2021-09-03 | 中科驭数(北京)科技有限公司 | 面向硬件数据库的开发展示系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111026772B (zh) | 2020-11-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11256715B2 (en) | Data backup method and apparatus | |
US9348883B2 (en) | Systems and methods for replication replay in a relational database | |
US7801855B2 (en) | Method and apparatus for merging log entries in a database management system | |
US6070165A (en) | Method for managing and accessing relational data in a relational cache | |
US20120136839A1 (en) | User-Driven Conflict Resolution Of Concurrent Updates In Snapshot Isolation | |
US10324905B1 (en) | Proactive state change acceptability verification in journal-based storage systems | |
US9189502B2 (en) | Techniques for moving data files without interrupting access | |
US20180300147A1 (en) | Database Operating Method and Apparatus | |
US10503601B2 (en) | Method and apparatus for tracking objects in a first memory | |
US20210365439A1 (en) | Distributed transaction execution in distributed databases | |
CN111026772B (zh) | 用于保证数据库修改永久性的方法及装置 | |
CN111046051A (zh) | 数据一致性实现方法、装置及存储介质 | |
CN112559496B (zh) | 一种分布式数据库事务原子性实现方法及装置 | |
CN111176907B (zh) | 硬件数据库回滚方法、软件数据库回滚方法及装置 | |
CN116955510B (zh) | 基于数据湖的空间数据版本化管理方法 | |
CN111190768A (zh) | 数据库执行错误恢复方法、数据库访问方法及装置 | |
CN115858252A (zh) | 一种数据恢复方法、装置及存储介质 | |
US5524239A (en) | Replay recovery protocol for real-time database management systems | |
US9092216B2 (en) | Transactional object container | |
US20210406245A1 (en) | Rollback-Free Referential Integrity Update Processing | |
CN112965984A (zh) | 一种执行数据库事务的方法及装置 | |
CN114116768A (zh) | 一种对数据库集群进行读写分离的方法 | |
US20110071984A1 (en) | Area-Specific Reload of Database | |
CN111737273A (zh) | 事务提交方法、装置、协调节点及存储介质 | |
CN114610626B (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 |