CN114116732A - 处理事务的方法、装置、存储装置以及服务器 - Google Patents

处理事务的方法、装置、存储装置以及服务器 Download PDF

Info

Publication number
CN114116732A
CN114116732A CN202210081580.6A CN202210081580A CN114116732A CN 114116732 A CN114116732 A CN 114116732A CN 202210081580 A CN202210081580 A CN 202210081580A CN 114116732 A CN114116732 A CN 114116732A
Authority
CN
China
Prior art keywords
transaction
database
database table
epoch information
server
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
Application number
CN202210081580.6A
Other languages
English (en)
Other versions
CN114116732B (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.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202210081580.6A priority Critical patent/CN114116732B/zh
Publication of CN114116732A publication Critical patent/CN114116732A/zh
Application granted granted Critical
Publication of CN114116732B publication Critical patent/CN114116732B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing

Abstract

本公开披露了一种处理事务的方法、装置、存储装置以及服务器。该方法应用于数据库,数据库中存储有第一数据库表和第二数据库表,第二数据库表中记录有第一数据库表的纪元信息,第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,该方法包括:接收第一事务,第一事务的操作包括:修改第一数据库表中的数据;查询第二数据库表,以得到第一数据库表的纪元信息;将第一数据库表的纪元信息与目标纪元信息进行对比,其中目标纪元信息为发送第一事务的服务器对应的纪元信息;如果第一数据库表的纪元信息与目标纪元信息相同,则提交第一事务;如果第一数据库表的纪元信息与目标纪元信息不同,则终止第一事务。

Description

处理事务的方法、装置、存储装置以及服务器
技术领域
本公开涉及数据库领域,并且更为具体地,涉及一种处理事务的方法、装置、存储装置以及服务器。
背景技术
为了保证服务质量,服务器通常具备容灾系统。如果当前对外提供服务的服务器宕机,容灾服务器可以接替该服务器继续提供服务。
新服务器上线后,旧服务器仍然可能修改数据库中的数据。因此,如何保证容灾一致性,是亟待解决的问题。
发明内容
本公开提供一种处理事务的方法、装置、存储装置以及服务器,以提高服务器容灾一致性的可靠性。
第一方面,提供一种处理事务的方法,该方法应用于数据库,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述方法包括:接收第一事务,所述第一事务的操作包括:修改所述第一数据库表中的数据;查询所述第二数据库表,以得到所述第一数据库表的纪元信息;将所述第一数据库表的纪元信息与目标纪元信息进行对比,其中所述目标纪元信息为发送所述第一事务的服务器对应的纪元信息;如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务;如果所述第一数据库表的纪元信息与所述目标纪元信息不同,则终止所述第一事务。
可选地,在所述接收第一事务之前,所述方法包括:接收第二事务,所述第二事务为服务器上任时发送的事务,且所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
可选地,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,所述如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务,包括:如果所述多张数据库表的纪元信息均与所述目标纪元信息相同,则提交所述第一事务。
第二方面,提供一种处理事务的方法,所述方法应用于与数据库通信连接的服务器,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述方法包括:向所述数据库发送第一事务,所述第一事务的操作包括:修改所述第一数据库表中的数据;查询所述第二数据库表,以得到所述第一数据库表的纪元信息;将所述第一数据库表的纪元信息与所述服务器对应的纪元信息进行对比;如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务;如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息不同,则终止所述第一事务。
可选地,在所述向所述数据库发送第一事务之前,所述方法还包括:在所述服务器上任时,向所述数据库发送第二事务,所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
可选地,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,所述如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务,包括:如果所述多张数据库表的纪元信息均与所述服务器对应的纪元信息相同,则提交所述第一事务。
第三方面,提供一种存储装置,包括数据库,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述数据库包括:接收模块,被配置为接收第一事务,所述第一事务的操作包括:修改所述第一数据库表中的数据;查询所述第二数据库表,以得到所述第一数据库表的纪元信息;将所述第一数据库表的纪元信息与目标纪元信息进行对比,其中所述目标纪元信息为发送所述第一事务的服务器对应的纪元信息;如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务;如果所述第一数据库表的纪元信息与所述目标纪元信息不同,则终止所述第一事务。
可选地,所述接收模块还被配置为:在所述接收第一事务之前,接收第二事务,所述第二事务为所述服务器上任时发送的事务,且所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
可选地,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,所述如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务,包括:如果所述多张数据库表的纪元信息均与所述目标纪元信息相同,则提交所述第一事务。
第四方面,提供一种服务器,所述服务器与数据库通信连接,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述服务器包括:发送模块,被配置为向所述数据库发送第一事务,所述第一事务的操作包括:修改所述第一数据库表中的数据;查询所述第二数据库表,以得到所述第一数据库表的纪元信息;将所述第一数据库表的纪元信息与所述服务器对应的纪元信息进行对比;如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务;如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息不同,则终止所述第一事务。
可选地,所述发送模块还被配置为:在所述向所述数据库发送第一事务之前,在所述服务器上任时,向所述数据库发送第二事务,所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
可选地,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,所述如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务,包括:如果所述多张数据库表的纪元信息均与所述服务器对应的纪元信息相同,则提交所述第一事务。
第五方面,提供一种处理事务的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现如第一方面或第二方面任一所述的方法。
第六方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面或第二方面任一所述的方法。
第七方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面或第二方面任一所述的方法。
本公开提供一种处理事务的方法,通过对事务的特殊设计,保证只有当前对外提供服务的服务器可以修改与服务器通信连接的数据库中存储的数据。因此,本公开提供的方法可以保证服务器的容灾一致性。
附图说明
图1是相关技术提供的服务器读写数据库的示意图。
图2是相关技术提供的新旧服务器替换的示意图。
图3是本公开实施例提供的处理事务的方法的流程示意图。
图4是本公开实施例提供的第一事务的操作流程示意图。
图5是本公开实施例提供的第一数据库表的格式示意图。
图6是本公开实施例提供的第二数据库表的格式示意图。
图7是本公开实施例提供的新服务器上任时第二数据库表的修改流程示意图。
图8是本公开实施例提供的第二事务的操作流程示意图。
图9是本公开实施例提供的第一事务的操作流程示意图。
图10是本公开实施例提供的数据库的结构示意图。
图11是本公开实施例提供的服务器的结构示意图。
图12是本公开实施例提供的处理事务的装置的结构示意图。
具体实施方式
下面将结合附图,对本公开中的技术方案进行描述。为了便于理解本公开,下文先介绍本公开实施例涉及的术语。
数据库
数据库是按照数据结构来组织、存储和管理数据的仓库。数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
能够提供通用的ACID接口的数据库,也可以称为通用数据库。通用数据库例如可以包括关系型数据库、newSQL等。
结构化查询语言
结构化查询语言(structured query language,SQL)是一种特殊的的编程语言。结构化查询语言用于存取数据以及查询、更新和管理数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式。因此,具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言的语句可以嵌套,这使它具有极大的灵活性和强大的功能。
事务
事务(transaction)是针对数据库的一组操作。一个事务可以由一条或多条数据库语句组成。事务是数据库中一个不可分割的执行单元。和事务相关的语句包括开启事务(start transaction)、结束事务(end transaction)、提交事务(commit transaction)、回滚事务(rollback transaction)等。
事务需要具备ACID,即原子性(Atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。
原子性指一个事务中的语句需要一起提交或回滚。例如,一个用户A向用户B转账100元的事务,包括用户A的账户余额扣除100元和用户B的账户余额增加100元两个操作。上述两个操作需要都成功执行或者都不执行。
一致性指一个事务开始之前和结束之后,数据库的完整性约束没有被破坏。例如,上述转账的事务,在转账开始前用户A和用户B的账户总余额为2000元。一致性指,当该转账事务结束后,用户A和用户B的账户总余额仍然为2000元。
隔离性指多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。
持久性指一个事务完成(例如提交)后,该事务对数据库所做的操作持久地保存在数据库中,不会被回滚。
服务器
服务器(或称server)是计算机的一种。服务器可以对外(例如PC机、智能手机、火车系统等)提供各种服务(例如文件服务、http服务等)。服务器具有高速的CPU运算能力、长时间的可靠运行、强大的I/O外部数据吞吐能力以及更好的扩展性。服务器通常以进程的形式运行在物理机中。
目前,一些服务器需要将自身的数据持久化到数据库中。数据持久化可以指将内存中的数据保存至存储设备(例如数据库)中。数据持久化可以防止数据丢失。
图1是相关技术提供的服务器读写数据库的示意图。数据库可以有多种不同的类型。例如,数据库可以包括关系型数据库和非关系型数据库等。
如图1所示,服务器在持久化存储数据时,通过在数据库中创建多张表的形式完成。服务器可以读写数据库。读写的方式例如可以通过网络向数据库发送事务。服务器还可以对外提供服务。
例如,服务器可以指淘宝的服务器。用户可以通过淘宝的应用与淘宝的服务器进行交互,以获取淘宝的服务。淘宝的服务器可以将数据(例如用户的账号等数据)持久化存储在与淘宝的服务器对接的数据库中。淘宝的服务器可以读写存储在数据库中的数据。例如,可以修改存储在数据库中的用户的订单信息。
为了保证服务器的服务质量,服务器通常会设置容灾机制。容灾机制可以指建立两套或多套相同的服务器,各服务器之间可以相互检测健康状态和进行功能切换。当一台服务器因意外(例如网络断连)而停止工作时,可以切换到另一台服务器继续提供服务,以保证该系统可以连续地提供服务。
图2是相关技术提供的新旧服务器替换的示意图。如图2所示,在容灾场景中,当旧服务器(当前对外提供服务的服务器)不可用时,新服务器(原用于容灾的服务器)上任,接替旧服务器提供服务,从而保证服务的连续性。新服务器上任也可以称为上线。
由于新旧服务器同时修改数据库中的数据,可能导致数据库存储的数据存在不一致,影响服务质量。因此,在新旧服务器替换时,如何保证容灾一致性是非常重要的问题。容灾一致性指保证新旧服务器不会同时更新数据库,即,保证只有新上任的服务器可以修改数据库中存储的数据的内容。
相关技术中可以通过租约(lease)时间保证服务器的容灾一致性。租约可以通过lease协议实现。例如,可以从多个容灾服务器中选取一个服务器作为主服务器。主服务器可以向数据库申请一个租约包(lease 包)。租约包中可以包括租约时长(例如5分钟)。如果租约包过期,主服务器可以再次向数据库申请租约包。
如果主服务出现问题(例如网络断连或宕机等),新服务器需要接管原主服务器继续提供服务时,新服务器会首先等待老服务器的租约过期后,再提供服务。
利用租约保证服务器的容灾一致性,本质上是靠时间。即,认为经过一段时间(例如一个租约包提供的租约时长)后,老服务器(原主服务器)将不会再访问数据库了。
该方法虽然可以适用于通用的数据库中,然而仅依靠时间理论上无法保证容灾一致性。即,使用租约时间仍然存在新老服务器同时访问数据库的风险。
例如,新服务器上线后,会对数据库进行操作(例如读写数据库中的数据),且新服务器会认为只有自己在操作数据库。然而,虽然老服务器无法对外提供服务,但老服务器也有可能会操作数据库(例如老服务器上可能存在有飘在网络上的update请求)。
为了提高服务器的容灾一致性,相关技术还提供了基于全局纪元(epoch)的一致性保证方法和基于黑名单的一致性保证方法。
基于全局纪元的一致性保证方法会在数据库中维护一个全局的纪元信息。当旧服务器无法提供服务(例如宕机)后,新上线的服务器会生成新的纪元,并将该新的纪元通知到存储系统节点,并在存储系统的节点进行持久化存储。存储系统接收到服务器的请求时,会判断服务器的纪元与存储在存储系统中的纪元是否一致,如果不一致,将拒绝该服务器的请求。
基于全局纪元的一致性保证方法,需要存储系统判断服务器是否为新服务器。即,该方法需要修改存储系统的运行逻辑。因此,该方法无法应用于通用数据库,只能在自研的存储系统中使用。
基于黑名单的一致性保证方法,需要在存储系统中维护一个黑名单信息。当老服务器无法提供服务(例如宕机)后,会通知所有存储节点,将老服务器加入黑名单。存储系统会拒绝处于黑名单中的服务器对存储系统进行操作。当老服务器加入黑名单后,再启动新服务器接管老服务器的工作,向外提供服务。
与基于全局纪元的一致性保证方法相似,基于黑名单的一致性保证方法也需要修改存储系统本身的运行逻辑,因此,也无法适用于通用的数据库。
有鉴于此,本公开提供一种处理事务的方法、装置、存储装置以及服务器。
图3是本公开实施例提供的处理事务的方法的流程示意图。图3是站在服务器和数据库交互的角度进行介绍。
如图3所示,在步骤S310,服务器可以向数据库发送第一事务。数据库也可以称为存储装置或存储系统。数据库可以指关系型数据库、非关系型数据库等。服务器可以指用于向外提供服务的装置。例如,服务器可以向外提供http服务。服务器可以与数据库通信连接。
服务器可以通过多种方式与数据库连接。例如,服务器可以通过数据线与数据库连接。又如,服务器可以通过网络与数据库连接。
服务器与数据库连接后,可以与数据库进行通信。服务器可以通过数据库支持的格式或语言与数据库进行通信。例如,服务器可以通过事务与数据库进行通信。事务可以通过数据库语言实现。数据库语言例如可以指SQL语句。一个事务可以包括一条或多条数据库语句,以完成一项任务。
服务器可以通过与数据库通信修改数据库中存储的数据。例如,服务器可以在数据库中新存储一些数据。又如,服务器可以修改存储在数据库中的数据的内容。又如,服务器可以查找在数据库中存储的数据。
数据在数据库中的具体存储形式以实际使用的数据库支持的格式为准。例如,数据可以以表的形式存储在数据库中。
本公开提供的方法中,与服务器通信连接的数据库中,可以存储第一数据库表和第二数据库表。第二数据库表中可以记录第一数据库表的纪元信息。第一数据库表的纪元信息可以指当前对外提供服务的服务器的纪元信息。纪元信息也可以称为epoch信息。纪元信息可以用于标识不同的服务器。
包含容灾系统的服务器通常包括多台功能相同的服务器。在提供服务时,服务器系统会从多台服务器中选择一台作为当前对外提供服务的服务器。
在一些实施例中,每台服务器可以维护自己的纪元信息。在另一些实施例中,仅对外提供服务的服务器维护纪元信息。
图4是本公开实施例提供的第一事务的操作的流程示意图。如图4所示,第一事务可以包括步骤S410至步骤S450五个操作。
在步骤S410,修改第一数据库表中的数据。
第一数据库表中可以存储服务器的数据。第一数据库表可以包含多张数据库表。每张数据库表中可以存储不同的数据。应理解,本公开使用数据库表仅为了方便描述,实际中数据库存储数据时,也可以存储为其他的数据形式。
修改第一数据库表中的数据可以指对第一数据库表进行各种操作。例如,可以在第一数据库表中增加一张数据库表。又如,可以删除第一数据库表中的一张数据库表。又如,可以修改第一数据库表中某一行或多行数据。又如,可以在第一数据库表中增加一行或多行数据。
在步骤S420,查询第二数据库表,以得到第一数据库表的纪元信息。
第二数据库表可以通过多种方式存储在数据库中。例如,服务器可以在初始化时在数据库中生成第二数据库表。
第二数据库表中的纪元信息可以为当前对外提供服务的服务器对应的纪元信息。
在一些实施例中,第二数据库表中可以仅包含服务器的纪元信息。在另一些实施例中,第二数据库表还可以包含第一数据库表的纪元信息。在另一些实施例中,当第一数据库表包含多张数据库表时,第二数据库表中可以包含第一数据库表中每张数据库表的纪元信息。
通过在第二数据库表中包含第一数据库表每张数据库表的纪元信息,数据库可以并行处理修改第一数据库表中不同数据库表的多个事务。因此,可以提高数据库的事务处理效率。具体原因将在后文,结合图5至图9和一个具体的实施例进行详细介绍。
在步骤S430,将第一数据库表的纪元信息与目标纪元信息进行对比。目标纪元信息可以指发送第一事务的服务器对应的纪元信息。
在一些实施例中,第一事务可以仅获取第二数据库表中存储的纪元信息,并将该纪元信息与目标纪元信息进行对比。
在另一些实施例中,第一事务可以分别获取第二数据库表中存储的,需要修改的每张第一数据库表中的数据库表对应的纪元信息,并将每张表的纪元信息与目标纪元信息进行对比。
如果第一数据库表的纪元信息与目标纪元信息相同,可以执行步骤S440,提交第一事务。
第一数据库表的纪元信息与目标纪元信息相同,可以指第二数据库表中存储的第一数据库表的纪元信息与目标纪元信息相同。
在一些实施例中,当第一数据库表包含多张数据库表时,第一数据库表的纪元信息与目标纪元信息相同,也可以指第一数据库表的每张数据库表的纪元信息都与目标纪元信息相同。
提交第一事务也可以称为commit第一事务。第一事务被提交后,第一事务对第一数据库表的修改可以持久化存储在数据库中。例如,可以持久化地存储在数据库的节点上。经过提交的数据在数据库中的状态将保持下去。任何对数据库的修改,只能在已经提交的事务的修改的基础上进行。
通过将第一数据库表包含的每张数据库表的纪元信息存储在第二数据库表中,并在对比纪元信息时,分别对比所有需要修改的第一数据库表中的数据库表的纪元信息与目标纪元信息,仅当所有纪元信息都一致时,才能提交第一事务,可以提高服务器容灾一致性的可靠性。
如果第一数据库表的纪元信息与目标纪元信息不同,可以执行步骤S450,终止第一事务。终止第一事务可以指终止(abort)或回滚(rollback)第一事务。
在一些实施例中,纪元信息可以是一个数值。第一数据库表的纪元信息与目标纪元信息不同,可以指二者的数值不同。
在一些实施例中,第一数据库表可以包含多张数据库表。第二数据库表中可以包括第一数据库表中每张数据库表的纪元信息。在对比第一数据库表的纪元信息和目标纪元信息时,可以将该多张数据库表的纪元信息分别于目标纪元信息进行对比。当有任何一个纪元信息不匹配时,即认为第一数据库表的纪元信息与目标纪元信息不同。
当第一数据库表的纪元信息与目标纪元信息不同时,说明发送第一事务的服务器并非当前对外提供服务的服务器。此时,终止第一事务,可以防止当前提供服务(或称任中)的服务器之外的服务器对数据库进行修改。因此,可以有效地提高服务器的容灾一致性的可靠性。
当第一事务确认发送第一事务的服务器并非任中的服务器时,立即终止第一事务,可以防止多台服务器争抢资源。或者说,当第一事务确认发送第一事务的服务器并非当前提供服务的服务器时,立即终止第一事务,可以防止多台服务器争抢资源。
本公开提供一种处理事务的方法,通过对事务的特殊设计,保证只有当前对外提供服务的服务器可以修改与服务器通信连接的数据库中存储的数据。因此,本公开提供的方法可以更可靠地保证服务器的容灾一致性。同时,由于本公开提供的处理事务的方法,无须修改数据库本身的运行逻辑,因此,可以适用于通用的数据库。
在一些实施例中,当新服务器上任时,该服务器可以向数据库发送第二事务。第二事务可以用于将第一数据库表的纪元信息修改为该服务器对应的纪元信息。
服务器的纪元信息可以通过多种方式获得。例如,服务器可以在第二数据库表中记录的纪元信息的基础上增加一些信息作为新的纪元信息。具体地,当纪元信息为一个数值时,服务器可以在原有的数值的基础上增加一些数值。例如,原纪元信息为4,新服务器的纪元信息可以指在原纪元信息的基础上增加1。此时,当前纪元信息即为5。
在一些实施例中,当第二事务提交成功后,新服务器才上任并对外提供服务,以确保新旧服务器不会同时修改数据库中存储的数据。
下面结合图5至图9以一个具体的实施例介绍本公开提供的处理事务的方法。
图5是本公开实施例提供的第一数据库表的格式示意图。如图5所示,第一数据库表可以包括多张数据库表(table1、table2、table3、tableN等)。
图6是本公开实施例提供的第二数据库表的格式示意图。如图6所示,第二数据库表可以包括两列。一列表头为表名称(table_name),一列表头为纪元信息(epoch)。在本实施例中,第二数据库表可以称为epoch_table。
在一些实施例中,epoch_table中可以仅包括一行数据,即可以仅包括图6中的第1行。第1行中包括epoch_table的表名和当前对外提供服务的服务器的纪元信息。在图6所示的实施例中,当前对外提供服务的服务器的纪元信息为5。
在另一些实施例中,epoch_table中还可以包括多行数据(第2行至第N+1行)。每行数据的第一列为图5所示的第一数据库表中每张数据库表的名称信息(例如,table1、table2等)。epoch_table的第二列包括每张数据库表对应的纪元信息。通常,epoch_table中每张表的纪元信息应该相同。
epoch_table可以在服务器初始化时建立。建立方式例如可以通过一个事务完成。
在一些实施例中,服务器每在数据库中创建一张数据库表,都需要在epoch_table中插入一行。该行可以包括该数据库表的名称信息和当前服务的服务器的纪元信息。
在一些实施例中,服务器每删除数据库中的一张表,需要对应地删除epoch_table中对应的行。
图7是本公开实施例提供的新服务器上任时第二数据库表的修改流程示意图。如图7所示,新服务器上任时,会向数据库发送第二事务。第二事务将更新epoch_table中的epoch信息(例如,将epoch由5修改为6)。
图8是本公开实施例提供的第二事务的操作流程示意图。
如图8所示,在步骤S801,开启第二事务。
在步骤S802,锁住epoch_table中table_name=”epoch_table”的行。可以通过多种方式完成对epoch_table中某一行的锁定。例如,可以使用数据库语句:select epoch fromepoch_table where table_name = "epoch_table" for update。
锁定epoch_table中需要修改的行,可以防止其他服务器修改epoch_table,导致出现冲突。
在步骤S803,获取epoch_table中最大的epoch。在本实施例中,epoch_table中的epoch信息通过自增的方式更新。因此,epoch_table中最大的epoch值即为当前对外提供服务的服务器对应的epoch信息。
可以通过多种方式获取epoch_table中最大的epoch。例如,可以使用数据库语句:select max(epoch) from epoch_table。
在步骤S804,在最大epoch的基础上加1作为新的epoch。在本实施例中,epoch信息的更新通过在旧epoch的基础上加1完成。应理解,实际中epoch信息的更新可以通过各种不同的方式。每个版本的epoch可以间隔任意的数值。例如,可以在原epoch的数值上增加2、5等。
可以通过多种方式获得最新的epoch的数值。例如,可以使用数据库语句:new_epoch = max(epoch) + 1。
在步骤S805,更新epoch_table中的epoch为新的epoch。具体的更新方式,例如可以使用数据库语句:update epoch_table set epoch = new_epoch。
在步骤S806,提交第二事务。
当完成第二事务的提交后,epoch_table中的epoch信息将成功地修改为新上任的服务器的epoch信息。此时,新上任的服务器才上任成功。
第二事务提交完成后,由于epoch_table中的epoch信息为新上任的服务器的epoch信息,其他服务器(例如无法正常提供服务的旧服务器)将无法成功修改数据库中的数据。因此,可以保证服务器的容灾一致性的可靠性。
图9是本公开实施例提供的第一事务的操作流程示意图。
如图9所示,在步骤S901,开启第一事务。
在步骤S902,修改第一数据库表中的数据。修改可以指删除(delete)、更新(update)、插入(insert)等。第一数据库表中可以包括多张数据库表(table1、table2、table3等)。第一事务可以修改多张数据库表中任意几张数据库表中的数据。例如,第一事务可以仅修改table1或table3中的数据。又如,第一事务可以修改table1和table2中的数据。
在步骤S903,锁定第一数据库表在epoch_table中对应的行。锁定epoch_table中的行,可以使用数据库语句:select epoch from epoch_table where table_name in ("table1",“table2”,"table3",...,“tableN”) for update。
在epoch_table中锁定步骤S902中修改的第一数据库表中的多张数据库表对应的行,可以防止多个事务同时修改同一张数据库表。多个事务同时修改同一张数据库表时,可能引起数据一致性的问题。
在epoch_table中对第一数据库表中的每张数据库表设置一行,该行中包含该数据库表的epoch信息,可以使多个事务并行处理,以提高事务的处理效率。
例如,第一事务1需要修改table1和table2中的数据。第一事务2需要修改table3中的数据。如果epoch_table中仅包含epoch_table对应的行(即第1行),由于每个第一事务(例如第一事务1和第一事务2)在修改第一数据库表时,都需要锁定epoch_table,因此,第一事务1和第一事务2只能串行处理。即,只能等待第一事务1提交完成后,第一事务2才能开启。
而如果epoch_table中维护了第一数据库表的每张数据库表对应的纪元信息,在第一事务1开启的过程中,第一事务1可以仅锁定epoch_table中table1和table2对应的行。由于第一事务1无须锁定table3对应的行,因此第一事务2也可以同时开启。第一事务2可以锁定epoch_table中table3对应的行。
通过在epoch_table中维护第一数据库表的每张数据库表对应的纪元信息,可以实现不相交的多个事务并行处理。因此,可以提高事务处理效率。而相交的事务(例如都需要修改table2的两个事务),则仍需要串行处理(即一个事务执行完成后才能开启另一个事务)。
在步骤S904,对比对应行的epoch与目标epoch是否相同。
如果二者相同,执行步骤S905,提交第一事务。如果二者有任何不同,说明事务执行过程中出现冲突。例如,有新服务器上任。此时,执行步骤S906,终止(abort)第一事务。
在本实施例中,新服务器上任时,将epoch_table中所有epoch升高,来宣誓新服务器上任成功。如果老的服务修改表的数据,在最后提交比对时,会发现自己epoch小了,既有新的服务器上任成功,从而终止事务,防止数据不一致。如果服务器发现自己的epoch小了,就自动退出,防止反复抢夺epoch。通过表级别的epoch,能够做到表间并发提交,表内串行提交。
根据前文的介绍可知,本公开实施例提供的处理事务的方法,通过事务和数据库表的特殊设计,可以保证服务器容灾恢复后的一致性。由于无须修改数据库的运行逻辑,因此,本公开提供的方法,无需使用自研系统,可以适配通用的数据库。
前文结合图1至图9介绍了本公开提供的方法实施例。下面结合图10至图12介绍本公开提供的装置实施例。应理解,装置实施例与方法实施例相互对应。装置实施例中未详尽介绍之处,请参考方法实施例中的描述。
图10是本公开实施例提供的数据库的结构示意图。如图10所示,数据库1000包括接收模块1010。数据库1000中存储有第一数据库表和第二数据库表,第二数据库表中记录有第一数据库表的纪元信息,第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息。
接收模块1010被配置为接收第一事务。第一事务的操作可以包括:修改第一数据库表中的数据;查询第二数据库表,以得到第一数据库表的纪元信息;将第一数据库表的纪元信息与目标纪元信息进行对比,其中目标纪元信息为发送第一事务的服务器对应的纪元信息;如果第一数据库表的纪元信息与目标纪元信息相同,则提交第一事务;如果第一数据库表的纪元信息与目标纪元信息不同,则终止第一事务。
可选地,接收模块1010还被配置为,在所述接收第一事务之前,接收第二事务。第二事务为服务器上任时发送的事务,且第二事务用于将第一数据库表的纪元信息更改为服务器对应的纪元信息。
可选地,第一数据库表包括多张数据库表,多张数据库表具有各自对应的纪元信息,如果第一数据库表的纪元信息与目标纪元信息相同,则提交第一事务,包括:如果多张数据库表的纪元信息均与目标纪元信息相同,则提交第一事务。
图11是本公开实施例提供的服务器的结构示意图。如图11所示,服务器1100包括发送模块1110。服务器1100可以与数据库通信连接。数据库中存储有第一数据库表和第二数据库表,第二数据库表中记录有第一数据库表的纪元信息,第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息。
发送模块1110被配置为向数据库发送第一事务。第一事务的操作可以包括:修改第一数据库表中的数据;查询第二数据库表,以得到第一数据库表的纪元信息;将第一数据库表的纪元信息与目标纪元信息进行对比,其中目标纪元信息为发送第一事务的服务器对应的纪元信息;如果第一数据库表的纪元信息与目标纪元信息相同,则提交第一事务;如果第一数据库表的纪元信息与目标纪元信息不同,则终止第一事务。
可选地,发送模块1110还可以被配置为,在所述向所述数据库发送第一事务之前,在服务器1100上任时,向数据库发送第二事务,第二事务用于将第一数据库表的纪元信息更改为服务器1100对应的纪元信息。
可选地,第一数据库表包括多张数据库表,多张数据库表具有各自对应的纪元信息,如果第一数据库表的纪元信息与目标纪元信息相同,则提交第一事务,包括:如果多张数据库表的纪元信息均与目标纪元信息相同,则提交第一事务。
图12是本公开实施例提供的处理事务的装置的结构示意图。该处理事务的装置1200可以是用户终端或数据库代理服务器。装置1200可以包括存储器1210和处理器1220。存储器1210可用于存储可执行代码。处理器1220可用于执行所述存储器1210中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置1200还可以包括网络接口1230,处理器1220与外部设备的数据交换可以通过该网络接口1230实现。
应理解,在本公开的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统和装置,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (14)

1.一种处理事务的方法,所述方法应用于数据库,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,
所述方法包括:
接收第一事务,所述第一事务的操作包括:
修改所述第一数据库表中的数据;
查询所述第二数据库表,以得到所述第一数据库表的纪元信息;
将所述第一数据库表的纪元信息与目标纪元信息进行对比,其中所述目标纪元信息为发送所述第一事务的服务器对应的纪元信息;
如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务;
如果所述第一数据库表的纪元信息与所述目标纪元信息不同,则终止所述第一事务。
2.根据权利要求1所述的方法,在所述接收第一事务之前,所述方法包括:
接收第二事务,所述第二事务为服务器上任时发送的事务,且所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
3.根据权利要求1所述的方法,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,
所述如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务,包括:
如果所述多张数据库表的纪元信息均与所述目标纪元信息相同,则提交所述第一事务。
4.一种处理事务的方法,所述方法应用于与数据库通信连接的服务器,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,
所述方法包括:
向所述数据库发送第一事务,所述第一事务的操作包括:
修改所述第一数据库表中的数据;
查询所述第二数据库表,以得到所述第一数据库表的纪元信息;
将所述第一数据库表的纪元信息与所述服务器对应的纪元信息进行对比;
如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务;
如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息不同,则终止所述第一事务。
5.根据权利要求4所述的方法,在所述向所述数据库发送第一事务之前,所述方法还包括:
在所述服务器上任时,向所述数据库发送第二事务,所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
6.根据权利要求4所述的方法,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,
所述如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务,包括:
如果所述多张数据库表的纪元信息均与所述服务器对应的纪元信息相同,则提交所述第一事务。
7.一种存储装置,包括数据库,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述数据库包括:
接收模块,被配置为接收第一事务,所述第一事务的操作包括:
修改所述第一数据库表中的数据;
查询所述第二数据库表,以得到所述第一数据库表的纪元信息;
将所述第一数据库表的纪元信息与目标纪元信息进行对比,其中所述目标纪元信息为发送所述第一事务的服务器对应的纪元信息;
如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务;
如果所述第一数据库表的纪元信息与所述目标纪元信息不同,则终止所述第一事务。
8.根据权利要求7所述的存储装置,所述接收模块还被配置为:
在所述接收第一事务之前,接收第二事务,所述第二事务为所述服务器上任时发送的事务,且所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
9.据权利要求7所述的存储装置,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,
所述如果所述第一数据库表的纪元信息与所述目标纪元信息相同,则提交所述第一事务,包括:
如果所述多张数据库表的纪元信息均与所述目标纪元信息相同,则提交所述第一事务。
10.一种服务器,所述服务器与数据库通信连接,所述数据库中存储有第一数据库表和第二数据库表,所述第二数据库表中记录有所述第一数据库表的纪元信息,所述第一数据库表的纪元信息为当前对外提供服务的服务器对应的纪元信息,所述服务器包括:
发送模块,被配置为向所述数据库发送第一事务,所述第一事务的操作包括:
修改所述第一数据库表中的数据;
查询所述第二数据库表,以得到所述第一数据库表的纪元信息;
将所述第一数据库表的纪元信息与所述服务器对应的纪元信息进行对比;
如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务;
如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息不同,则终止所述第一事务。
11.根据权利要求10所述的服务器,所述发送模块还被配置为:
在所述向所述数据库发送第一事务之前,在所述服务器上任时,向所述数据库发送第二事务,所述第二事务用于将所述第一数据库表的纪元信息更改为所述服务器对应的纪元信息。
12.根据权利要求10所述的服务器,所述第一数据库表包括多张数据库表,所述多张数据库表具有各自对应的纪元信息,
所述如果所述第一数据库表的纪元信息与所述服务器对应的纪元信息相同,则提交所述第一事务,包括:
如果所述多张数据库表的纪元信息均与所述服务器对应的纪元信息相同,则提交所述第一事务。
13.一种处理事务的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现权利要求1-3中任一项所述的方法。
14.一种处理事务的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现权利要求4-6中任一项所述的方法。
CN202210081580.6A 2022-01-24 2022-01-24 处理事务的方法、装置、存储装置以及服务器 Active CN114116732B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210081580.6A CN114116732B (zh) 2022-01-24 2022-01-24 处理事务的方法、装置、存储装置以及服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210081580.6A CN114116732B (zh) 2022-01-24 2022-01-24 处理事务的方法、装置、存储装置以及服务器

Publications (2)

Publication Number Publication Date
CN114116732A true CN114116732A (zh) 2022-03-01
CN114116732B CN114116732B (zh) 2022-04-05

Family

ID=80361269

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210081580.6A Active CN114116732B (zh) 2022-01-24 2022-01-24 处理事务的方法、装置、存储装置以及服务器

Country Status (1)

Country Link
CN (1) CN114116732B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160132581A1 (en) * 2012-06-04 2016-05-12 Google Inc. Pipelining Paxos State Machines
CN105765575A (zh) * 2013-11-11 2016-07-13 亚马逊科技公司 数据流摄取和持久性技术
CN109643309A (zh) * 2016-09-08 2019-04-16 华为技术有限公司 用于对跳跃表数据结构执行范围查询的系统和方法
US20190361915A1 (en) * 2017-03-15 2019-11-28 Fauna, Inc. Methods and systems for a database

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160132581A1 (en) * 2012-06-04 2016-05-12 Google Inc. Pipelining Paxos State Machines
CN105765575A (zh) * 2013-11-11 2016-07-13 亚马逊科技公司 数据流摄取和持久性技术
CN109643309A (zh) * 2016-09-08 2019-04-16 华为技术有限公司 用于对跳跃表数据结构执行范围查询的系统和方法
US20190361915A1 (en) * 2017-03-15 2019-11-28 Fauna, Inc. Methods and systems for a database

Also Published As

Publication number Publication date
CN114116732B (zh) 2022-04-05

Similar Documents

Publication Publication Date Title
CN106415538B (zh) 使用共享文件访问-rest接口的文件服务
US7409397B2 (en) Supporting replication among a plurality of file operation servers
WO2019217481A1 (en) Conflict resolution for multi-master distributed databases
JP4340226B2 (ja) データ項目の使用可能バージョンの提供
CN104793988A (zh) 跨数据库分布式事务的实现方法和装置
CN111414403B (zh) 数据访问方法和装置、数据存储方法和装置
CN107577678A (zh) 处理数据库事务的方法、客户端和服务器
CN112084258A (zh) 一种数据同步方法和装置
US10540344B2 (en) Utilizing nonce table to resolve concurrent blockchain transaction failure
CN113360456B (zh) 数据归档方法、装置、设备以及存储介质
CN113076304A (zh) 一种分布式版本管理方法、装置和系统
CN111475519A (zh) 数据缓存方法及装置
CN113438275B (zh) 数据迁移方法、装置、存储介质及数据迁移设备
CN113342507B (zh) 一种分布式锁服务实现方法、装置及计算机设备
CN102597995B (zh) 同步数据库和非数据库资源
CN108090056A (zh) 数据查询方法、装置及系统
WO2021147773A1 (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
WO2020192663A1 (zh) 一种数据管理方法及相关设备
JP6834715B2 (ja) 更新処理プログラム、装置、及び方法
CN114116732B (zh) 处理事务的方法、装置、存储装置以及服务器
WO2023134614A1 (zh) 事务的处理
US7251660B2 (en) Providing mappings between logical time values and real time values in a multinode system
CN109710629A (zh) 数据访问方法、装置、服务器和存储介质
US10685014B1 (en) Method of sharing read-only data pages among transactions in a database management system
CN110502460B (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