跨库事务处理方法及装置的制造方法

文档序号:9687454阅读:379来源:国知局
跨库事务处理方法及装置的制造方法
【专利说明】跨库事务处理方法及装置 【技术领域】
[0001] 本发明涉及数据库技术领域,尤其涉及一种跨库事务处理方法及装置。 【【背景技术】】
[0002] 数据库拆分是一种提升系统容量的有效方式,主要是把在一个数据库中处理的数 据按照某种规则分拆到多个数据库中,降低单个数据库的压力。目前数据库拆分包括垂直 拆分和水平拆分。其中,垂直拆分是按照功能划分,把不同功能的数据分别放到不同的数据 库中;水平拆分是将一张表的数据拆分到多张同样的表中,一般采用哈希化ash)散列等方 式保证拆分结果的均匀性。
[0003] 在上述分库的应用场景中,有可能涉及到跨库事务,即需要在不同数据库之间进 行操作的事务。跨库事务要求满足一致性,即对不同数据库的操作结果要么都成功要么都 失败,否则就会出现错误。由于在现有垂直拆分或水平拆分方式下很少出现跨库事务,所W 现有技术中尚不存在处理跨库事务的成熟方案。 【
【发明内容】

[0004] 本发明的多个方面提供一种跨库事务处理方法及装置,用W实现跨库事务的处 理。
[0005] 本发明的一方面,提供一种跨库事务处理方法,包括:
[0006] 接收业务请求,所述业务请求包括业务交易涉及的交易信息;
[0007] 根据所述交易信息,分别记录所述业务交易涉及的多个数据库参与所述业务交易 的行为信息,并将所述业务交易的处理状态标记为待提交状态,所述待提交状态是指所有 数据库均满足参与所述业务交易的条件后可W对每个数据库进行操作的业务处理状态;
[0008] 在所述待提交状态下,根据每个数据库参与所述业务交易的行为信息对每个数据 库进行至少一次操作,直到所有数据库参与所述业务交易的行为结果达到一致为止。
[0009] 本发明的另一方面,提供一种跨库事务处理装置,包括:
[0010] 接收模块,用于接收业务请求,所述业务请求包括业务交易涉及的交易信息;
[0011] 第一处理模块,用于根据所述交易信息,分别记录所述业务交易涉及的多个数据 库参与所述业务交易的行为信息,并将所述业务交易的处理状态标记为待提交状态,所述 待提交状态是指所有数据库均满足参与所述业务交易的条件后可W对每个数据库进行操 作的业务处理状态;
[0012] 第二处理模块,用于在所述待提交状态下,根据每个数据库参与所述业务交易的 行为信息对每个数据库进行至少一次操作,直到所有数据库参与所述业务交易的行为结果 达到一致为止。
[0013] 在本发明技术方案中,接收业务请求后,根据业务请求包括的交易信息,分别记录 业务交易涉及的多个数据库参与该业务交易的行为信息,并将该业务交易的处理状态标记 为待提交状态,在待提交状态下,根据上述记录的行为信息分别对每个数据库进行至少一 次操作,直到所有数据库参与业务交易的行为结果达到一致。通过记录每个数据库参与业 务交易的行为信息,并对业务交易的处理状态进行标记,可W保证多次执行每个数据库参 与业务交易的行为直到所有数据库参与业务交易的行为结果达到一致,因此,不会出现某 些数据库的提交结果成功某些数据库的提交结果不成功的情况,保证了事务提交结果的一 致性。 【【附图说明】】
[0014] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述 中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实 施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可W根据送些附 图获得其他的附图。
[0015] 图1为本发明一实施例提供的跨库事务处理方法的流程示意图;
[0016] 图2为本发明另一实施例提供的跨库事务处理方法的流程示意图;
[0017] 图3为本发明又一实施例提供的跨库事务处理方法的流程示意图;
[0018] 图4为本发明又一实施例提供的跨库事务处理方法的流程示意图;
[0019] 图5为本发明一实施例提供的跨库事务处理装置的结构示意图;
[0020] 图6为本发明另一实施例提供的跨库事务处理装置的结构示意图。 【【具体实施方式】】
[0021] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0022] 在单数据库的应用场景中,当数据库的容量达到瓶颈后,通常是将数据库中的数 据拆分到多个数据库中,W应对更高容量的服务需求。拆分方法包括垂直拆分和水平拆分。 对于账务业务来说,由于业务模型非常简单,主要提供做账服务及账务信息查询服务。其中 做账服务包括存入(如银行的现金存入,或其他银行向本行的跨行打款)、提现(如银行的 现金提款,或向他行汇款)W及转账(如银行内部客户间的资金划拨)。因此,对于账务业 务来说无法做到业务的垂直剥离,所W不适合采用垂直拆分的方式。为达到将账务服务的 事务热点及存储热点均匀分散到各分库上,对于账务数据可W采用水平拆分的方式。本实 施例针对账务数据提供了一种新的水平拆分方法,即按照账号编号做拆分。
[0023] 假设账号编号的生成规则为;6位业务前缀+10位递增编号,则账号编号生成范例 如下表1不:
[0024] 表 1
[00 巧]
[0026] 后10位递增编号的生成方式为每产生一个新的账号编号,在上一个账号编号的 基础上加1递增。
[0027] 基于上述,若期望将数据库由1个拆成100个,则用账号编号按100取模,得到的 结果作为数据库水平拆分的依据,通过送种方式就可W将根据账号编号将账务数据平均拆 分到100个数据库中。若容量要求进一步提升,亦可考虑进一步对账号编号按1000取模, 送样就可W按照账号编号将账务数据由1个数据库拆分到1000个数据库中。值的说明的 是,具体按多大数值对账号编号取模,可根据实际业务规模对容量的要求评估决定。
[0028] 举例说明,假设活期账号对应的账务数据需要由原来的1个库拆分到100个库中。 对账号编号Μ :1000010009988012,账号编号N :1000010239168099分别进行100取模,则账 号编号Μ的取模运算结果为:1000010009988012% 100 = 12 ;账号编号N的取模运算结果 为:1000010239168099% 100 = 99。则根据运算结果,我们需要将账号编号Μ的账务数据置 入编号为12的数据库,库名可设为ACC0UNT_12 ;账号编号Ν的账务数据置入编号为99的 数据库,库名可设为ACC0UNT_99。
[0029] 无论是对上述账务业务进行分库后,还是对现有技术中的分库场景,都会出现跨 库事务,对于账务业务分库后出现跨库事务的场景更多。例如,对于两个客户的账户资金划 拨来说,账号编号Μ转账100元给账号编号N,账号编号Μ和账号编号N的账务数据在不同 的数据库中,于是出现了跨库事务。
[0030] 对于账号编号Μ和账号编号Ν发生的一笔转账,必须做出如下保证:
[0031] 账号编号Μ扣款成功,账号编号Ν加款成功,对外返回转账成功结果;
[0032] 账号编号Μ扣款失败,账号编号Ν未加款,对外返回转账失败结果;
[0033] 而如下情况则禁止出现:
[0034] 账号编号Μ扣款成功,账号编号Ν未加款;
[0035] 账号编号Μ未扣款,账号编号Ν加款成功;
[0036] 也就是说,转账过程中账号编号Μ扣款及账号编号Ν加款送件事必须满足一致性, 要么同时成功,要么同时失败,否则会出现资金处理出错。由于现有技术不存在解决上述问 题的技术方案,本发明实施例提供一种跨库事务处理方法。
[0037] 图1为本发明一实施例提供的跨库事务处理方法的流程示意图。如图1所示,该 方法包括:
[0038] 101、接收业务请求,该业务请求包括业务交易涉及的交易信息。
[0039] 102、根据上述交易信息,分别记录上述
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1