CN112800060B - 数据处理方法、装置、计算机可读存储介质及电子设备 - Google Patents

数据处理方法、装置、计算机可读存储介质及电子设备 Download PDF

Info

Publication number
CN112800060B
CN112800060B CN202110121902.0A CN202110121902A CN112800060B CN 112800060 B CN112800060 B CN 112800060B CN 202110121902 A CN202110121902 A CN 202110121902A CN 112800060 B CN112800060 B CN 112800060B
Authority
CN
China
Prior art keywords
data
written
time stamp
target
timestamp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110121902.0A
Other languages
English (en)
Other versions
CN112800060A (zh
Inventor
简怀兵
李彬
邱旭威
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bigo Technology Pte Ltd
Original Assignee
Bigo Technology Pte Ltd
Filing date
Publication date
Application filed by Bigo Technology Pte Ltd filed Critical Bigo Technology Pte Ltd
Priority to CN202110121902.0A priority Critical patent/CN112800060B/zh
Publication of CN112800060A publication Critical patent/CN112800060A/zh
Application granted granted Critical
Publication of CN112800060B publication Critical patent/CN112800060B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明提供了一种数据处理方法、装置、计算机可读存储介质及电子设备,属于网络技术领域。该方法中,对于待写入的目标事务,确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息,目标数据包括待写入数据在第一数据表中对应的目标数据行中的数据,若第二时间戳信息早于第一时间戳信息,则执行目标事务,以写入待写入数据。这样,在数据库***中同步数据时,无需添加额外字段,即可避免写入冲突,进而在实现冲突检测的同时,避免了内容侵入,以及存储资源浪费的问题,提高了数据处理的效率。

Description

数据处理方法、装置、计算机可读存储介质及电子设备
技术领域
本发明属于网络技术领域,特别是涉及一种数据处理方法、装置、计算机可读存储介质及电子设备。
背景技术
随着电子技术的快速发展,越来越多的企业建立的业务***需要依赖数据库***,比如,分布式数据库管理***,以便实现在多个区域同时执行读写操作,比如,可以在亚洲、美洲、欧洲同时在数据库中执行读写操作。在实际操作时,会出现不同区域同时对数据表中的同一行执行了写入操作,即,不同区域的客户端对同一数据内容进行了更新,从而造成了写入冲突,使得数据库的更新存在冲突,因此,需要对数据库的写入内容进行写入冲突检测。
现有技术中,写入冲突检测的方法往往是为每个写入请求添加字段来标注写入顺序,比如,修改业务表时,在业务表中添加“__version”字段,将该修改请求发送给数据库后,由数据库根据添加的字段以及写入时间,进行判断该请求是否存在写入冲突问题。但是,由于额外添加字段,会对数据表中的内容造成侵入,并且,造成额外的存储开销,从而导致存储资源浪费。
发明内容
有鉴于此,本发明提供一种数据处理方法、装置、计算机可读存储介质及电子设备,在一定程度上解决了在数据写入冲突检测时,由于额外添加字段,会对数据表中的内容造成侵入,并且,造成额外的存储开销,从而导致存储资源浪费的问题。
依据本发明的第一方面,提供了一种数据处理方法,应用于数据库***,所述数据库***中包括第一数据表,所述第一数据表中包括多个第一数据行;该方法可以包括:
对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括待写入数据在所述第一数据表中对应的目标数据行中的数据;
若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据。
依据本发明的第二方面,提供了一种数据处理装置,应用于数据库***,所述数据库***中包括第一数据表,所述第一数据表中包括多个第一数据行;该装置可以包括:
确定模块,用于对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括待写入数据在所述第一数据表中对应的目标数据行中的数据;
执行模块,用于若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据。
第三方面,本发明实施例提供了一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的数据处理方法的步骤。
第四方面,本发明提供了一种电子设备包括:处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如第一方面所述的数据处理方法的步骤。
针对在先技术,本发明具备如下优点:
本发明实施例提供的数据处理方法中,对于待写入的目标事务,确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息,目标数据包括待写入数据在第一数据表中对应的目标数据行中的数据,若第二时间戳信息早于第一时间戳信息,则执行目标事务,以写入待写入数据。这样,在数据库***中同步数据时,无需添加额外字段,即可避免写入冲突,进而在实现冲突检测的同时,避免了内容侵入以及存储资源浪费的问题,提高了数据处理的效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例提供的一种数据处理方法的步骤流程图;
图2是本发明实施例提供的一种数据处理过程示意图;
图3是本发明实施例提供的一种数据处理装置的框图;
图4是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
实施例一
图1是本发明实施例提供的一种数据处理方法的步骤流程图,如图1所示,该方法可以包括:
步骤101、对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括所述待写入数据在所述第一数据表中对应的目标数据行中的数据。
本发明实施例应用于数据库***,该数据库***可以是由关系型数据库管理***(MySQL)组成的分布式数据库(MyShard),使得分布在不同区域的数据库集群可以实现多点同时进行数据读写,具体的,分布式数据库***可以包括一个主数据库和多个从数据库,且多个从数据库可以分布在不同的地区,每个从数据库可以对应有多个客户端,该客户端可以向从数据库发送写入请求,相应地,从数据库会接受该写入请求,并根据该写入请求将需要写入的更新数据写入到从数据库中,再由从数据库将写入的更新数据提交给主数据库,而主数据库可以接收从数据库提交的更新数据,并根据写入顺序依次写入主数据库,以保证主数据库中存储的数据为最新的。
本发明实施例中,数据库中可以存储有多个数据表,该第一数据表可以是存储在主数据库中用于记载数据的文件,例如,可以是二进制日志(binlog)中的数据表。第一数据表中可以包括多个第一数据行。
本发明实施例中,目标事务可以是访问并需要操作各种数据项的一个数据库操作序列,该操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。在数据库***中,事务可以是工作的离散单位,它可以是修改一个用户的账户余额,也可以是库存项的写操作。目标事务指示的待写入数据可以是由从数据库提交的对目标事务的更新数据,目标数据可以是在主数据库中目标事务提交成功的数据。
需要说明的是,数据表中的每一数据行记载有两个逻辑时间,其中,一个逻辑时间可以是该事务由客户端提交给从数据库,以在从数据库上写入的时间戳,该时间戳可以为执行原始提交时间戳(executing original commit timestamp),另一个逻辑时间可以是该事务由从数据库提交给主数据库,以在主数据库上写入的时间戳,该时间戳可以为最新成功原始提交时间戳(latest succeed original commit timestamp)。
由于该逻辑时间可以是数据在分布式数据库***中写入与主从数据库之间同步时,数据库***自动记载的时间戳信息,因此,在确定逻辑时间时,只需在数据表中提取数据行对应的时间戳信息,即可得到该数据行对应的两个逻辑时间。确定目标事务指示的待写入数据的第一时间戳信息,可以是提取待写入数据在从数据库上写入的时间,以及待写入数据由从数据库向主数据库提交的时间,即,待写入数据的两个逻辑时间,作为第一时间戳信息。确定待写入数据对应的目标数据的第二时间戳信息,可以是提取目标数据在从数据库上写入的时间,以及目标数据由从数据库向主数据库提交的时间,即,目标数据对应的两个逻辑时间,作为第二时间戳信息。
步骤102、若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据。
本发明实施例中,当目标数据的第二时间戳信息早于待写入数据的第一时间戳信息,例如,待写入数据的第一时间戳信息为2021年1月18日06:40:44,目标数据的第二时间戳信息为2021年1月18日06:40:10,由于第二时间戳信息早于第一时间戳信息,则可以执行目标事务,即,在数据表中写入目标事务指示的待写入数据。
需要说明的是,第二时间戳信息早于第一时间戳信息,可以认为是数据库中写入目标数据的时间较早,而写入待写入数据的时间较晚,即,对于目标事务,待写入数据为时间最新的更新数据,目标数据为时间较老的更新数据,则可以将待写入数据写入数据表中,替换目标数据,以保证数据表中存储的更新时间是最新的更新数据。
本发明实施例提供的数据处理方法中,对于待写入的目标事务,确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息,目标数据包括待写入数据在第一数据表中对应的目标数据行中的数据,若第二时间戳信息早于第一时间戳信息,则执行目标事务,以写入待写入数据。这样,在数据库***中同步数据时,无需添加额外字段,即可避免写入冲突,进而在实现冲突检测的同时,避免了内容侵入,以及存储资源浪费的问题,提高了数据处理的效率。
实施例二
可选的,本发明实施例还可以执行下述步骤:
若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务。
本发明实施例中,第二时间戳信息不早于第一时间戳信息,可以是数据库中写入目标数据的时间较晚,而写入待写入数据的时间较早,或者,写入目标数据的时间与写入待写入数据的时间一致,即,对于目标事务,目标数据为时间最新的更新数据,待写入数据为时间较老的更新数据,或者,待写入数据的更新时间与目标数据的更新时间一致,则可以中止写入待写入数据,避免用更新时间较晚的更新数据替换更新时间最新的更新数据,从而保证了数据库中存储的数据为最新的数据。
示例的,待写入数据的第一时间戳信息为2021年1月18日06:40:44,目标数据的第二时间戳信息为2021年1月18日06:42:15,由于第二时间戳信息晚于第一时间戳信息,则可以中止目标事务,即,拒绝在数据表中写入目标事务指示的待写入数据。
实施例三
可选的,本发明实施例中上述待写入数据可以位于第二数据表中的第二数据行,相应地,上述确定目标事务指示的待写入数据的第一时间戳的步骤,可以通过下述子步骤(1)所示的步骤实现:
子步骤(1)、提取每个所述第二数据行中的待写入数据的第一提交时间戳和第一写入时间戳,以作为所述第一时间戳信息。
本发明实施例中,第二数据表可以是缓存在从数据库上的数据表,该第二数据表中存储有待写入数据,该待写入数据可以包括至少一个第二数据行。提取每个第二数据行中的待写入数据的第一提交时间戳和第一写入时间戳,以作为第一时间戳信息,可以是将每个第二数据行中的待写入数据写入从数据库中的时间作为第一写入时间戳,把从数据库将待写入数据提交给主数据库中的时间作为第一提交时间戳,并将第一提交时间戳和第一写入时间戳作为待写入数据的第一时间戳信息。
相应地,上述确定所述待写入数据对应的目标数据的第二时间戳信息的步骤,可以通过下述子步骤(2)所示的步骤实现:
子步骤(2)、提取每个所述目标数据行中的目标数据的第二提交时间戳和第二写入时间戳,以作为所述第二时间戳信息。
本发明实施例中,提取每个目标数据行中的目标数据的第二提交时间戳和第二写入时间戳,以作为第二时间戳信息,可以是在主数据库上存储的第一数据表中,将目标数据写入从数据库中的时间作为第二写入时间戳,把从数据库将目标数据提交给主数据库中的时间作为第二提交时间戳,并将第二提交时间戳和第二写入时间戳作为目标数据的第二时间戳信息。
本发明实施例中,通过直接提取数据行在数据库***中写入和提交的时间作为时间戳信息,可以保证选取的时间信息为数据库***中同一时间标准下的时间,从而确保写入冲突检测在同一时间标准下进行,提高了检测的有效性,并且,无需添加字段,并没有造成数据库中存储资源的浪费,从而提高了数据处理效率。
具体的,提取待写入数据的第一提交时间戳和第一写入时间戳的步骤,可以通过下述内容实现:
//从Rpl_transaction_commit_timestamp_ctx获取当前事务所有更新行<db,table,pk value>数据
Rpl_transaction_commit_timestamp_ctx*commit_timestamp_ctx=thd->get_transaction()->get_transaction_commit_timestamp_ctx();
具体的,提取目标数据的第二提交时间戳和第二写入时间戳的步骤,可以通过下述内容实现:
LogicTimestamp ts;
if(thd->is_binlog_applier()){
//当前事务来自blwriter回放,取binlog原生original_commit_timestampts.original_commit_timestamp=*param->original_commit_timestamp;ts.server_uuid.copy_from(thd->owned_sid);
}else{
//当前事务来自client写,取当前时间作为original_commit_timestamp,因为binlog中的gtid event是在before_commit后;组提交flush阶段产生。我们假设不考虑时钟漂移的情况,那么now_ts<executing_original_commit_timestamp,所以executing_original_commit_timestamp>latest_succeed_original_commit_timestamp,这个事务可以安全提交
ts.original_commit_timestamp=my_micro_time();
ts.server_uuid.parse(param->server_uuid,UUID_LENGTH);
}
可选的,本发明实施例中上述若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务的步骤,可以通过下述子步骤(3)所示的步骤实现:
子步骤(3)、若所述第二写入时间戳不早于所述第一提交时间戳,则中止所述目标事务。
本发明实施例中,由于目标数据写入从数据库中的第二写入时间戳,比从数据库将待写入数据提交给主数据库的第一提交时间戳时间晚或者相等,则可以认为待写入数据为时间较老的更新数据,目标数据为时间最新的更新数据,或者,待写入数据的更新时间与目标数据的更新时间一致,则可以中止在主数据库的数据表中写入待写入数据。这样,可以避免在数据库***中更新错误的数据,从而导致存储的数据不一致的问题。
可选的,本发明实施例中上述若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据的步骤,可以通过下述子步骤(4)所示的步骤实现:
子步骤(4)、若所述第二提交时间戳早于所述第一写入时间戳,则执行所述目标事务,以写入所述待写入数据。
本发明实施例中,由于目标数据由从数据库提交给主数据库的第二提交时间戳,比待写入数据写入从数据库中的第一写入时间戳时间早,则可以认为待写入数据为时间最新的更新数据,目标数据为时间较老的更新数据,则可以执行在主数据库的数据表中写入待写入数据。这样,通过数据在分布式数据库***中的写入过程,即,先在从数据库中写入,再由从数据库向主数据库中提交,最后由主数据库写入的过程,来判断数据写入的先后顺序,可以提高确定数据写入时间的准确性,从而可以提高写入冲突检测的准确性。
可选的,本发明实施例还可以执行下述步骤:
在所述数据库***运行至第一指定回调点时,开始执行所述确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息的操作;其中,所述第一指定回调点之后的运行阶段为串行运行阶段。
本发明实施例中,关系型数据库管理***(MySQL)内部事务使用两阶段提交协议,binlog为数据库的事务管理,binlog和innodb引擎为数据库的资源管理,binlog兼顾事务管理和资源管理两者的身份。由于binlog的准备阶段当前为空操作,且binlog commit采用成组提交(group commit)的方式,其中分为导出(flush)、同步(sync)、提交(commit)三个步骤,则在进入数据库管理***的事务提交阶段,在完成分布式事务处理(XA)准备阶段之后和最终事务结束之前,即,无论事务是提交(commit)还是回滚(rollback),在这个时间区间内运行的事务为串行执行的,这是因为在InnoDB Prepare阶段是有锁保护,来保证对同一行的更新是串行执行的。
本发明实施例中,第一指定回调点可以是在数据库管理***事务运行中beforecommit的回调点,其中,数据库管理***中目前对事务运行的回调点,可以包含:beforedml、before commit、before rollback、after commit、after rollback、trans begin六个。由于数据库***运行在before commit的回调点时,运行的事务是有锁保护处于串行执行,则在该时间区间内不会出现写入数据的时间相同的问题,从而可以根据在该时间区间内写入数据的顺序进行写入冲突检测,可以提高冲突检测的效率。
需要说明的是,本发明实施例中可以是利用数据库管理***内部支持机制来执行写入冲突检测的,比如,可以是通过开发数据库管理***的服务器插件(MySQL serverplugin),作为写入冲突检测插件。该写入冲突检测插件可以在数据库管理***事务运行过程中的第一指定回调点时,执行上述操作,即,执行确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息的操作,若第二时间戳信息早于第一时间戳信息,则执行目标事务,以写入待写入数据,若第二时间戳信息不早于第一时间戳信息,则中止目标事务的步骤。
实施例四
可选的,本发明实施例中在执行所述目标事务,以写入所述待写入数据的步骤之后,还可以执行下述步骤:
步骤S1、确定接收到所述待写入数据的时间戳,以作为第三提交时间戳,以及,确定写入所述待写入数据的时间戳,以作为第三写入时间戳。
本发明实施例中,将主数据库接收从数据库提交待写入数据的时间戳作为第三提交时间戳,将在主数据库中写入待写入数据的时间戳作为第三写入时间戳。在主数据库写入从数据库发送的更新数据后,为主数据库的第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,即,添加待写入数据的第三提交时间戳与第三写入时间戳。这样,在数据库***写入数据时,同时执行添加时间戳的操作,可以避免遗漏为写入数据添加时间戳,从而方便后续的数据处理。
步骤S2、为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,以添加所述第三提交时间戳以及所述第三写入时间戳。
示例的,确定接收到待写入数据的时间戳为2021年1月18日09:31:20,即,第三提交时间戳为2021年1月18日09:31:20,确定写入待写入数据的时间戳为2021年1月18日09:31:47,即,第三写入时间戳为2021年1月18日09:31:47,为第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,添加第三提交时间戳为2021年1月18日09:31:20,以及第三写入时间戳为2021年1月18日09:31:47。这样,为第一数据表中各个目标数据行中写入的待写入数执行添加操作,添加第三提交时间戳以及第三写入时间戳,可以避免为写入数据添加时间戳。
可选的,本发明实施例还可以执行下述步骤:
步骤S3、在所述添加操作出现中断时,记录出现中断时的当前添加位置。
本发明实施例中,在对写入数据添加时间戳时,是由数据库***从本地获取当前的时间信息,作为该写入数据的时间戳,但是,在获取时间信息的过程中可能会出现更新失败的问题,即,对写入的数据未能添加时间戳,则可以记录出现中断时,数据表中的当前添加位置。这样,可以避免由于时间信息更新失败,而导致遗漏为写入数据添加时间戳的问题。
需要说明的是,记录添加位置也可以是在执行添加操作的同时一起执行的操作,即,每执行一次添加操作,就记录一下本次添加操作的添加位置。这样,可以避免在突发情况下由于未记录添加位置,而导致遗漏写入数据的时间戳信息,或者重复添加时间戳的问题,从而可以提高后续数据处理的效率。
步骤S4、从所述当前添加位置开始,重新执行所述添加操作,直至对所有目标数据行均执行添加操作为止。
本发明实施例中,在添加操作出现中断时,纪录出现中断时的当前添加位置,可以在重启恢复后,从当前添加位置开始,重新执行添加操作,直至对所有目标数据行均执行添加操作为止,可以避免由于时间信息更新失败导致遗漏添加或者重复添加的问题,从而可以提高数据处理的效率。
为实现在根据当前添加位置重新执行添加操作的步骤,可以输入以下内容:
//遍历当前组所有thd
for(;thd!=nullptr;thd=thd->next_to_commit){
Rpl_transaction_commit_timestamp_ctx*commit_timestamp_ctx=
thd->get_transaction()->get_transaction_commit_timestamp_ctx();
//遍历当前事务所有更新行,写入latest_succeed_original_commit_timestamp
for(const std::string&packed_pk_value:*commit_timestamp_ctx->get_records()){
LogicTimestamp ts;
ts.server_uuid.copy_from(thd->owned_sid);
ts.original_commit_timestamp=
commit_timestamp_ctx->get_original_commit_timestamp();
if(set_existed_log_timestamp(packed_pk_value,ts)!=0){
std::cerr<<"failed to set timestamp:"<<ts<<std::endl;
return 1;
}
}
可选的,本发明实施例还可以执行下述步骤:
在所述数据库***运行至第二指定回调点时,执行所述为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作的操作。
本发明实施例中,第二指定回调点可以是在数据库管理***binlog操作中after_sync的回调点,其中,数据库管理***中目前对binlog操作的回调点,可以包含:afterflush、after sync两个。由于在数据库***运行在第二指定回调点时,写入数据已确定,可以执行为写入数据添加逻辑时间戳以及记录添加位置的操作,这样,可以及时执行添加操作,避免遗漏添加操作,以方便后续对数据进行处理。
需要说明的是,在数据库***运行after sync回调点时,可以持久化逻辑时间,以及持久化当前的binlog file+binlog file pos写入位置,即,为写入数据添加逻辑时间戳以及记录写入位置。当在after_sync回调点时,出现写入逻辑时间戳失败并重启后,可以利用写入冲突检测插件中根据上述持久化的binlog file+binlog file pos,即写入位置开始往后读取binlog,生成逻辑时间戳并且持久化写入。
本发明实施例中,由于利用数据库管理***内部支持机制作为写入冲突检测插件,使得无论从本地区域还是其它大区复制过来写入的数据,进入数据库管理***内核后,数据库运行至before commit和after sync两个回调点时,可以进行写入冲突检测,并处理写入冲突。在before commit回调中,可以执行“冲突检测的逻辑”,拒绝写入旧的数据,即,确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息的操作,若第二时间戳信息不早于第一时间戳信息,则中止目标事务。在after_sync回调中,执行“逻辑时钟更新逻辑”,将当前成功执行的事务的逻辑时钟持久化,即,确定接收到待写入数据的时间戳,以作为第三提交时间戳,以及,确定写入待写入数据的时间戳,以作为第三写入时间戳,为第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,以添加第三提交时间戳以及第三写入时间戳。
示例的,图2是本发明实施例提供的一种数据处理过程示意图,如图2所示,数据库管理***在分布式事务处理的准备阶段(XA Prepare),包括日志准备(Binlog Prepare)和存储引擎准备(InnoDB Prepare),在分布式事务处理的提交阶段(XA Commit),包括日志提交(Binlog Commit)和存储引擎提交(InnoDB Commit),数据库管理***按照准备阶段和提交阶段的运行,利用写入冲突检测插件可以在存储引擎准备(InnoDB Prepare)之后,日志提交(Binlog Commit)之前的提交之前(before commit)回调点,执行“写入冲突检测的逻辑”,在日志提交(Binlog Commit)之后,存储引擎提交(InnoDB Commit)之前的同步之后(after sync)回调点,执行“逻辑时钟更新逻辑”。
本发明提出了一种完整的基于MySQL数据库的多区域的写入冲突检测和处理方法,充分利用MySQL内部运行机制、事务提交机制、MySQL server plugin机制和逻辑时间技术,实现了对业务透明、兼容MySQL生态的多点写入MySQL的冲突检测和处理,具体的,本发明实施例通过MySQL server plugin查询MySQL内部运行的各个环节,来进行冲突的检测和处理,对业务内容没有任何侵入,也不会因并发调度引起的条件不满足失败、进而需要业务***重试的不足,同时也不会修改业务表引起额外存储开销,本发明的写入冲突检测和处理方法,完全依赖MySQL内核运行机制,运维和后续维护也更友好。
需要说明的是,相较于现有的写入冲突检测方法,采用本发明实施例的方法,分布式关系数据库的写入冲突检测和处理可以不需要改变业务表结构、对业务也没有侵入,并且,业务开发与原生的MySQL一致,由于不需要处理数据库中间件(MyShard)中“__version>=tm_us条件不满足”引发的假失败,分布式数据库冲突检测和处理机制不会引入额外的业务重试等负担。MySQL也不会引入额外的存储开销,本发明的冲突检测和处理方法完全和MySQL兼容,对业务和运维透明,进一步降低了运维团队的运维工作量,同时,由于采用了MySQL官方的MySQL server plugin方式,后续MySQL的新版本、新特性的升级,不会引入额外的开发工作量和兼容性问题,因此,本发明还提升了分布式数据库***无缝吸收社区技术红利、兼容社区生态的能力,具备更长远的演进空间和潜力。
本发明实施例提供的数据处理方法中,对于待写入的目标事务,在数据库***运行至第一指定回调点时,开始执行确定目标事务指示的待写入数据的第一时间戳信息,以及,确定待写入数据对应的目标数据的第二时间戳信息,目标数据包括待写入数据在第一数据表中对应的目标数据行中的数据,若第二时间戳信息早于第一时间戳信息,则执行目标事务,以写入待写入数据,若第二时间戳信息不早于第一时间戳信息,则中止目标事务,在数据库***运行至第二指定回调点时,执行为第一数据表中各个目标数据行中写入的待写入数据,执行添加操作的操作。这样,在数据库***中同步数据时,无需添加额外字段,即可避免写入冲突,进而在实现冲突检测的同时,避免了内容侵入,以及存储资源浪费的问题,并且,由于在第一指定回调点运行的事务是有锁保护处于串行执行,可以根据在该时间区间内写入数据的顺序进行写入冲突检测,从而可以提高冲突检测的效率,避免用更新时间较晚的更新数据替换更新时间最新的更新数据,从而保证了数据库中存储的数据为最新的数据,提高了数据处理的效率。
图3是本发明实施例提供的一种数据处理装置的框图,如图3所示,该装置20可以包括:
确定模块201,用于对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括待写入数据在所述第一数据表中对应的目标数据行中的数据;
执行模块202,用于若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据。
可选的,所述装置20还包括:
若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务。
可选的,所述待写入数据位于第二数据表中的第二数据行;所述确定模块201,还用于:
提取每个所述第二数据行中的待写入数据的第一提交时间戳和第一写入时间戳,以作为所述第一时间戳信息;
所述确定所述待写入数据对应的目标数据的第二时间戳信息,包括:
提取每个所述目标数据行中的目标数据的第二提交时间戳和第二写入时间戳,以作为所述第二时间戳信息。
可选的,所述装置20包括:
若所述第二写入时间戳不早于所述第一提交时间戳,则中止所述目标事务。
可选的,所述执行模块202,还用于:
若所述第二提交时间戳早于所述第一写入时间戳,则执行所述目标事务,以写入所述待写入数据。
可选的,所述装置20还包括:
确定接收到所述待写入数据的时间戳,以作为第三提交时间戳,以及,确定写入所述待写入数据的时间戳,以作为第三写入时间戳;
为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,以添加所述第三提交时间戳以及所述第三写入时间戳。
可选的,所述装置20还包括:
在所述添加操作出现中断时,记录出现中断时的当前添加位置;
从所述当前添加位置开始,重新执行所述添加操作,直至对所有目标数据行均执行添加操作为止。
可选的,所述装置20还包括:
在所述数据库***运行至第一指定回调点时,开始执行所述确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息的操作;
其中,所述第一指定回调点之后的运行阶段为串行运行阶段。
可选的,所述装置20还包括:
在所述数据库***运行至第二指定回调点时,执行所述为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作的操作。
本发明实施例提供的数据处理装置具备执行数据处理方法相应的功能模块,可执行本发明实施例所提供的数据处理方法,且能达到相同的有益效果。
在本发明提供的又一实施例中,还提供了一种电子设备,电子设备可以包括:处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
示例的,如图4所示,该电子设备具体可以包括:处理器401、存储装置402、具有触摸功能的显示屏403、输入装置404、输出装置405以及通信装置406。该电子设备中处理器401的数量可以是一个或者多个,图4中以一个处理器401为例。该电子设备的处理器401、存储装置402、显示屏403、输入装置404、输出装置405以及通信装置406可以通过总线或者其他方式连接。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据处理方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的数据处理方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种数据处理方法,其特征在于,应用于数据库***,所述数据库***中包括第一数据表,所述第一数据表中包括多个第一数据行;所述方法包括:
对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括所述待写入数据在所述第一数据表中对应的目标数据行中的数据;
若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据;若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务;
其中,所述待写入数据位于第二数据表中的第二数据行;所述确定所述目标事务指示的待写入数据的第一时间戳信息,包括:
提取每个所述第二数据行中的待写入数据的第一提交时间戳和第一写入时间戳,以作为所述第一时间戳信息;
所述确定所述待写入数据对应的目标数据的第二时间戳信息,包括:
提取每个所述目标数据行中的目标数据的第二提交时间戳和第二写入时间戳,以作为所述第二时间戳信息。
2.根据权利要求1所述的方法,其特征在于,所述若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务,包括:
若所述第二写入时间戳不早于所述第一提交时间戳,则中止所述目标事务。
3.根据权利要求1所述的方法,其特征在于,所述若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据,包括:
若所述第二提交时间戳早于所述第一写入时间戳,则执行所述目标事务,以写入所述待写入数据。
4.根据权利要求1所述的方法,其特征在于,所述执行所述目标事务,以写入所述待写入数据之后,所述方法还包括:
确定接收到所述待写入数据的时间戳,以作为第三提交时间戳,以及,确定写入所述待写入数据的时间戳,以作为第三写入时间戳;
为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作,以添加所述第三提交时间戳以及所述第三写入时间戳。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述添加操作出现中断时,记录出现中断时的当前添加位置;
从所述当前添加位置开始,重新执行所述添加操作,直至对所有目标数据行均执行添加操作为止。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述数据库***运行至第一指定回调点时,开始执行所述确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息的操作;
其中,所述第一指定回调点之后的运行阶段为串行运行阶段。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述数据库***运行至第二指定回调点时,执行所述为所述第一数据表中各个目标数据行中写入的待写入数据,执行添加操作的操作。
8.一种数据处理装置,其特征在于,应用于数据库***,所述数据库***中包括第一数据表,所述第一数据表中包括多个第一数据行;所述装置包括:
确定模块,用于对于待写入的目标事务,确定所述目标事务指示的待写入数据的第一时间戳信息,以及,确定所述待写入数据对应的目标数据的第二时间戳信息;所述目标数据包括所述待写入数据在所述第一数据表中对应的目标数据行中的数据;
执行模块,用于若所述第二时间戳信息早于所述第一时间戳信息,则执行所述目标事务,以写入所述待写入数据,所述待写入数据位于第二数据表中的第二数据行;若所述第二时间戳信息不早于所述第一时间戳信息,则中止所述目标事务;
所述确定模块,具体用于提取每个所述第二数据行中的待写入数据的第一提交时间戳和第一写入时间戳,以作为所述第一时间戳信息;提取每个所述目标数据行中的目标数据的第二提交时间戳和第二写入时间戳,以作为所述第二时间戳信息。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一所述方法的步骤。
10.一种电子设备,其特征在于,包括:
处理器、存储器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一所述方法的步骤。
CN202110121902.0A 2021-01-28 数据处理方法、装置、计算机可读存储介质及电子设备 Active CN112800060B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110121902.0A CN112800060B (zh) 2021-01-28 数据处理方法、装置、计算机可读存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110121902.0A CN112800060B (zh) 2021-01-28 数据处理方法、装置、计算机可读存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN112800060A CN112800060A (zh) 2021-05-14
CN112800060B true CN112800060B (zh) 2024-06-28

Family

ID=

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101005428A (zh) * 2006-01-19 2007-07-25 华为技术有限公司 一种检测与解决数据同步冲突的实现方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101005428A (zh) * 2006-01-19 2007-07-25 华为技术有限公司 一种检测与解决数据同步冲突的实现方法

Similar Documents

Publication Publication Date Title
US11914572B2 (en) Adaptive query routing in a replicated database environment
US11327958B2 (en) Table replication in a database environment
CN109739935B (zh) 数据读取方法、装置、电子设备以及存储介质
US11314716B2 (en) Atomic processing of compound database transactions that modify a metadata entity
CN113396407A (zh) 用于利用区块链技术扩充数据库应用的***和方法
US7490113B2 (en) Database log capture that publishes transactions to multiple targets to handle unavailable targets by separating the publishing of subscriptions and subsequently recombining the publishing
US7606838B2 (en) Distributed conflict resolution for replicated databases
US11429599B2 (en) Method and apparatus for updating database by using two-phase commit distributed transaction
US20090037422A1 (en) Combining capture and apply in a distributed information sharing system
CN115668141A (zh) 使用时间戳对网络中的事务进行分布式处理
CN105574187A (zh) 一种异构数据库复制事务一致性保障方法及***
CN111522631A (zh) 分布式事务处理方法、装置、服务器及介质
CN109783578B (zh) 数据读取方法、装置、电子设备以及存储介质
US6725242B2 (en) Multiple-computer data processing system and method with time-versioned data storage
CN109947742B (zh) 面向二阶段锁的多版本数据库并发控制方法和***
EP4276651A1 (en) Log execution method and apparatus, and computer device and storage medium
US11875178B2 (en) Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems
Nawab et al. Message Futures: Fast Commitment of Transactions in Multi-datacenter Environments.
US20230315713A1 (en) Operation request processing method, apparatus, device, readable storage medium, and system
CN112800060B (zh) 数据处理方法、装置、计算机可读存储介质及电子设备
CN116089359A (zh) 数据库快照的生成方法、装置、电子设备和介质
CN112612647B (zh) 日志并行重演方法、装置、设备及存储介质
CN112800060A (zh) 数据处理方法、装置、计算机可读存储介质及电子设备
CN109358817B (zh) 用于复制数据的方法、装置和***
CN112749156A (zh) 数据处理方法、数据库管理***和数据处理设备

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant