CN110109936B - 一种规避数据库锁等待以及事务合并提交的方法 - Google Patents
一种规避数据库锁等待以及事务合并提交的方法 Download PDFInfo
- Publication number
- CN110109936B CN110109936B CN201910396107.5A CN201910396107A CN110109936B CN 110109936 B CN110109936 B CN 110109936B CN 201910396107 A CN201910396107 A CN 201910396107A CN 110109936 B CN110109936 B CN 110109936B
- Authority
- CN
- China
- Prior art keywords
- transaction
- account
- processed
- queue
- transactions
- 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
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION 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
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Theoretical Computer Science (AREA)
- Finance (AREA)
- Accounting & Taxation (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明公开了一种规避数据库锁等待以及事务合并提交的方法,属于金融技术领域,解决现有技术,若不事先知道哪个账户为热点账户并且事先配置好子账户会造成性能瓶颈问题。两个以上的线程先后从待处理交易队列中获取多条交易后筛选出交易关联账户;查询账户LIST是否包含获取的各交易关联账户,若不包含,将此交易关联账户维护进账户LIST,再执行下一步,否则,直接执行下一步;判断交易关联账户的多条交易的处理逻辑是否正确性,若正确,作为一个事务提交,并移除账户LIST,再执行下一步,否则不提交;判断线程获取的交易关系账户是否处理完,若未,根据上述处理未维护进账户LIST的交易关联账户,否则,判断待处理交易队列是否为空,若是,结束,否则线程再次执行。用于解决热点账户锁等待导致的性能瓶颈问题。
Description
技术领域
一种规避数据库锁等待以及事务合并提交的方法,用于解决热点账户锁等待导致的性能瓶颈问题,属于金融技术领域。
背景技术
热点账户具有以下特征,一是与该账户关联的交易量大,交易笔数多;二是与该账户关联的交易频次高,并发量高;严格意义上讲,只要符合上述两个特征的账户都可称为热点账户,而这里的账户不局限为实体账户、虚拟账户、记账簿等,只是在金融领域,账户的概念及场景涉及相对较广泛。上述特征将导致系统在处理热点账户交易(尤其是账务变更)时,会因为数据库锁机制造成大量等待时间,即数据库在更新数据表的一条记录时,产生行级锁,以防止该条记录同时被他人更改而产生数据一致性问题,这样就会造成大量等待时间,,从而导致严重的系统整体并发瓶颈。
现有技术方案主要采用挂子账户的方案,是一种划整为零的思路。通过将某一热点账户在逻辑上划分为多个子账户的方式强行将该账户进行分身,每个分身可获得等量的系统资源及处理能力,假如系统对每个子账户的处理为100TPS,则理论上有N个子账户的热点账户可获得最多N*100TPS的处理能力,如图1所示。但会存在的如下缺点:
1、必须事先知道哪个账户为热点账户并且事先配置好子账户,即若不预先知道哪个账户为热点账户并且预先配置好子账户,则当该账户触发热点账户场景时其交易并发瓶颈就不能得到解决,并发处理能力就非常差;而且判断账户是否会成为热点账户以及配置多少个子账户都是根据人为主观经验判断的,缺乏一定的严谨性和客观性。
2、子账户数量是根据历史交易量评估,不能根据实际交易量自适应调整,即设置的子账户数量不准确,其性能瓶颈仍不能得到有效解决;由于未从根本上解决数据库锁等待问题,对于未事先配置好子账户的热点账户,仍不能解决其性能瓶颈问题。
发明内容
针对上述研究的问题,本发明的目的在于提供一种规避数据库锁等待以及事务合并提交的方法,解决现有技术中,若不事先知道哪个账户为热点账户并且事先配置好子账户会造成性能瓶颈问题。
为了达到上述目的,本发明采用如下技术方案:
一种规避数据库锁等待以及事务合并提交的方法,如下步骤:
步骤1、获取待处理交易队列和处理中的账户LIST;
步骤2、两个以上的线程先后从待处理交易队列中获取多条交易,并从多条交易中筛选出一个或多个交易关联账户,其中,各线程每获取一条交易,待处理交易队列中移除对应的消息;
步骤3、根据各线程获取多条交易的先后顺序,查询账户LIST是否包含获取的各交易关联账户,若不包含,则将不包含的交易关联账户维护进账户LIST,否则,暂不处理,直至所有各交易关联账户均已查询完成后转到步骤4;
步骤4、各线程判断其维护进账户LIST的各交易关联账户的多条交易的处理逻辑是否正确,若正确,将线程中维护进账户LIST的各交易关联账户的批次交易分别作为一个事务提交到数据库,对数据库进行更新,更新过程中,数据库锁定记录,更新完成解除锁定,并移除账户LIST中已处理的某交易关联账户,并转到步骤5,否则,找到不正确的交易,并返回错误码;
步骤5、各线程判断其获取的交易关系账户是否都维护进账户LIST,若有交易关系账户未维护进账户LIST,转到步骤3,否则,待处理交易队列自行判断其是否为空,若是,处理完成,否则转到步骤2获取下一批交易。
进一步,所述步骤1中的待处理交易队列为数据结构,包括MQ。
进一步,所述步骤2中,两个以上的线程通过锁或标识先后从待处理交易队列中获取多条交易,具体为:线程先来先获取,且一个线程从待处理交易队列中获取完后,下一个线程才能从待处理交易队列中进行获取。
进一步,所述步骤2中,从多条交易中筛选出一个或多个交易关联账户,具体为:从多条交易的报文格式中解析出交易关联账户。
进一步,所述步骤2中,各线程每获取一条交易,待处理交易队列中移除对应的消息,具体为:各线程从待处理消息队列中每获取一个交易都会向待处理消息队列回复一个确认消息,待处理消息队列收到该确认消息后就会将对应交易从待处理消息队列中移除。
本发明同现有技术相比,其有益效果表现在:
一、本发明利用账户筛选方式确保同一账户的交易只被单一线程处理,从而避免数据库锁等待造成的时间浪费及性能瓶颈,大幅提高应用程序处理效率。
二、本发明通过交易合并提交事务的思路减少应用程序与数据库交互次数和时间,降低交互频次,提高交互效率。
三、本发明自适应热点账户交易,不需要事先预知热点账户,不需要提前配置子账户、灵活度高。
四、本发明可推广性强,跨语文、跨平台,不依赖某一特定编程语言或中间件。
附图说明
图1是现有技术中采用挂子账户的示意图;
图2是本发明中的交易关联账户示意图。
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
一种规避数据库锁等待以及事务合并提交的方法,如下步骤:
步骤1、获取待处理交易队列和处理中的账户LIST;待处理交易队列为数据结构,包括MQ。
步骤2、两个以上的线程先后从待处理交易队列中获取多条交易,并从多条交易中筛选出一个或多个交易关联账户,其中,各线程每获取一条交易,待处理交易队列中移除对应的消息;
其中,两个以上的线程通过锁或标识先后从待处理交易队列中获取多条交易,具体为:线程先来先获取,且一个线程从待处理交易队列中获取完后,下一个线程才能从待处理交易队列中进行获取,
从多条交易中筛选出一个或多个交易关联账户,具体为:从多条交易的报文格式中解析出交易关联账户。
各线程每获取一条交易,待处理交易队列中移除对应的消息,具体为:各线程从待处理消息队列中每获取一个交易都会向待处理消息队列回复一个确认消息,待处理消息队列收到该确认消息后就会将对应交易从待处理消息队列中移除。
步骤3、根据各线程获取多条交易的先后顺序,查询账户LIST是否包含获取的各交易关联账户,若不包含,则将不包含的交易关联账户维护进账户LIST,否则,暂不处理,直至所有各交易关联账户均已查询完成后转到步骤4;
步骤4、各线程判断其维护进账户LIST的各交易关联账户的多条交易的处理逻辑是否正确,若正确,将线程中维护进账户LIST的各交易关联账户的批次交易分别作为一个事务提交到数据库,对数据库进行更新,更新过程中,数据库锁定记录,更新完成解除锁定,并移除账户LIST中已处理的某交易关联账户,并转到步骤5,否则,找到不正确的交易,并返回错误码;
步骤5、各线程判断其获取的交易关系账户是否都维护进账户LIST,若有交易关系账户未维护进账户LIST,转到步骤3,否则,待处理交易队列自行判断其是否为空,若是,处理完成,否则转到步骤2获取下一批交易。
实施例1
本实施例采用两个线程进行说明(实际中可采用多线程(线程数大于2),可成倍提高处理效率),具体如下:
Thread1(线程1)从待处理交易队列,如MQ或其他数据结构中拉取一批(数量自定)交易,其中,Thread1每获取一条交易,待处理交易队列中移除对应的消息;Thread1从待处理交易队列中拉取完一次交易后,Thread2(线程2)再从待处理交易队列中拉取一批交易,其中,Thread2每获取一条交易,待处理交易队列中移除对应的消息。
Thread1先从已拉取交易中筛选出交易关联账户,交易关联账户如图2中的account1到account5。并查询处理中的“账户LIST”是否包含account1到account5,并将未在“账户LIST”中的账户维护进处理中的“账户LIST”,此处假设为全否。维护进后,相同账户的交易作为一个事务提交,用于更新数据库:例如拉取了100笔待处理交易,account1关联的交易20笔,account2关联的交易30笔,account3关联的交易10笔,account4关联的交易15笔,account5关联的交易25笔。则预先判断account1的20笔交易的处理逻辑的正确性后,即正确时,将此20笔交易作为一个事务提交到数据库,而不是按顺序把20笔交易作为20个事务提交20次,否则,找到不正确的交易,并返回错误码。从而减少了因事务提交与数据的交互时间。
Thread1将交易关联账户维护进行“账户LIST”后,Thread2(线程2)再从已拉取交易中筛选出交易关联账户,交易关联账户如图2中的account5到account9,并查询account5到account9是否在处理中的账户LIST。假设此时查询到account5(即此账户已在处理相当的交易)仍在处理中的“账户LIST”中,则将account6到account9维护进处理中的“账户LIST”。交易处理逻辑为暂不处理account5的关联交易,因为此时Thread1正在处理account5的交易,即数据库在更新过程中,已经将account5的记录锁定,若此时其他线程也处理account5,则必须等待Thread1释放锁资源,而这种等待造成的时间浪费正是系统并发瓶颈的根源,而是先将account6到account9的关联交易如线程1一样的方式进行合并提交事务方式处理完成。
Thread1每处理完一个交易关联账户的关联交易后,将其从处理中的账户LIST中移除,直到该批次交易处理完成。
而Thread2每处理完一个交易关联账户的关联交易后,将其从处理中的账户LIST中移除,并且要随时查询account5是否在处理中的账户LIST,直到account5已经不在处理中的“账户LIST”中时才将account5维护进处理中账户LIST并按交易合并方式提交事务。
Thread1或Thread2处理完一批次后,重新从待处理的交易队列中拉取一批交易,并重复执行上述处理过程,直至待处理交易处理完成。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。
Claims (5)
1.一种规避数据库锁等待以及事务合并提交的方法,其特征在于,如下步骤:
步骤1、获取待处理交易队列和处理中的账户LIST;
步骤2、两个以上的线程先后从待处理交易队列中获取多条交易,并从多条交易中筛选出一个或多个交易关联账户,其中,各线程每获取一条交易,待处理交易队列中移除对应的交易;
步骤3、根据各线程获取多条交易的先后顺序,查询账户LIST是否包含获取的各交易关联账户,若不包含,则将不包含的交易关联账户维护进账户LIST,否则,暂不处理,直至所有各交易关联账户均已查询完成后转到步骤4;
步骤4、各线程判断其维护进账户LIST的各交易关联账户的多条交易的处理逻辑是否正确,若正确,将线程中维护进账户LIST的各交易关联账户的多条交易分别作为一个事务提交到数据库,对数据库进行更新,更新过程中,数据库锁定记录,更新完成解除锁定,并移除账户LIST中已处理的某交易关联账户,并转到步骤5,否则,找到不正确的交易,并返回错误码;
步骤5、各线程判断其获取的交易关联账户是否都维护进账户LIST,若有交易关联账户未维护进账户LIST,转到步骤3,否则,待处理交易队列自行判断其是否为空,若是,处理完成,否则转到步骤2获取下一批交易。
2.根据权利要求1所述的一种规避数据库锁等待以及事务合并提交的方法,其特征在于:所述步骤1中的待处理交易队列为数据结构,包括MQ。
3.根据权利要求1或2所述的一种规避数据库锁等待以及事务合并提交的方法,其特征在于:两个以上的线程通过锁或标识先后从待处理交易队列中获取多条交易,具体为:线程先来先获取,且一个线程从待处理交易队列中获取完后,下一个线程才能从待处理交易队列中进行获取。
4.根据权利要求1或2所述的一种规避数据库锁等待以及事务合并提交的方法,其特征在于:所述步骤2中,从多条交易中筛选出一个或多个交易关联账户,具体为:从多条交易的报文格式中解析出交易关联账户。
5.根据权利要求1或2所述的一种规避数据库锁等待以及事务合并提交的方法,其特征在于:所述步骤2中,各线程每获取一条交易,待处理交易队列中移除对应的消息,具体为:各线程从待处理消息队列中每获取一个交易都会向待处理消息队列回复一个确认消息,待处理消息队列收到该确认消息后就会将对应交易从待处理消息队列中移除。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910396107.5A CN110109936B (zh) | 2019-05-13 | 2019-05-13 | 一种规避数据库锁等待以及事务合并提交的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910396107.5A CN110109936B (zh) | 2019-05-13 | 2019-05-13 | 一种规避数据库锁等待以及事务合并提交的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110109936A CN110109936A (zh) | 2019-08-09 |
CN110109936B true CN110109936B (zh) | 2020-12-25 |
Family
ID=67489751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910396107.5A Active CN110109936B (zh) | 2019-05-13 | 2019-05-13 | 一种规避数据库锁等待以及事务合并提交的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110109936B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1293501C (zh) * | 2003-01-27 | 2007-01-03 | 精工爱普生株式会社 | 在多线程环境中管理和持久结构相关联的事务处理的方法 |
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN107766127A (zh) * | 2016-08-23 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 事务消息处理方法、装置、设备及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8584124B2 (en) * | 2010-04-20 | 2013-11-12 | Salesforce.Com, Inc. | Methods and systems for batch processing in an on-demand service environment |
US20140279987A1 (en) * | 2013-03-13 | 2014-09-18 | Pablo Chico de Guzman Huerta | Workflow design for long-running distributed operations using no sql databases |
CN108132831A (zh) * | 2016-12-01 | 2018-06-08 | 阿里巴巴集团控股有限公司 | 任务的处理方法和处理装置 |
-
2019
- 2019-05-13 CN CN201910396107.5A patent/CN110109936B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1293501C (zh) * | 2003-01-27 | 2007-01-03 | 精工爱普生株式会社 | 在多线程环境中管理和持久结构相关联的事务处理的方法 |
CN102354289A (zh) * | 2011-09-21 | 2012-02-15 | 苏州大学 | 一种并发事务的调度方法和相关装置 |
CN107766127A (zh) * | 2016-08-23 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 事务消息处理方法、装置、设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110109936A (zh) | 2019-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0702295B1 (en) | System for building optimal commit trees in a distributed transaction system | |
EP2825957B1 (en) | Systems and methods for supporting inline delegation of middle-tier transaction logs to database | |
CN108280150B (zh) | 一种分布式异步业务分发方法及系统 | |
US6961865B1 (en) | Techniques for resuming a transaction after an error | |
CN110196856B (zh) | 一种分布式数据读取方法及装置 | |
CN103514028A (zh) | 一种处理分布式事务的方法和装置 | |
CN111277639B (zh) | 一种保持数据一致性的方法和装置 | |
US8499298B2 (en) | Multiprocessing transaction recovery manager | |
CN107203560B (zh) | 数据库、多数据库操作事务一致性保证方法及系统 | |
CN102073540A (zh) | 分布式事务提交方法和装置 | |
US10318520B2 (en) | System and method for reducing communications overhead in a distributed transactions environment by modifying implementation of the transaction end function | |
US10768974B2 (en) | Specifying an order of a plurality of resources in a transaction according to distance | |
CN110162532B (zh) | 交易数据处理方法和设备 | |
CN111752961A (zh) | 一种数据处理方法及装置 | |
CN110109936B (zh) | 一种规避数据库锁等待以及事务合并提交的方法 | |
CN107678856B (zh) | 一种处理业务实体中增量信息的方法及装置 | |
DE69806065T2 (de) | Vorrichtung, Verfahren und Computerprogramm für Client/Server-Anwendungen mit intelligenter Lokalisierung von Transaktionsobjekten | |
US20220043796A1 (en) | Distributed pessimistic lock based on hbase storage and the implementation method thereof | |
CN110377614B (zh) | 一种分布式环境下的订单处理锁系统 | |
CN115934272A (zh) | 一种联机批量任务处理方法及装置 | |
US20130304715A1 (en) | Systems and methods for providing an automated validity check of transactional data postings | |
US10417038B2 (en) | Batched commit in distributed transactions | |
CN112199401B (zh) | 数据请求处理方法、装置、服务器、系统及存储介质 | |
Fan et al. | 2PC+: A High Performance Protocol for Distributed Transactions of Micro-service Architecture | |
US7240349B2 (en) | Persistent messaging in a transaction processing environment |
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 |