CN110782313A - 一种基于分库分表的数据库事务处理方法及装置 - Google Patents

一种基于分库分表的数据库事务处理方法及装置 Download PDF

Info

Publication number
CN110782313A
CN110782313A CN201910939439.3A CN201910939439A CN110782313A CN 110782313 A CN110782313 A CN 110782313A CN 201910939439 A CN201910939439 A CN 201910939439A CN 110782313 A CN110782313 A CN 110782313A
Authority
CN
China
Prior art keywords
sub
base
initial
service
database
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
CN201910939439.3A
Other languages
English (en)
Other versions
CN110782313B (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.)
Jiangsu Suning Cloud Computing Co ltd
SuningCom Co ltd
Original Assignee
Suning Cloud Computing 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 Suning Cloud Computing Co Ltd filed Critical Suning Cloud Computing Co Ltd
Priority to CN201910939439.3A priority Critical patent/CN110782313B/zh
Publication of CN110782313A publication Critical patent/CN110782313A/zh
Application granted granted Critical
Publication of CN110782313B publication Critical patent/CN110782313B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q30/00Commerce
    • G06Q30/06Buying, selling or leasing transactions
    • G06Q30/0601Electronic shopping [e-shopping]
    • 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/2379Updates performed during online database operations; commit processing
    • 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
    • G06F16/2453Query optimisation
    • 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/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • 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/25Integrating or interfacing systems involving database management systems
    • G06F16/256Integrating or interfacing systems involving database management systems in federated or virtual databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Accounting & Taxation (AREA)
  • Finance (AREA)
  • Computational Linguistics (AREA)
  • Development Economics (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于分库分表的数据库事务处理方法及装置,该方法包括:根据预先构建的映射表获取业务的初始子流程的分库分表字段;根据初始子流程的分库分表字段以及分库数量为当前子流程分配分库,当前子流程为业务的除初始子流程外的任一子流程;根据初始子流程的分库分表字段以及分表数量为当前子流程在分库中选取分表;将当前子流程的数据更新至分配到的分表,同时更新业务的其他子流程对应的分表中的相关数据。本发明通过将每次操作的业务所有子流程的数据都落在同一个数据库中,规避分布式事务的实现,降低开发成本和分布式事务带来的系统风险,同时能利用由数据库的特性来保证所操作的业务数据同时成功或失败。

Description

一种基于分库分表的数据库事务处理方法及装置
技术领域
本发明涉及数据库事务处理技术领域,特别涉及一种基于分库分表的数据库事务处理方法及装置。
背景技术
随着移动技术的发展,互联网已经渗透到人们生活的方方面面,线上经济活动的份额持续增长。大量用户和业务的接入,必然导致系统压力过大,降低系统的响应速度,从而影响用户体验。然而,各大电商竞争激烈,如果网站响应不及时,或者应用有明显的延迟,会导致用户体验差,甚至造成用户流失等问题。
当前一些应用系统,由于数据库是单库,数据库性能成为系统性能提升的一个瓶颈。目前通常采用数据库横向扩展的方式改善上述情况,但是,数据库横向扩展会带来跨库事务实现的难题。这是由于,在单库环境下,一次操作多行数据,可以通过数据库的特性(即数据库的原子性)保证操作同时成功或者同时失败,但是在多库环境下,一次操作的多行数据可能分布在不同的数据库实例中,无法通过数据库的特性保证操作同时成功或者同时失败,必须要引入分布式事务来保证操作的一批数据同时成功或者失败。但是,无论是引入中间件或者自开发实现分布式事务,成本都很高。
因此,亟需提出一种新的数据库事务处理方法,来解决上述问题。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种,以克服现有技术中等问题。
为解决上述一个或多个技术问题,本发明采用的技术方案是:
一方面,提供了一种基于分库分表的数据库事务处理方法,该方法包括如下步骤:
根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息;
根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程;
根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表;
将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
进一步的,所述根据预先构建的映射表获取业务的初始子流程的分库分表字段包括:
获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息;
重复上述步骤,直至查询到所述业务的初始子流程的信息,获取所述初始子流程的信息中的分库分表字段。
进一步的,所述方法还包括为每一业务的初始子流程分配分库以及所述分库中的分表的过程,步骤包括:
为每一业务的初始子流程设置分库分表字段;
根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库;
根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
进一步的,所述方法还包括构建映射表的过程,包括:
根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
进一步的,所述方法还包括为映射表分配分库以及分表的过程,包括
根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
另一方面,提供了一种基于分库分表的数据库事务处理装置,所述装置包括:
字段获取模块,用于根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息;
分库获取模块,用于根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程;
分表选取模块,用于根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表;
数据更新模块,用于将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
进一步的,所述字段获取模块包括:
信息获取单元,用于重复执行以下步骤,直至查询到所述业务的初始子流程的信息:
获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息;
字段获取单元,用于获取所述初始子流程的信息中的分库分表字段。
进一步的,所述装置还包括第一分配模块,所述第一分配模块包括:
字段设置单元,用于为每一业务的初始子流程设置分库分表字段;
分库分配单元,用于根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库;
分表分配单元,用于根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
进一步的,所述装置还包括:
关系构建模块,用于根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
进一步的,所述装置还包括:
第二分配模块,用于根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
本发明实施例提供的技术方案带来的有益效果是:
1、本发明实施例提供的基于分库分表的数据库事务处理方法及装置,通过将每次操作的业务所有子流程的数据都落在同一个数据库中,规避分布式事务的实现,降低开发成本和分布式事务带来的系统风险,同时能利用由数据库的特性来保证所操作的业务数据同时成功或失败;
2、本发明实施例提供的基于分库分表的数据库事务处理方法及装置,在业务初始子流程中设置分库分表字段,在后续子流程中,保存当前子流程和上一个子流程的映射关系数据,以保证每个子业务流程都能通过映射关系找到初始子流程设置的分库分表字段,作为当前子流程的分库分表字段,使整个业务都流程的数据都会保存在相同数据库中。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例示出的对数据库进行分库分表的流程图;
图2是根据一示例性实施例示出的基于分库分表的数据库事务处理方法的流程图;
图3是根据一示例性实施例示出的根据预先构建的映射表获取业务的初始子流程的分库分表字段的流程图;
图4是根据一示例性实施例示出的为每一业务的初始子流程分配分库以及分库中的分表的过程的流程图;
图5是根据一示例性实施例示出的基于分库分表的数据库事务处理装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。顾名思义,分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。分库分表的方式一般包括垂直分库/分表和水平分库/分表两种。垂直分库/分表是指根据业务进行划分,例如将涉及商品、订单、用户的表分别划分出成一个库。水平分库/分表是指根据一定规则,例如时间或id序列值等进行数据的拆分,比如根据年份来将一个数据库拆分成不同的数据库。
本发明实施例提供的数据库事务处理方法是基于分库分表的,即对数据库进行了横向扩展。通过横向扩展数据库,可以提高系统性能和稳定性。图1是根据一示例性实施例示出的对数据库进行分库分表的流程图,参照图1所示,作为一种较优的实施方式,本发明实施例中,对数据库进行分库分表的方法如下:
假设将数据库从1个扩展到M个(为方便阐述方案,这里假设M=10),数据库编号分别是DB0、DB1、DB2…DB9,设置分库规则为:将分库分表字段对M(即10)取余,余数是多少,就分配到对应序号的分库中。
将采购表A、交货表B、入库表C分别从1张扩展成N张(为方便阐述方案,这里假设N=I00)。则分表对应序号分别是:
A0、A1、A2。。。。。。A99
B0、B1、B2。。。。。。B99
C0、C1、C2。。。。。。C99
设置分表规则为:将分库分表字段对N(即100)取余,余数是多少,就分配到对应序号的分表中。
图2是根据一示例性实施例示出的基于分库分表的数据库事务处理方法的流程图,参照图1所示,该方法包括如下步骤:
S1:根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息。
具体的,本发明实施例中,数据是按照分库分表字段进行分库以及分表的,即会预先在业务的初始子流程中设置分库分表字段,根据分库分表字段来确定子流程的数据所要存储的分库以及分表。因此,在接收到操作请求后,会首先根据预先构建的映射表获取去业务的初始子流程的分库分表字段,其中,该映射表记录了业务的每一当前子流程与上一个子流程的映射关系,映射关系用于指示所述上一个子流程的信息。
S2:根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程。
具体的,获取到初始子流程的分库分表字段后,根据该分库分表字段以及分库数量为当前子流程分配分库。具体实施时,可以采用使用该分库分表字段对分库数量进行取余运算,余数是多少,就将当前子流程分配到与该余数对应的序号的分库。这里的分库数量是指当前所有数据库的总数量。这里需要说明的是,当前子流程可以是业务的除初始子流程外的任一子流程。由于给初始子流程预先分配分库时也是按照该分库分表字段对分库数量进行取余,余数是多少,就将初始子流程分配到与该余数对应的序号的分库,因此,这里当前子流程所分配到的分库与初始子流程分配到的是同一个分库。这样整个业务都使用相同分库分表字段,保存的数据都会落在相同数据库中,就能由数据库的特性来保证操作的业务数据同时成功或失败,并且不需要要引入分布式事务来保证操作的一批数据同时成功或者失败,降低运维成本。
S3:根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表。
具体的,同样的,在给当前子流程分配好分库后,在根据分库分表字段以及分表数量为当前子流程在分配到的分库中选取分表。具体实施时,可以采用使用该分库分表字段对分表数量进行取余运算,余数是多少,就将当前子流程分配到与该余数对应的序号的分表中。这里的分表数量是指当前子流程所分配到的分库中分表的总数量。
S4:将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
具体的,将当前子流程的数据更新至分配到的分表中,同时更新该业务的其他子流程对应的分表中的相关数据。例如,比如采销员需要采购一批商品,那么整个业务流程包含创建采购订单、交货、入库三个子流程,其中创建采购订单为初始子流程,作业人员保存入库单据时,系统在入库的业务中,需要保存入库单据和更新采购单据。因此,在计算出入库单据所要保存的分库以及分表后,保存入库单据,同时会更新采购表信息。这样保存入库单据、更新采购单据都发生在同一个数据库(即分库)中,数据库事务保证本次操作业务数据操作同时成功或失败。
图3是根据一示例性实施例示出的根据预先构建的映射表获取业务的初始子流程的分库分表字段的流程图,参照图3所示,作为一种较优的实施方式,本发明实施例中,所述获取业务的初始子流程的分库分表字段包括:
S101:获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息。
具体的,首先,获取业务的当前子流程的信息,该信息包括但不限于当前子流程的上一个子流程对应的单号(如交货单据的单号等)。然后根据当前子流程的信息(即上一个子流程对应的单号)查询相应的映射表,获取上一个子流程的信息,同样的,这里的上一个子流程的信息包括但不限于上一个子流程的上一个子流程的单号。这里的映射表中保存的是当前子流程与上一个子流程的映射关系数据,根据该映射表中的映射关系数据可以查询到上一个子流程的信息(如采购单据的单号等)。例如,业务是采购一批商品,整个业务流程包含创建采购订单、交货、入库三个子流程,其中初始子流程为创建采购订单,假设初始子流程的分库分表字段为采购单号。假设当前子流程为入库,入库请求中会包含对应的交货单号(即当前子流程的信息),但是不包含采购单号,此时,根据交货单号查询映射表,获取上一个子流程(即交货流程)的信息,交货流程的信息里包括与之对应的采购单号。
S102:重复上述步骤,直至查询到所述业务的初始子流程的信息,获取所述初始子流程的信息中的分库分表字段。
具体的,将当前子流程的上一个子流程作为新的当前子流程,根据新的当前子流程的信息查询相应的映射表,获取新的当前子流程的上一个子流程的信息,一直重复该步骤,直至查询到业务的初始子流程的信息,获取初始子流程的信息中的分库分表字段。
图4是根据一示例性实施例示出的为每一业务的初始子流程分配分库以及分库中的分表的过程的流程图,参照图4所示,作为一种较优的实施方式,本发明实施例中,所述方法还包括为每一业务的初始子流程分配分库以及所述分库中的分表的过程,步骤包括:
S501:为每一业务的初始子流程设置分库分表字段。
具体的,本发明实施例中,会预先在每一业务的初始子流程中设置分库分表字段,然后根据分库分表字段来确定初始子流程的数据所要存储的分库以及分表,即数据是按照分库分表字段进行分库以及分表来存储的。其中,这里的分库分表字段可以是初始子流程中单据的单号等。
S502:根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库。
具体的,按照预设的计算方法对初始子流程的分库分表字段以及分库数量进行计算,为初始子流程分配分库。具体实施时,可以采用使用初始子流程的分库分表字段对分库数量进行取余运算,余数是多少,就将初始子流程分配到与该余数对应的序号的分库。这里的分库数量同样是指当前所有数据库的总数量。
S503:根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
具体的,同样的,本发明实施例中按照预设的计算方法对初始子流程的分库分表字段以及分库中的分表数量进行计算,为初始子流程分配分表。具体实施时,可以采用使用初始子流程的分库分表字段对分表数量进行取余运算,余数是多少,就将初始子流程分配到与该余数对应的序号的分表中。这里的分表数量是指初始子流程所分配到的分库中分表的总数量。
这里需要说明的是,上述给每一业务的初始子流程分配分库以及分库中的分表的方法只是本发明实施例的一种较优的实施方式,本发明实施例中给每一业务的初始子流程分配分库以及分库中的分表的方法还可以是其他方式,这里不再一一列举。
作为一种较优的实施方式,本发明实施例中,所述方法还包括构建映射表的过程,包括:
根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
具体的,为了使用户能够根据当前子流程的信息查找到初始子流程的分库分表字段,本发明实施例中,会保存每一个当前子流程与上一个子流程的映射关系数据,以保证无论在哪个业务子流程中,都能逐步查找到初始子流程的分库分表字段以及其他相关信息。具体实施时,可以预先根据业务的每一当前子流程与上一个子流程的映射关系生成映射表。用户可以先根据当前子流程的信息查找到对应的映射表,然后再映射表中查找出上一个子流程的信息,逐步往上查找子流程,直到找到业务的初始子流程,获取其分库分表字段。
作为一种较优的实施方式,本发明实施例中,所述方法还包括为映射表分配分库以及分表的过程,包括
根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
具体的,作为一种示例,本发明实施例中,按照预设的计算方法对当前子流程的信息、分库数量以及分表数量进行计算,为映射表分配分库以及分表。具体实施时,可以使用当前子流程的信息对分库数量进行取余运算,余数是多少,就将映射表分配到与该余数对应的序号的分库。分库确定好后,再给映射表在确定好的分库中分配分表。具体分配时,可以使用当前子流程的信息对分表数量进行取余运算,余数是多少,就将映射表分配到与该余数对应的序号的分表中。这里的分表数量是指初始子流程所分配到的分库中分表的总数量。这样,后续在为当前子流程的数据进行分库以及分表时,就可以直接根据当前子流程的信息查到到相应的映射表,从而查找到当前子流程的上一个子流程。
以下对本发明实施例提供的基于分库分表的数据库事务处理方法进行举例说明:
假设采销员需要采购一批商品,整个业务流程包含创建采购订单、交货、入库三个子流程,此时,创建采购订单即为本发明实施例中的初始子流程,因此,需在创建采购订单流程中设置分库分表字段,作为一种示例,这里可以设置分库分表字段为采购单号。后续子流程都需获取到该采购单号,然后根据采购单号进行分库分表。
同样,参照图1所示,假设数据库分库有10个,编号分别是DB0、DB1、DB2…DB9,每个分库中的采购表A、交货表B、入库表C均为100张,各表对应序号分别是:
A0、A1、A2。。。。。。A99
B0、B1、B2。。。。。。B99
C0、C1、C2。。。。。。C99
采销人员创建一个单号是1001的采购单据,里面包含2条商品明细,其中,D商品10件,E商品20件,为初始子流程分配分库以及在分库中分配分表过程如下:
系统为了让两条采购明细同时保存成功,最简单的方法就是让两条数据都落在相同数据库中,数据库保证两条记录同时成功或失败。两个采购商品都属于同一个采购清单,采购单号是相同的,因此这里可以用采购单号作为分表字段,保证两条记录在同一个分库的同一张分表中。具体分配时,使用采购单号分别对分库数量以及分表数量进行取余运算,即1001%10=1,1001%100=1,则该采购订单的数据都落在DB1库中的A1表中,参照表一所示:
表一 采购表A1
Figure BDA0002221062180000121
供应商收到采购订单后准备供货,根据采购清单创建一张交货单据,假设交货单据的单号是2010,记录商品D送来的10件,商品E送来20件。系统在保存交货单时,要把之前生成采购的单据上D商品的收货数量更新成10个,E商品的收货数量更新成20个,表示供应商预计送来的商品分别是10件和20件。交货的业务过程中包含保存交货表和更新采购表,这两个操作需要同时成功或失败。交货单据里面记录了对应的采购单号,可以根据采购单号对交货的数据进行分库分表,保存交货信息。即1001%10=1,1001%100=1,交货数据落在DB1中的B1表中),这样交货单据和采购单据都保存在数据库DB1中,数据库事务保证本次操作业务数据操作同时成功或失败。具体参照表二和表三所示:
表二 交货时更新后的采购表A1
Figure BDA0002221062180000122
表三 交货表B1
Figure BDA0002221062180000123
在货物入库环节,入库时也会生成对应单据(假设入库表的单号为3030)和以及需要更新采购单据,因此,也需要使用统一的分库分表字段,但是在入库环节,请求数据中不包含采购单号,只有交货单号。为了保证后续操作的一直,这里需要预先保存交货单号和采购单号的映射关系数据,以便在入库环节通过交货单号,查询得到采购单号。
本发明实施例中,映射数据也分库分表保存,假设映射表为Y,每个分库中Y表有100张,映射表的分库分表字段是当前子流程的信息(如单号),经计算2010%10=0,2010%100=10,因此,交货单号与采购单号的映射关系数据落在DB0库表Y10中。参照表四所示:
表四 映射表Y10
Figure BDA0002221062180000131
此时,当仓库人员收到了供应商送来的10件商品D,20件商品E后,需要把商品送到物流基地的仓库中,安放到仓库货架上。入库完成后,作业人员会生成一个入库的单据(假设单据号为3030),记录下入库了10件D,20件E,同时还需要更新之前的采购单据,表示已入库D商品10件,E商品20件。
作业人员保存入库单据时,会输入对应的交货单号,记录本地入库的是对应哪一个交货单子,而不会输入交货单对应的采购单号,但是系统在整个入库的业务中,需要保存入库单据和更新采购单据。
因此,系统首先根据交货单据号查询映射表,2010%10=0,2010%100=10,计算可知查询DB0库Y10表,得到采购单号为1001。再通过采购单号算出(1001%10=1,1001%100=1)采购单据信息保存在DB1库的表A1中,更新采购表信息,最后保存入库单据。为了保证入库单据保存和采购单据更新同时成功失败,把采购单据号作为保存入库单据的分库分表字段,经计算1001%10=1,1001%100=1入库数据保存在DB1库C1表中。这样保存入库单据、更新采购单据都发生在同一个数据库DB1中,数据库事务保证本次操作业务数据操作同时成功或失败。具体参照表五和表六所示:
表五 入库时更新后的采购表A1
表六 入库表C1
这里需要说明的是,如果创建采购订单子流程(即初始子流程)失败,则交货子流程和入库子流程不执行,整个业务失败。如果创建采购订单子流程成功,交货子流程或入库子流程失败,由于这两个子流程的数据是在同一个库的,数据库事务保证同时成功或失败,两部分数据会都回滚掉。但是,映射表落在DB0库表Y10中,和上述采购订单子流程、交货子流程不在一个数据库中,数据库事务不能保证,因此映射关系数据不会回滚,但是,这个对业务是没有影响的,可以允许不会滚,后续重新发起交货业务的话,直接更新映射关系即可。
图5是根据一示例性实施例示出的基于分库分表的数据库事务处理装置的结构示意图,参照图5所示,该装置包括:
字段获取模块,用于根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息;
分库获取模块,用于根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程:
分表选取模块,用于根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表;
数据更新模块,用于将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
作为一种较优的实施方式,本发明实施例中,所述字段获取模块包括:
信息获取单元,用于重复执行以下步骤,直至查询到所述业务的初始子流程的信息:
获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息;
字段获取单元,用于获取所述初始子流程的信息中的分库分表字段。
作为一种较优的实施方式,本发明实施例中,所述装置还包括第一分配模块,所述第一分配模块包括:
字段设置单元,用于为每一业务的初始子流程设置分库分表字段;
分库分配单元,用于根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库;
分表分配单元,用于根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
作为一种较优的实施方式,本发明实施例中,所述装置还包括:
关系构建模块,用于根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
作为一种较优的实施方式,本发明实施例中,所述装置还包括:
第二分配模块,用于根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
综上所述,本发明实施例提供的技术方案带来的有益效果是:
1、本发明实施例提供的基于分库分表的数据库事务处理方法及装置,通过将每次操作的业务所有子流程的数据都落在同一个数据库中,规避分布式事务的实现,降低开发成本和分布式事务带来的系统风险,同时能利用由数据库的特性来保证所操作的业务数据同时成功或失败;
2、本发明实施例提供的基于分库分表的数据库事务处理方法及装置,在业务初始子流程中设置分库分表字段,在后续子流程中,保存当前子流程和上一个子流程的映射关系数据,以保证每个子业务流程都能通过映射关系找到初始子流程设置的分库分表字段,作为当前子流程的分库分表字段,使整个业务都流程的数据都会保存在相同数据库中。
需要说明的是:上述实施例提供的基于分库分表的数据库事务处理装置在触发数据库事务业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于分库分表的数据库事务处理装置与基于分库分表的数据库事务处理方法实施例属于同一构思,即该装置是基于该基于分库分表的数据库事务处理方法的,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于分库分表的数据库事务处理方法,其特征在于,所述方法包括如下步骤:
根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息;
根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程;
根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表;
将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
2.根据权利要求1所述的基于分库分表的数据库事务处理方法,其特征在于,所述根据预先构建的映射表获取业务的初始子流程的分库分表字段包括:
获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息;
重复上述步骤,直至查询到所述业务的初始子流程的信息,获取所述初始子流程的信息中的分库分表字段。
3.根据权利要求1或2所述的基于分库分表的数据库事务处理方法,其特征在于,所述方法还包括为每一业务的初始子流程分配分库以及所述分库中的分表的过程,步骤包括:
为每一业务的初始子流程设置分库分表字段;
根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库;
根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
4.根据权利要求1或2所述的基于分库分表的数据库事务处理方法,其特征在于,所述方法还包括构建映射表的过程,包括:
根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
5.根据权利要求4所述的基于分库分表的数据库事务处理方法,其特征在于,所述方法还包括为映射表分配分库以及分表的过程,包括
根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
6.一种基于分库分表的数据库事务处理装置,其特征在于,所述装置包括:
字段获取模块,用于根据预先构建的映射表获取业务的初始子流程的分库分表字段,所述映射表记录了业务的每一当前子流程与上一个子流程的映射关系,所述映射关系用于指示所述上一个子流程的信息;
分库获取模块,用于根据所述初始子流程的分库分表字段以及分库数量为当前子流程分配分库,所述当前子流程为所述业务的除初始子流程外的任一子流程;
分表选取模块,用于根据所述初始子流程的分库分表字段以及分表数量为所述当前子流程在所述分库中选取分表;
数据更新模块,用于将所述当前子流程的数据更新至分配到的所述分表,同时更新所述业务的其他子流程对应的分表中的相关数据。
7.根据权利要求6所述的基于分库分表的数据库事务处理装置,其特征在于,所述字段获取模块包括:
信息获取单元,用于重复执行以下步骤,直至查询到所述业务的初始子流程的信息:
获取所述业务的当前子流程的信息,根据所述当前子流程的信息查询相应的所述映射表,获取上一个子流程的信息;
字段获取单元,用于获取所述初始子流程的信息中的分库分表字段。
8.根据权利要求6或7所述的基于分库分表的数据库事务处理装置,其特征在于,所述装置还包括第一分配模块,所述第一分配模块包括:
字段设置单元,用于为每一业务的初始子流程设置分库分表字段;
分库分配单元,用于根据所述初始子流程的分库分表字段以及分库数量为所述初始子流程分配分库;
分表分配单元,用于根据所述初始子流程的分库分表字段以及分表数量为所述初始子流程分配所述分库中的分表。
9.根据权利要求6或7所述的基于分库分表的数据库事务处理装置,其特征在于,所述装置还包括:
关系构建模块,用于根据业务的每一当前子流程与上一个子流程的映射关系生成映射表,所述映射关系用于指示所述上一个子流程的信息。
10.根据权利要求9所述的基于分库分表的数据库事务处理装置,其特征在于,所述装置还包括:
第二分配模块,用于根据所述当前子流程的信息、分库数量以及分表数量为所述映射表分配分库以及分表,以存储所述映射表。
CN201910939439.3A 2019-09-29 2019-09-29 一种基于分库分表的数据库事务处理方法及装置 Active CN110782313B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910939439.3A CN110782313B (zh) 2019-09-29 2019-09-29 一种基于分库分表的数据库事务处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910939439.3A CN110782313B (zh) 2019-09-29 2019-09-29 一种基于分库分表的数据库事务处理方法及装置

