CN112084161B - 基于数据库的数据处理方法、装置以及可读存储介质 - Google Patents
基于数据库的数据处理方法、装置以及可读存储介质 Download PDFInfo
- Publication number
- CN112084161B CN112084161B CN202010972880.4A CN202010972880A CN112084161B CN 112084161 B CN112084161 B CN 112084161B CN 202010972880 A CN202010972880 A CN 202010972880A CN 112084161 B CN112084161 B CN 112084161B
- Authority
- CN
- China
- Prior art keywords
- transaction
- target
- log
- historical
- type
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 230000004048 modification Effects 0.000 claims abstract description 151
- 238000012986 modification Methods 0.000 claims abstract description 151
- 238000002955 isolation Methods 0.000 claims abstract description 115
- 238000000034 method Methods 0.000 claims description 33
- 238000012545 processing Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 9
- 230000010076 replication Effects 0.000 abstract description 17
- 230000006870 function Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000013507 mapping Methods 0.000 description 9
- 238000012546 transfer Methods 0.000 description 8
- 238000005457 optimization Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 208000004547 Hallucinations Diseases 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/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/11—File system administration, e.g. details of archiving or snapshots
- G06F16/116—Details of conversion of file system types or formats
-
- 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
-
- 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
技术领域
本发明涉及计算机技术领域,尤其涉及基于数据库的数据处理方法、装置以及可读存储介质。
背景技术
随着数据量的快速增长,许多产品对数据库的性能要求越来越高。为了缓解数据库服务器的压力以及保障数据安全,通常会利用数据库的主从复制功能,例如基于日志的主从复制,会将主数据库上所有对数据的修改记录在日志中,从数据库通过回放主数据库上的数据修改,从而保证与主数据库的数据一致性。
现有的技术中,当主数据库执行一个事务时,若修改的数据很多,采用基于行的日志格式生成日志时,一方面日志内容会比较多,另一方面从数据库响应也比较慢,特别在复制的表上没有主键的时候。极端情况下,线上会遇到一些事务导致持续出现10G左右的日志文件,进而导致从数据库有较大延迟,影响主从数据的一致性。
发明内容
本发明实施例提供一种基于数据库的数据处理方法、装置以及可读存储介质,可以有效减小日志文件的文件大小,进而减少主从复制的延迟。
本发明实施例提供一方面提供了一种基于数据库的数据处理方法,该方法包括:
获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数;
当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志。
其中,所述在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数,包括:
获取历史事务执行记录表;所述历史事务执行记录表包括历史事务对应的历史事务执行数据;所述历史事务执行数据包括所述历史事务中历史查询语句对应的查询语句类型,以及所述查询语句类型对应的历史修改参数;
根据所述目标查询语句类型,在历史事务执行记录表中查找所述目标查询语句类型对应的历史修改参数,作为目标历史修改参数。
其中,所述目标历史修改参数包括历史修改行数和历史日志更新权限标识;
该方法还包括:
对所述历史日志更新权限进行识别;
当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数大于数量阈值时,确定所述当前事务的事务类型为目标事务类型;
当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数小于或等于数量阈值时,确定所述当前事务的事务类型不属于目标事务类型;
当识别出所述历史日志更新权限标识为非法更新权限标识时,确定所述当前事务的事务类型不属于目标事务类型。
其中,所述当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新,包括:
当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,获取所述数据库当前配置的第一隔离级别;
在生成所述当前事务对应的事务执行快照之前,根据所述目标事务类型将所述第一隔离级别更新为第二隔离级别;所述第二隔离级别对应的数据读写安全等级大于所述第一隔离级别对应的数据读写安全等级;
获取所述数据库当前配置的原始日志格式;根据所述目标事务类型将所述原始日志格式更新为混合日志格式;
则所述根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志,包括:
根据所述第二隔离级别以及所述混合日志格式,生成所述当前事务对应的事务执行日志。
其中,该方法还包括:
当所述当前事务执行完成时,获取所述当前事务对应的事务执行日志,根据所述当前事务对应的事务执行日志更新历史事务执行数据;
将所述数据库对应的事务隔离级别重置回第一隔离级别;
将所述数据库对应的日志格式重置回原始日志格式。
其中,所述根据所述当前事务对应的事务执行日志更新历史事务执行数据,包括:
若所述当前事务对应的事务执行日志的日志格式为基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为合法更新权限标识;
若所述当前事务对应的事务执行日志的日志格式不是基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为非法更新权限标识。
其中,所述根据所述当前事务对应的事务执行日志更新历史事务执行数据,包括:
据所述当前事务对应的事务执行日志,获取已执行完的所述目标查询语句对应的实际修改行数,根据所述实际修改行数更新所述历史事务执行记录表中的所述目标查询语句类型对应的历史修改行数。
其中,所述根据所述实际修改行数更新所述目标查询语句类型对应的历史修改行数,包括:
将所述历史事务执行记录表中的所述历史修改行数替换为所述实际修改行数,或,
获取所述实际修改行数和所述历史修改行数之间的修改行数平均值,将所述历史事务执行记录表中的所述历史修改行数替换为所述修改行数平均值。
本发明实施例一方面提供了一种基于数据库的数据处理装置,包括:
获取模块,用于获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数;
第一更新模块,用于当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
生成模块,用于根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志。
其中,所述获取模块包括:
记录表获取单元,用于获取历史事务执行记录表;所述历史事务执行记录表包括历史事务对应的历史事务执行数据;所述历史事务执行数据包括所述历史事务中历史查询语句对应的查询语句类型,以及所述查询语句类型对应的历史修改参数;
查找单元,用于根据所述目标查询语句类型,在历史事务执行记录表中查找所述目标查询语句类型对应的历史修改参数,作为目标历史修改参数。
其中,所述目标历史修改参数包括历史修改行数和历史日志更新权限标识;
所述装置还包括:
识别模块,用于对所述历史日志更新权限进行识别;
事务类型确定模块,用于当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数大于数量阈值时,确定所述当前事务的事务类型为目标事务类型;
所述事务类型确定模块,还用于当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数小于或等于数量阈值时,确定所述当前事务的事务类型不属于目标事务类型;
所述事务类型确定模块,还用于当识别出所述历史日志更新权限标识为非法更新权限标识时,确定所述当前事务的事务类型不属于目标事务类型。
其中,所述第一更新模块包括:
隔离级别获取单元,用于当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,获取所述数据库当前配置的第一隔离级别;
隔离级别更新单元,用于在生成所述当前事务对应的事务执行快照之前,根据所述目标事务类型将所述第一隔离级别更新为第二隔离级别;所述第二隔离级别对应的数据读写安全等级大于所述第一隔离级别对应的数据读写安全等级;
日志格式获取单元,用于获取所述数据库当前配置的原始日志格式;
日志格式更新单元,用于根据所述目标事务类型将所述原始日志格式更新为混合日志格式;
则所述生成模块,具体用于根据所述第二隔离级别以及所述混合日志格式,生成所述当前事务对应的事务执行日志。
其中,所述装置还包括:
第二更新模块,用于当所述当前事务执行完成时,获取所述当前事务对应的事务执行日志,根据所述当前事务对应的事务执行日志更新历史事务执行数据;
重置模块,用于将所述数据库对应的事务隔离级别重置回第一隔离级别;将所述数据库对应的日志格式重置回原始日志格式。
其中,所述第二更新模块,具体用于若所述当前事务对应的事务执行日志的日志格式为基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为合法更新权限标识,且具体用于若所述当前事务对应的事务执行日志的日志格式不是基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为非法更新权限标识。
其中,所述第二更新模块包括:
修改行数获取单元,用于根据所述当前事务对应的事务执行日志,获取已执行完的所述目标查询语句对应的实际修改行数;
修改行数更新单元,用于根据所述实际修改行数更新所述历史事务执行记录表中的所述目标查询语句类型对应的历史修改行数。
其中,所述修改行数更新单元,具体用于将所述历史事务执行记录表中的所述历史修改行数替换为所述实际修改行数,或,具体用于获取所述实际修改行数和所述历史修改行数之间的修改行数平均值,将所述历史事务执行记录表中的所述历史修改行数替换为所述修改行数平均值。
本发明实施例一方面提供了一种基于数据库的数据处理装置,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以执行如本发明实施例中一方面中的方法。
本发明实施例一方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如本发明实施例中一方面中的方法。
本发明实施例在主从复制的过程中,可以通过历史修改参数对当前事务进行事务类型识别,并在识别到目标事务类型时对当前事务对应的事务执行日志进行优化,可以对数据库对应的事务隔离级别以及日志格式进行更新,进而可以根据更新后的事务隔离级别以及更新后的日志格式,更灵活地采用针对当前事务类型的日志格式来生成事务执行日志,降低了始终采用基于行的日志格式的可能性,从而可以灵活减少日志的内容量,并减少从数据库响应的压力,从而可以缩小从数据库复制的延迟。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本发明实施例提供的一种***架构示意图;
图1b是一种主从复制原理的场景示意图;
图2是本发明实施例提供的一种基于数据库的数据处理方法的场景示意图;
图3是本发明实施例提供的一种基于数据库的数据处理方法的流程示意图;
图4是本发明实施例提供的一种基于数据库的数据处理方法的流程示意图;
图5是本发明实施例提供的一种基于数据库的数据处理装置的结构示意图;
图6是本发明实施例提供的另一种基于数据库的数据处理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
数据库是“按照数据结构来组织、存储和管理数据的仓库”,是以一定方式存储在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,用户可以对其中的数据进行新增、查询、更新、删除等操作。随着云计算的发展和大数据时代的到来,对数据库的技术提出了新的要求,数据库的类型也变得更多元。
请参见图1a,是本发明实施例提供的一种***架构示意图。该***架构可以包括主服务器以及多个从服务器(如图1a所示,具体包括主服务器1000、从服务器100a、从服务器100b、从服务器100c、…、从服务器100n),其中,主服务器的数量也可以为多个,本申请不对主服务器的数量进行限定。主服务器1000通过网络与每个从服务器进行数据传输,主数据库(Master)运行在主服务器1000上,从数据库(Slave)运行在各个从服务器上,因此,每个从数据库均可通过各自对应的从服务器以及主服务器1000与主数据库进行数据传输。这里以从服务器100a与主服务器1000之间的数据备份为例进行本发明实施例的描述。事务是业务处理场景中常见的处理单元,一个事务中包括一系列动作,对应一系列查询语句。在当前事务开始执行之前,主服务器1000可以先对当前事务的事务类型进行识别,识别过程可以为:主服务器1000获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取上述目标查询语句对应的目标历史修改参数,根据目标历史修改参数确定当前事务的事务类型,历史事务执行数据可以表示为在当前时刻之前,主服务器1000执行过的事务中历史查询语句对应的查询语句类型以及历史修改参数,查询语句类型可以包括但不限于更新语句、删除语句、新增语句。当前事务类型为目标事务类型时,目标事务类型对应的事务所触发的修改数据会很多,采用基于行的日志格式会导致生成的日志文件很大,进而可以将该事务称之为大事务,此时主服务器1000可以将主数据库对应的事务隔离级别(Transaction Isolation Levels)以及日志格式(Log Format)进行更新,事务隔离级别和日志格式是影响当前事务最终生成的日志格式的重要因素,日志格式会进一步影响数据备份的模式。主服务器1000执行当前事务中的一系列查询语句,并根据更新后的事务隔离级别和日志格式,生成当前事务对应的事务执行日志。当从服务器100a连接主服务器1000时,从服务器100a通知主服务器1000关于从服务器100a在事务执行日志中读取的最后一次成功更新的位置,更新位置为时间戳T1,从服务器100a可以接收从T1到T2发生的任何更新,T2可以是在T1时间戳之后的任何时间。从服务器100a可以进一步在本机上执行相同的更新,然后封锁并等待主服务器1000通知新的更新,即实现了主服务器1000与从服务器100a之间的主从复制。这种基于日志的主从复制,从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
应当理解,上述主服务器和从服务器是相对而言的,在原来作为从服务器的服务器当作主服务器使用时,原来作为主服务器的服务器则可以相应的作为从服务器来使用。可选的,上述主从复制中的主从形式可以是一主一从、一主多从、多主一从、主主复制或者联级复制,这里仅以一主多从的形式为例进行说明(如图1a所示),具体的主从形式根据实际应用场景决定,这里不做限制。
其中,数据库服务器(如上述的主服务器1000,从服务器100a、从服务器100b、从服务器100c、…、从服务器100n)可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云数据库、云服务、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
本发明实施例中涉及到的主从复制机制是基于日志实现的,其中,事务执行日志中会保存主数据库中所有对数据的修改,每条查询语句更新产生的日志格式可以是不同的,日志格式可以理解为记录数据修改的形式,日志格式可以包括基于行的日志格式(Row)、基于查询语句的日志格式(Statement)和混合日志格式(Mixed),基于行的日志格式下,事务执行日志会将被修改的每一行数据作为单独的一条写入日志中;基于查询语句的日志格式下,事务执行日志将会修改数据的每一条查询语句记录在日志中;混合日志格式是前两种模式的结合,服务器会根据执行的每一条具体的查询语句来区分对待记录的日志格式,即在基于行的日志格式和基于查询语句的日志格式中选择一种。和基于行的日志格式生成的事务执行日志相比,基于查询语句的日志格式生成的事务执行日志的内容量会更少。
在应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务,故而并发事务可能会导致脏读(Dirty read)、不可重复读(Unrepeatable read)、幻读(Phantom read)等问题。脏读是指当事务A正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时事务B也访问了并使用了这个数据,因为这个数据是还没有提交的数据,则事务B读到的这个数据为“脏数据”,依据“脏数据”所做的操作可能是不正确的。不可重复读是指在事务A内多次读同一数据,在事务A还没有结束时,事务B也访问该数据,则在事务A中的两次读数据之间,由于事务B的修改导致事务A两次读取的数据可能不一样,这就发生了在一个事务内两次读到的数据是不一样的情况。幻读与不可重复读类似,它发生在事务A读取了几行数据,接着并发事务B***了一些数据时,在随后的查询中,事务A就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,因此称为幻读。
为了避免上面出现的几种情况,定义了四种事务隔离级别,事务隔离级别是数据库处理的基础之一,在同时有多个事务进行处理时,不同的隔离级别在性能和一致性、可靠性等指标上会有不同的体现。隔离级别一般包括:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和序列化(Serializable)。读未提交的隔离级别是最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读;读已提交的隔离级别允许读取并发事务已经提交的数据,可以阻止脏读,但幻读或不可重复读仍有可能发生;可重复读的隔离级别对同一字段的多次读取结果是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生;序列化的隔离级别是最高的隔离级别,所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,即序列化的隔离级别可以防止脏读、不可重复读以及幻读。因此,隔离级别越高,越能保证数据的完整性和一致性,但对并发性能的影响也越大。
运行在上述主服务器和从服务器中的数据库可以为MySQL。MySQL是一个关系型数据库管理***,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,故而可以提升速度并提高灵活性。MySQL所使用的结构化查询语言(StructuredQuery Language,SQL)是用于访问数据库的最常用的标准化语言,常见的操作有查询、新增、更新、删除、求和、排序等。MySQL具有体积小、查询速度快、总体成本低、稳定性高、开放源码等特点,成为了很多中小型网站数据库的首选。请一并参见图1b,是一种主从复制的场景示意图。如图1b所示,主数据库中事务A产生数据变更,主服务器(该主服务器对应于图1a所对应实施例中的主服务器1000)可以识别事务A的事务类型,当识别到事务A为大事务时,可以进一步更新主数据库对应的事务隔离级别以及日志格式,并根据更新后的事务隔离级别以及日志格式,将事务A产生的数据变更记录到二进制日志(binlog)中,从数据库会在一定时间间隔内对主数据库的二进制日志进行探测其是否发生改变,如果发生改变,则开启一个输入输出线程(I/O thread)请求主数据库二进制事件,同时主数据库为每个输入输出线程启动一个二进制转存线程(Binlog Dump thread),用于向从数据库发送二进制事件,并保存至从数据库本地的中继日志(relaylog)中,从数据库将启动结构化查询语言线程(SQL thread)从中继日志中读取二进制事件,在本地重放,从而完成主数据库与从数据库的数据同步,最后输入输出线程和结构化查询语言线程将进入休眠状态,同时二进制转存线程也进入休眠状态,等待下一次被唤醒。
请一并参见图2,是本发明实施例提供的一种基于数据库的数据处理方法的场景示意图。如图2所示,该场景以图1a所对应实施例中的主服务器1000和从服务器100a为例,用户X需要向其他多个用户的银行账户转账,假设用户X及这多个用户的银行账户都是在同一家银行开立的,故而这些用户的金融交易数据、账户数据等都保存在该银行的数据库中,用户X可以通过该银行的应用程序C2进行转账操作。终端设备200在打开应用程序C2后,在终端显示界面中可以显示应用程序C2的用户界面300,在用户界面300中选择“转账”按钮后,终端设备200会显示转账界面,用户X可以在转账界面选择需要转账的对象和对应的金额,应用程序C2会向主服务器1000发起数据更新请求,更新包括用户X的银行账户的余额、每个转账对象的银行账户对应的余额等,主服务器1000可以获取到当前事务中目标查询语句对应的目标查询语句类型,进一步获取该查询语句类型对应的历史修改参数,并根据历史修改参数识别当前事务的事务类型。当识别到当前事务的事务类型为大事务类型时,主服务器1000可以进一步对事务执行日志进行优化,更新主数据库对应的事务隔离级别以及日志格式,进而执行更新操作,并根据更新后的事务隔离级别和日志格式生成对应的事务执行日志,并通过事务执行日志向从服务器100a复制数据。从服务器100a可以在接收到数据并执行完后向主服务器1000返回成功信息,主服务器1000在接收到从服务器100a的成功信息后可以向应用程序C2返回响应,用户X及其转账对象可以在应用程序C2的用户界面300上看到对应的提示消息。
其中,对于主服务器1000识别当前事务的事务类型和更新事务隔离级别以及日志格式的具体过程,可以参见后续图3所对应实施例中步骤S101-步骤S103的描述。除金融业务外,本实例提供的方法还可以应用于游戏、互联网和移动App电商等场景中,解决数据库在服务过程中由于大事务产生基于行的日志格式的日志内容过多,导致主从延迟较大,进而影响数据安全性、可靠性的问题。由此可见,主服务器1000可以根据目标查询语句类型对应的历史修改参数,识别当前事务是否为大事务,且通过对识别到的大事务的事务执行日志进行优化,采用针对当前事务类型的日志格式来生成事务执行日志,降低了始终采用基于行的日志格式的可能性,由于事务执行日志中记录数据修改的形式更灵活、更有针对性,产生的日志量更少,从而可以节省存储资源,减少从服务器响应的压力,进而可以缩小主从复制的延迟。
请参见图3,是本发明实施例提供的一种基于数据库的数据处理方法的流程示意图。如图3所示,该方法可以包括以下步骤:
步骤S101,获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数;
具体的,服务器(该服务器对应于图1a所对应实施例中的主服务器1000)可以开启查询语句分析功能,具体可以是sql_digest功能,通过sql_digest功能获取当前事务中目标查询语句对应的目标查询语句类型。可选的,服务器可以获取数据库中执行过的每一条历史查询语句对应的查询语句类型,并对历史查询语句所触发的修改数据进行统计,得到的统计数据(也可以称为历史事务执行数据)可以保存在历史事务执行记录表中,具体可以创建一个哈希表(Hash table)用于存放统计数据。其中,统计数据可以包括历史查询语句对应的查询语句类型以及上述查询语句类型对应的历史修改参数,历史修改参数可以包括历史修改行数、执行次数等。此外,为了方便查找,历史事务执行记录表中还可以包括类型查找值,类型查找值可以由历史查询语句对应的查询语句类型经过映射得到,并将对应的统计数据和类型查找值进行关联,上述映射具体可以为压缩映射,即输出的空间通常远小于输入的空间,不同的输入可能会映射成相同的输出,输入到输出的过程可以由映射函数实现。
服务器可以进一步将目标查询类型经过压缩映射得到类型查找值F,然后在历史事务执行记录表中查找与类型查找值F相对应的历史修改参数,得到目标查询语句类型对应的目标历史修改参数。例如,当统计数据存放在全局创建的哈希表中时,哈希值相同的数据会存放在同一个位置,服务器可以通过参数开启sql_digest功能,获取当前事务中目标查询语句对应的目标查询语句类型,进而可以通过事先构造好的哈希函数,将目标查询语句类型映射为它的哈希值,并在哈希表中查找具有这个哈希值的数据,以确定目标查询语句类型对应的目标历史修改参数。
步骤S102,当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
具体的,在获取了目标查询语句类型对应的目标历史修改参数后,服务器可以根据目标历史修改参数进一步确定当前事务的事务类型,目标历史修改参数可以包括目标查询语句类型对应的多种修改信息,如历史修改行数、执行次数等修改信息。根据目标查询语句类型对应的历史修改行数可以确定当前事务的事务类型,历史修改行数可以由已执行过的相关类型的历史查询语句对应的实际修改行数得到。其中,事务类型可以包括目标事务类型和普通事务类型,目标事务类型所对应的事务可以称之为大事务,若历史修改行数大于数量阈值,则当前事务的事务类型可以确定为目标事务类型,同时也可以将当前事务定义为大事务。若历史修改行数小于或等于数量阈值,则当前事务的事务类型可以确定为普通事务类型,其中,修改行数的数量阈值可以由***灵活设置。当前事务为大事务时,服务器可以获取数据库当前配置的第一隔离级别和原始日志格式,进而可以在生成当前事务对应的事务执行快照(readview)之前,通过SQL语法SET TRANSACTION ISOLATION LEVEL修改隔离级别,具体可以调用Sys_var_tx_isolation::session_update将第一隔离级别更新为第二隔离级别,并将原始日志格式更新为混合日志格式。其中,事务执行快照中能获取到与当前记录相关的事务中,已提交的稳定事务、正在活跃的事务以及生成快照之后才开启的事务的相关信息。其中,第二隔离级别对应的数据读写安全等级大于第一隔离级别对应的数据读写安全等级,在考虑性能和一致性、可靠性之间的平衡时,通常会使用读已提交(Read Committed)的隔离级别,故而第一隔离级别可以是读已提交的隔离级别,第二隔离级别可以是可重复读(Repeatable Read)的隔离级别。
步骤S103,根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志。
具体的,服务器可以根据更新后的事务隔离级别和日志格式,调用函数THD::decide_logging_format进行计算,计算得到的结果可以决定当前事务对应的事务执行日志的日志格式,进而根据计算结果生成当前事务对应的事务执行日志。例如,若将当前事务的隔离级别提升至可重复读,且将日志格式更新为混合日志格式,可以降低当前事务对应的事务执行日志始终采用基于行的日志格式的可能性。
本发明实施例可以通过获取当前事务中目标查询语句对应的目标查询语句类型,进而可以在历史事务执行数据中选择出目标历史修改参数,并根据目标历史修改参数识别当前事务的事务类型,进而可以在当前事务类型为目标事务类型时,对数据库对应的事务隔离级别以及日志格式进行更新,生成对应的事务执行日志。可见,在主从复制的过程中,可以对大事务进行识别,并在识别到大事务后进行事务隔离级别的提升以及日志格式的更新,降低了始终采用基于行的日志格式的可能性,从而可以灵活减少日志的内容量,节省存储资源,从服务器响应的压力也随之减少,进而可以缩小主从复制的延迟。
请参见图4,是本发明实施例提供的一种基于数据库的数据处理方法的流程示意图。如图4所示,该方法可以包括以下步骤:
步骤S201,获取当前事务中目标查询语句对应的目标查询语句类型;
具体的,服务器(该服务器对应于图1a所对应实施例中的主服务器1000)可以通过参数开启查询语句分析功能,具体可以是sql_digest功能,获取当前事务中目标查询语句对应的目标查询语句类型。
步骤S202,获取历史事务执行记录表;所述历史事务执行记录表包括历史事务对应的历史事务执行数据;所述历史事务执行数据包括所述历史事务中历史查询语句对应的查询语句类型、与查询语句类型具有压缩映射关系的类型查找值,以及所述查询语句类型对应的历史修改参数;
具体的,服务器可以获取数据库中执行过的每一条历史查询语句对应的查询语句类型,并对历史查询语句所触发的修改数据进行统计得到历史事务执行数据,并将其保存在历史事务执行记录表中。历史事务执行数据的数据结构可如下:
由上述结构可以看出,历史事务执行数据sql_execute_Statistics_info可以包括历史查询语句对应的查询语句类型以及所述查询语句类型对应的历史修改参数,其中,查询语句类型可以包括语句逻辑类型sql_command和语句结构类型digest_text,语句逻辑类型可以包括但不限于更新语句、删除语句、新增语句等,语句结构类型是对语句逻辑类型的进一步细化,因此相同的语句逻辑类型可能会有不同的语句结构类型,如对数据的更新,可能会有形如a=?的结构。历史修改参数可以包括历史时间戳、执行次数execute_count、历史修改行数、历史日志更新权限标识stmt_binlog_format_if_possible等。此外,类型查找值digest可以由历史查询语句对应的语句结构类型经过压缩映射得到。
步骤S203,根据所述目标查询语句类型,在历史事务执行记录表中查找所述目标查询语句类型对应的历史修改参数,作为目标历史修改参数;
具体的,服务器可以将目标查询语句类型经过压缩映射得到对应的类型查找值F,并在历史事务执行记录表中查找与类型查找值F相对应的历史修改参数作为目标历史修改参数。当历史事务执行记录表中不存在目标查询语句类型时,服务器可以选择与该目标查询语句类型具有压缩映射关系的类型查找值在历史事务执行记录表中对应的地址,作为后续存放该查询语句类型对应的历史事务执行数据的位置。
步骤S204,根据所述目标历史修改参数对当前事务的事务类型进行识别,所述目标历史修改参数包括历史修改行数和历史日志更新权限标识;
具体的,服务器可以在目标历史修改参数中提取出历史修改行数和历史日志更新权限标识。其中,历史修改行数可以包括总修改行数total_affected_rows、平均修改行数aver_affected_rows、最大修改行数last_affected_rows。历史日志更新权限标识可以理解为,根据相关类型的查询语句,最近一次识别到的大事务能否优化成功的标志,具体的,可一并参见上述图3所对应实施例中的步骤S102-步骤S103,当根据目标历史修改参数识别到前事务为大事务时,可以对数据库对应的事务隔离级别以及日志格式进行更新,根据更新后的事务隔离级别和日志格式可以计算得到当前事务对应的事务执行日志的日志格式,若该日志格式为基于查询语句的日志格式,则表示当前事务的事务执行日志优化成功,否则表示当前事务的事务执行日志优化失败。优化成功时将与目标查询语句类型对应的历史日志更新权限标识标志为合法更新权限标识,优化失败时将与目标查询语句类型对应的历史日志更新权限标识标志为非法更新权限标识,故而服务器可以通过历史修改行数和历史日志更新权限标识对当前事务的事务类型进行更准确地识别。具体的,可以对历史日志更新权限标识进行识别,若识别到的是非法更新权限标识,则可以确定当前事务不是大事务(即当前事务的事务执行日志在这种情况下不能优化成功);若识别到的是合法更新权限标识,且最大修改行数小于或等于最大行数阈值,则可以确定当前事务不是大事务;若识别到的是合法更新权限标识,且最大修改行数大于最大行数阈值,则可以确定当前事务为大事务。可选的,若服务器识别到的是合法更新权限标识,可以将平均修改行数大于平均行数阈值时的事务类型确定为目标事务类型。在本发明实施例中,服务器可以灵活定义修改行数最大行数阈值或平均行数阈值,用于帮助识别大事务。
步骤S205,当所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
具体的,当前事务为大事务时,服务器可以获取数据库当前配置的第一隔离级别和原始日志格式,进而可以在生成当前事务对应的事务执行快照之前,通过调用Sys_var_tx_isolation::session_update将数据库对应的隔离级别安全地提升至可重复读的隔离级别,并将原始日志格式更新为混合日志格式。
步骤S206,根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志;
具体的,服务器可以根据可重复读的隔离级别和混合日志格式,调用函数THD::decide_logging_format进行计算,并根据计算结果在基于查询语句的日志格式和基于行的日志格式中选择一种,进而生成当前事务对应的事务执行日志。
步骤S207,当所述当前事务执行完成时,获取所述当前事务对应的事务执行日志,根据所述当前事务对应的事务执行日志更新历史事务执行数据;
具体的,当前事务执行完成后,服务器可以获取当前事务对应的事务执行日志,并识别该事务执行日志的日志格式,若上述日志格式为基于查询语句的日志格式,表示对当前事务的事务执行日志优化成功,则服务器可以在历史事务执行记录表中将目标历史修改参数中的历史日志更新权限标识设置为合法更新权限标识;若上述日志格式不是基于查询语句的日志格式,表示对当前事务的事务执行日志优化失败,则服务器可以在历史事务执行记录表中将目标历史修改参数中的历史日志更新权限标识设置为非法更新权限标识。其中,历史日志更新权限标识可以是布尔型(bool)的参数,则合法更新权限标识可以用true表示,非法更新权限标识可以用false表示。
进一步,服务器可以获取已执行完的目标查询语句对应的实际修改行数,根据实际修改行数更新历史事务执行记录表中目标查询语句类型对应的历史修改行数。具体的,可以将历史事务执行记录表中的历史修改行数替换为上述实际修改行数。可选的,获取上述实际修改行数和历史修改行数之间的修改行数平均值,将历史事务执行记录表中的历史修改行数替换为上述修改行数平均值。
应当理解,当前事务不是目标事务类型时,服务器也可以对该事务中的查询语句对应的查询语句类型进行识别,并在上述查询语句执行完成后,获取对应的实际修改行数,并根据实际修改行数更新历史事务执行记录表中上述查询语句类型对应的历史修改行数。通过记录所有执行过的事务,事务执行记录表中的数据会更加丰富,并且可以对数据进行逐步优化,得到更稳健的参考数据,随着时间的积累,识别大事务的精度会越来越高。
步骤S208,将所述数据库对应的事务隔离级别重置回第一隔离级别;将所述数据库对应的日志格式重置回原始日志格式;
具体的,当前事务结束之后,服务器可以调用trans_reset_one_shot_chistics将数据库对应的事务隔离级别重置回第一隔离级别,将数据库对应的日志格式重置回原始日志格式。由于并非所有的事务都适用于步骤S205-步骤S206的优化流程,因此通过重置事务隔离级别和日志格式,后续可以对每个新事务都进行大事务的识别,避免因为本次对事务隔离级别和日志格式的更新而导致后续的事务(如不适用于步骤S205-步骤S206的优化流程的事务)都采用第二隔离级别和混合日志格式生成日志。
步骤S209,在历史事务执行数据中获取历史时间戳,根据所述历史时间戳清理对应的历史事务执行数据。
具体的,为了避免历史事务执行记录表中存储过多数据,服务器可以根据历史时间戳开启后台线程对表中的数据进行定期清理。其中,历史时间戳具体可以包括首次更新时间戳first_update_timestap、末次更新时间戳last_update_timestap、最新访问时间戳last_access_timestap,服务器可以计算当前时刻与最新访问时间戳的时间差,当时间差超过时间差阈值时,可以通过后台线程清理对应的历史事务执行数据。例如,查询语句类型a1对应的最新访问时间戳为T1,当前时刻为T2,此时T1与T2的时间差大于***设定的时间差阈值t,则服务器可以开启后台线程清理查询语句类型a1对应的历史事务执行数据。
可选的,服务器可以计算首次更新时间戳与末次更新时间戳的时间差,当时间差超过时间差阈值时,可以通过后台线程清理对应的历史事务执行数据。服务器可以根据具体情况灵活定义时间差阈值。
需要说明的是,每一次历史事务执行记录表中的历史事务执行数据进行更新时,对应的历史时间戳也会相应更新。
本发明实施例可以通过获取当前事务中目标查询语句对应的目标查询语句类型,进而可以在存储有历史事务执行数据的历史事务执行记录表中查找目标历史修改参数,并根据目标历史修改参数识别当前事务的事务类型,进而可以在当前事务类型为目标事务类型时,对数据库对应的事务隔离级别以及日志格式进行更新,生成对应的事务执行日志,进一步可以在当前事务结束后更新历史事务执行数据,并对历史事务执行记录表中的数据进行定期清理。可见,在主从复制的过程中,可以对大事务进行识别,由于事务执行记录表会根据最近一次事务进行更新,故而可以提高识别大事务的准确率,并在识别到大事务后进行事务隔离级别的提升以及日志格式的更新,降低了始终采用基于行的日志格式的可能性,产生的日志量更少,从而可以缩小主从复制的延迟。
请参见图5,是本发明实施例提供的一种基于数据库的数据处理装置的结构示意图。如图5所示,该基于数据库的数据处理装置1可以应用于上述图2所对应实施例中的服务器1000,该基于数据库的数据处理装置1可以包括获取模块11、第一更新模块12、生成模块13;
获取模块11,用于获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数;
第一更新模块12,用于当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
生成模块13,用于根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志;
所述生成模块13,具体用于根据所述第二隔离级别以及所述混合日志格式,生成所述当前事务对应的事务执行日志。
其中,所述获取模块11、第一更新模块12、生成模块13的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101-步骤S103,这里不再进行赘述。
请一并参见图5,该基于数据库的数据处理装置1还可以包括识别模块14、事务类型确定模块15、第二更新模块16、重置模块17;
识别模块14,用于对所述历史日志更新权限进行识别;
事务类型确定模块15,用于当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数大于数量阈值时,确定所述当前事务的事务类型为目标事务类型;
所述事务类型确定模块15,还用于当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数小于或等于数量阈值时,确定所述当前事务的事务类型不属于目标事务类型;
所述事务类型确定模块15,还用于当识别出所述历史日志更新权限标识为非法更新权限标识时,确定所述当前事务的事务类型不属于目标事务类型;
第二更新模块16,用于当所述当前事务执行完成时,获取所述当前事务对应的事务执行日志,根据所述当前事务对应的事务执行日志更新历史事务执行数据;
所述第二更新模块16,具体用于若所述当前事务对应的事务执行日志的日志格式为基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为合法更新权限标识,且具体用于若所述当前事务对应的事务执行日志的日志格式不是基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为非法更新权限标识;
重置模块17,用于将所述数据库对应的事务隔离级别重置回第一隔离级别;将所述数据库对应的日志格式重置回原始日志格式。
其中,识别模块14,事务类型确定模块15的具体功能实现可以参见上述图4所对应实施例中的步骤S204,第二更新模块16的具体功能实现可以参见上述图4所对应实施例中的步骤S207,重置模块17的具体功能实现可以参见上述图4所对应实施例中的步骤S208,这里不再进行赘述。
请一并参见图5,获取模块11可以包括:记录表获取单元111,查找单元112;
记录表获取单元111,用于获取历史事务执行记录表;所述历史事务执行记录表包括历史事务对应的历史事务执行数据;所述历史事务执行数据包括所述历史事务中历史查询语句对应的查询语句类型,以及所述查询语句类型对应的历史修改参数;
查找单元112,用于根据所述目标查询语句类型,在历史事务执行记录表中查找所述目标查询语句类型对应的历史修改参数,作为目标历史修改参数。
其中,历史事务执行记录表获取单元111的具体功能实现可以参见上述图4所对应实施例中的步骤S202,查找单元112的具体功能实现可以参见上述图4所对应实施例中的步骤S203,这里不再进行赘述。
请一并参见图5,第一更新模块12可以包括:隔离级别获取单元121,隔离级别更新单元122,日志格式获取单元123,日志格式更新单元124;
隔离级别获取单元121,用于当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,获取所述数据库当前配置的第一隔离级别;
隔离级别更新单元122,用于在生成所述当前事务对应的事务执行快照之前,根据所述目标事务类型将所述第一隔离级别更新为第二隔离级别;所述第二隔离级别对应的数据读写安全等级大于所述第一隔离级别对应的数据读写安全等级;
日志格式获取单元123,用于获取所述数据库当前配置的原始日志格式;
日志格式更新单元124,用于根据所述目标事务类型将所述原始日志格式更新为混合日志格式。
其中,隔离级别获取单元121,隔离级别更新单元122,日志格式获取单元123,日志格式更新单元124的具体功能实现方式可以参见上述图3所对应实施例中的步骤S102,或者可以参见上述图4所对应实施例中的步骤S205,这里不再进行赘述。
请一并参见图5,第二更新模块16可以包括:修改行数获取单元161、修改行数更新单元162;
修改行数获取单元161,用于根据所述当前事务对应的事务执行日志,获取已执行完的所述目标查询语句对应的实际修改行数;
修改行数更新单元162,用于根据所述实际修改行数更新所述历史事务执行记录表中的所述目标查询语句类型对应的历史修改行数;
所述修改行数更新单元162,具体用于将所述历史事务执行记录表中的所述历史修改行数替换为所述实际修改行数,或,具体用于获取所述实际修改行数和所述历史修改行数之间的修改行数平均值,将所述历史事务执行记录表中的所述历史修改行数替换为所述修改行数平均值。
其中,修改行数获取单元161、修改行数更新单元162的具体功能实现方式可以参见上述图4所对应实施例中的步骤S207,这里不再进行赘述。
本发明实施例可以通过获取当前事务中目标查询语句对应的目标查询语句类型,进而可以在历史事务执行数据中选择出目标历史修改参数,并根据目标历史修改参数识别当前事务的事务类型,进而可以在当前事务类型为目标事务类型时,对数据库对应的事务隔离级别以及日志格式进行更新,生成对应的事务执行日志。可见,在主从复制的过程中,可以对大事务进行识别,并在识别到大事务后进行事务隔离级别的提升以及日志格式的更新,降低了始终采用基于行的日志格式的可能性,由于事务执行日志中记录数据修改的形式更灵活、更有针对性,产生的日志量更少,从而可以节省存储资源,减少从服务器响应的压力,进而可以缩小主从复制的延迟。
请参见图6,是本发明实施例提供的另一种基于数据库的数据处理装置的结构示意图,如图6所示,该基于数据库的数据处理装置2000可以对应于上述图2所对应实施例中的服务器1000,该基于数据库的数据处理装置2000可以包括:处理器2001,网络接口2003和存储器2004,此外,上述基于数据库的数据处理装置2000还可以包括:至少一个通信总线2002。其中,通信总线2002用于实现这些组件之间的连接通信。网络接口2003可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器2004可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器2004可选的还可以是至少一个位于远离前述处理器2001的存储装置。如图6所示,作为一种计算机可读存储介质的存储器2004中可以包括操作***、网络通信模块。
在如图6所示的基于数据库的数据处理装置2000中,网络接口2003可提供网络通讯功能,以实现上述图3、图4任一个所对应实施例中对所述基于数据库的数据处理方法的描述,这里不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
应当理解,本发明实施例中所描述的基于电子读物的数据推荐装置2000可执行前文图3、图4任一个所对应实施例中对所述基于数据库的数据处理方法的描述,也可执行前文图5所对应实施例中对所述基于数据库的数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本发明实施例还提供了一种计算机可读存储介质,且所述计算机可读存储介质中存储有前文提及的基于数据库的数据处理装置1所执行的计算机程序,且所述计算机程序包括程序指令,当所述处理器执行所述程序指令时,能够执行前文图3、图4任一个所对应实施例中对所述基于数据库的数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本发明所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本发明方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储存储器(Read-Only Memory,ROM)或随机存储存储器(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (10)
1.一种基于数据库的数据处理方法,其特征在于,包括:
获取当前事务中目标查询语句对应的目标查询语句类型,在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数;
当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新;
根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志。
2.根据权利要求1所述的方法,其特征在于,所述在历史事务执行数据中获取所述目标查询语句类型对应的目标历史修改参数,包括:
获取历史事务执行记录表;所述历史事务执行记录表包括历史事务对应的历史事务执行数据;所述历史事务执行数据包括所述历史事务中历史查询语句对应的查询语句类型,以及所述查询语句类型对应的历史修改参数;
根据所述目标查询语句类型,在历史事务执行记录表中查找所述目标查询语句类型对应的历史修改参数,作为目标历史修改参数。
3.根据权利要求2所述的方法,其特征在于,所述目标历史修改参数包括历史修改行数和历史日志更新权限标识;
所述方法还包括:
对所述历史日志更新权限进行识别;
当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数大于数量阈值时,确定所述当前事务的事务类型为目标事务类型;
当识别出所述历史日志更新权限标识为合法更新权限标识,且所述历史修改行数小于或等于数量阈值时,确定所述当前事务的事务类型不属于目标事务类型;
当识别出所述历史日志更新权限标识为非法更新权限标识时,确定所述当前事务的事务类型不属于目标事务类型。
4.根据权利要求3所述的方法,其特征在于,所述当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,根据所述目标事务类型对数据库对应的事务隔离级别以及日志格式进行更新,包括:
当根据所述目标历史修改参数确定所述当前事务的事务类型为目标事务类型时,获取所述数据库当前配置的第一隔离级别;
在生成所述当前事务对应的事务执行快照之前,根据所述目标事务类型将所述第一隔离级别更新为第二隔离级别;所述第二隔离级别对应的数据读写安全等级大于所述第一隔离级别对应的数据读写安全等级;
获取所述数据库当前配置的原始日志格式;根据所述目标事务类型将所述原始日志格式更新为混合日志格式;
则所述根据更新后的事务隔离级别以及更新后的日志格式,生成所述当前事务对应的事务执行日志,包括:
根据所述第二隔离级别以及所述混合日志格式,生成所述当前事务对应的事务执行日志。
5.根据权利要求4所述的方法,其特征在于,还包括:
当所述当前事务执行完成时,获取所述当前事务对应的事务执行日志,根据所述当前事务对应的事务执行日志更新历史事务执行数据;
将所述数据库对应的事务隔离级别重置回第一隔离级别;
将所述数据库对应的日志格式重置回原始日志格式。
6.根据权利要求5所述的方法,其特征在于,所述根据所述当前事务对应的事务执行日志更新历史事务执行数据,包括:
若所述当前事务对应的事务执行日志的日志格式为基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为合法更新权限标识;
若所述当前事务对应的事务执行日志的日志格式不是基于查询语句的日志格式,则在所述历史事务执行记录表中,将目标历史修改参数中的历史日志更新权限标识设置为非法更新权限标识。
7.根据权利要求5所述的方法,其特征在于,所述根据所述当前事务对应的事务执行日志更新历史事务执行数据,包括:
根据所述当前事务对应的事务执行日志,获取已执行完的所述目标查询语句对应的实际修改行数,根据所述实际修改行数更新所述历史事务执行记录表中的所述目标查询语句类型对应的历史修改行数。
8.根据权利要求7所述的方法,其特征在于,所述根据所述实际修改行数更新所述目标查询语句类型对应的历史修改行数,包括:
将所述历史事务执行记录表中的所述历史修改行数替换为所述实际修改行数,或,
获取所述实际修改行数和所述历史修改行数之间的修改行数平均值,将所述历史事务执行记录表中的所述历史修改行数替换为所述修改行数平均值。
9.一种基于数据库的数据处理装置,其特征在于,包括:处理器和存储器;
所述处理器和存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以执行如权利要求1-8任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010972880.4A CN112084161B (zh) | 2020-09-16 | 2020-09-16 | 基于数据库的数据处理方法、装置以及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010972880.4A CN112084161B (zh) | 2020-09-16 | 2020-09-16 | 基于数据库的数据处理方法、装置以及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112084161A CN112084161A (zh) | 2020-12-15 |
CN112084161B true CN112084161B (zh) | 2024-06-25 |
Family
ID=73737094
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010972880.4A Active CN112084161B (zh) | 2020-09-16 | 2020-09-16 | 基于数据库的数据处理方法、装置以及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112084161B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559247A (zh) * | 2020-12-18 | 2021-03-26 | 创意信息技术股份有限公司 | 一种基于第三方辅助的数据库数据备份方法及*** |
CN112765198A (zh) * | 2020-12-31 | 2021-05-07 | 金蝶软件(中国)有限公司 | 数据库语句处理方法、装置、计算机设备和存储介质 |
CN113076331B (zh) * | 2021-03-23 | 2023-06-02 | 中国联合网络通信集团有限公司 | 中台数据处理方法、装置、设备、存储介质及程序产品 |
CN113127427B (zh) * | 2021-04-21 | 2022-08-02 | 山东英信计算机技术有限公司 | 一种解析数据库日志中事务分布的方法、***及装置 |
CN116628023B (zh) * | 2023-05-10 | 2024-04-09 | 云和恩墨(北京)信息技术有限公司 | 等待事件类型查询方法、装置、存储介质和电子设备 |
CN117194566B (zh) * | 2023-08-21 | 2024-04-19 | 泽拓科技(深圳)有限责任公司 | 多存储引擎数据复制方法、***、计算机设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933703A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 一种数据库数据备份的方法、装置及电子设备 |
CN108228755A (zh) * | 2017-12-21 | 2018-06-29 | 江苏瑞中数据股份有限公司 | 基于日志解析技术的MySQL数据库到Hadoop平台的数据同步复制方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870758A (en) * | 1996-03-11 | 1999-02-09 | Oracle Corporation | Method and apparatus for providing isolation levels in a database system |
US8204859B2 (en) * | 2008-12-10 | 2012-06-19 | Commvault Systems, Inc. | Systems and methods for managing replicated database data |
JP5659892B2 (ja) * | 2011-03-15 | 2015-01-28 | 富士通株式会社 | 情報処理装置、及び携帯端末装置並びに該情報処理装置におけるログ出力の制御方法 |
CN110059074A (zh) * | 2019-03-18 | 2019-07-26 | 华迪计算机集团有限公司 | 一种用于内存数据库的数据处理方法及*** |
-
2020
- 2020-09-16 CN CN202010972880.4A patent/CN112084161B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106933703A (zh) * | 2015-12-30 | 2017-07-07 | 阿里巴巴集团控股有限公司 | 一种数据库数据备份的方法、装置及电子设备 |
CN108228755A (zh) * | 2017-12-21 | 2018-06-29 | 江苏瑞中数据股份有限公司 | 基于日志解析技术的MySQL数据库到Hadoop平台的数据同步复制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112084161A (zh) | 2020-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112084161B (zh) | 基于数据库的数据处理方法、装置以及可读存储介质 | |
EP3111347B1 (en) | Efficient methods and systems for consistent read in record-based multi-version concurrency control | |
US8924365B2 (en) | System and method for range search over distributive storage systems | |
US6879981B2 (en) | Sharing live data with a non cooperative DBMS | |
US8108343B2 (en) | De-duplication and completeness in multi-log based replication | |
WO2019217481A1 (en) | Conflict resolution for multi-master distributed databases | |
US10754854B2 (en) | Consistent query of local indexes | |
US9576038B1 (en) | Consistent query of local indexes | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
CN110309122B (zh) | 获取增量数据的方法、装置、服务器和存储介质 | |
CN111522880A (zh) | 一种基于mysql数据库集群的提升数据读写性能的方法 | |
CN109902127B (zh) | 历史态数据处理方法、装置、计算机设备及存储介质 | |
US20210191903A1 (en) | Generating hash trees for database schemas | |
EP4170509A1 (en) | Method for playing back log on data node, data node, and system | |
CN115145943B (zh) | 多数据源元数据快速比对方法、***、设备和存储介质 | |
CN114207577A (zh) | 用于不同应用程序版本的数据库实现 | |
US9396218B2 (en) | Database insert with deferred materialization | |
CN112434015A (zh) | 数据存储的方法、装置、电子设备及介质 | |
CN111753141B (zh) | 一种数据管理方法及相关设备 | |
CN115469810A (zh) | 一种数据获取方法、装置、设备及存储介质 | |
US8630976B2 (en) | Fast search replication synchronization processes | |
CN114385657A (zh) | 数据存储方法、装置及存储介质 | |
CN112699129A (zh) | 一种数据处理***、方法及装置 | |
US11726978B2 (en) | Computer program for providing efficient change data capture in a database system | |
CN102890679A (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 |