Publications (2)

Publication Number Publication Date
CN110782313A true CN110782313A (zh) 2020-02-11
CN110782313B CN110782313B (zh) 2022-12-23

Family

ID=69384992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910939439.3A Active CN110782313B (zh) 2019-09-29 2019-09-29 一种基于分库分表的数据库事务处理方法及装置

Country Status (1)

Country Link
CN (1) CN110782313B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021169272A1 (zh) * 2020-02-27 2021-09-02 平安科技(深圳)有限公司 数据库表格变更方法、装置、计算机设备及存储介质
CN114116754A (zh) * 2021-12-06 2022-03-01 税友软件集团股份有限公司 分布式数据库的数据更新方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110178906A1 (en) * 2004-10-13 2011-07-21 Ares Capital Management Pty Ltd Data processing system and method incorporating valuation method toggle
CN104866577A (zh) * 2015-05-26 2015-08-26 深圳市六度人和科技有限公司 一种基于嵌入式数据库的数据处理方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110178906A1 (en) * 2004-10-13 2011-07-21 Ares Capital Management Pty Ltd Data processing system and method incorporating valuation method toggle
CN104866577A (zh) * 2015-05-26 2015-08-26 深圳市六度人和科技有限公司 一种基于嵌入式数据库的数据处理方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
M. SATO等: "Electromagnetic Noise Suppression Composite Sheet Made of Hexagonal Ferrite Particles", 《2018 IEEE INTERNATIONAL MAGNETICS CONFERENCE (INTERMAG)》 *
刘雷: "分布式数据库在金融应用场景中的探索与实践", 《大数据》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021169272A1 (zh) * 2020-02-27 2021-09-02 平安科技(深圳)有限公司 数据库表格变更方法、装置、计算机设备及存储介质
CN114116754A (zh) * 2021-12-06 2022-03-01 税友软件集团股份有限公司 分布式数据库的数据更新方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN110782313B (zh) 2022-12-23

Similar Documents

Publication Publication Date Title
JP7423816B2 (ja) 注文情報処理方法、装置、コンピュータ機器及び媒体
CN104699712B (zh) 对数据库中的库存记录信息进行更新的方法及装置
US5311424A (en) Method and system for product configuration definition and tracking
CN104516895B (zh) 商品对象库存信息处理方法及系统
CN106997557B (zh) 订单信息采集方法及装置
CN104794249A (zh) 一种数据库的实现方法和设备
US10831737B2 (en) Method and device for partitioning association table in distributed database
CN110782313B (zh) 一种基于分库分表的数据库事务处理方法及装置
WO2016169451A1 (zh) 物流服务信息提供方法及装置
US20070239666A1 (en) Method and System for a De-Normalized Electronic-Catalog
US9342812B2 (en) Taxonomy based database partitioning
CN106933891A (zh) 访问分布式数据库的方法和分布式数据服务的装置
KR102327572B1 (ko) 데이터 저장과 서비스 처리 방법 및 장치
CN107357557B (zh) 一种信息更新方法及装置
CN110740155A (zh) 分布式系统中的请求处理方法及装置
CN111773666B (zh) 订单数据的处理方法、装置、存储介质和电子装置
CN105590178A (zh) 一种资源处理方法与设备
CN115456739B (zh) 数据管理方法及相关装置
JP2005165610A (ja) トランザクション処理システムおよび方法
US10503696B1 (en) Maintaining stable record identifiers in the presence of updated data records
CN111026963A (zh) 数据查询的方法及装置、配置信息的设置方法及装置
US20160371629A1 (en) Method for cost efficient fulfillment
US20040143517A1 (en) System and method for managing material distribution and returned materials
CN114564501A (zh) 一种数据库数据存储、查询方法、装置、设备及介质
CN109472668B (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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee after: Jiangsu Suning cloud computing Co.,Ltd.

Country or region after: China

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Suning Cloud Computing Co.,Ltd.

Country or region before: China

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240410

Address after: 210000, 1-5 story, Jinshan building, 8 Shanxi Road, Nanjing, Jiangsu.

Patentee after: SUNING.COM Co.,Ltd.

Country or region after: China

Address before: No.1-1 Suning Avenue, Xuzhuang Software Park, Xuanwu District, Nanjing, Jiangsu Province, 210000

Patentee before: Jiangsu Suning cloud computing Co.,Ltd.

Country or region before: China