CN114995998A - 一种准实时记账方法、装置、存储介质 - Google Patents
一种准实时记账方法、装置、存储介质 Download PDFInfo
- Publication number
- CN114995998A CN114995998A CN202210469811.0A CN202210469811A CN114995998A CN 114995998 A CN114995998 A CN 114995998A CN 202210469811 A CN202210469811 A CN 202210469811A CN 114995998 A CN114995998 A CN 114995998A
- Authority
- CN
- China
- Prior art keywords
- accounting
- temporary table
- thread
- quasi
- real
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
Abstract
本发明涉及一种准实时记账方法,该方法包括:创建临时表;接收记账请求时,启动临时表***线程;在临时表***线程中,在创建的临时表中***需要记账的信息,完成临时表***后启动记账线程;在记账线程中,采用redis分布式锁进行记账操作锁定与记账操作。与现有技术相比,本发明解决了高并发场景下的记账错误、重复记账问题,同时避免了现有的锁表操作导致数据库死锁问题,并提高了查询效率。
Description
技术领域
本发明涉及一种记账方法,尤其是涉及一种准实时记账方法、装置、存储介质。
背景技术
目前,银行财务***记录科目账和商户账使用的是数据库表记录期初金额、借方金额、贷方金额和期末金额。每次新增或删除记录时先查询此科目或商户上一条记录的期末余额,然后在此基础上进行新增或删除操作。
在高并发的情况下,假设有a和b同时***一条记录,那么它们同时查询上一条记录c的期末余额(假设为100)。假设b在a后面***记录,b应该取值a的期末余额,但是现在b的期初金额取的是c的期末余额100,进而记账的连续性正确性被破坏,导致记账错误。目前技术解决方案是在程序查询期末余额时,将表锁住直到业务完成时再释放锁。此种通过锁表操作进行记账的操作可能引发数据库死锁问题,并导致与科目账、商户账相关的功能查询效率大大降低,甚至导致查询超时,严重影响客户体验。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种准实时记账方法,解决高并发场景下的记账错误、重复记账问题,同时避免现有的锁表操作导致数据库死锁问题,提高查询效率。
本发明的目的可以通过以下技术方案来实现:
一种准实时记账方法,该方法包括:
创建临时表;
接收记账请求时,启动临时表***线程;
在临时表***线程中,在创建的临时表中***需要记账的信息,完成临时表***后启动记账线程;
在记账线程中,采用redis分布式锁进行记账操作锁定与记账操作。
优选地,所述的临时表中存储的信息包括科目、商户、金额、借贷方向、公式规则、类型、状态信息。
优选地,多条记账请求并发时,分别对应触发一条临时表***线程,多条临时表***线程同步运行,每条临时表***线程完成临时表信息***后对应启动一条记账线程。
优选地,多条记账线程并发时,通过redis分布式锁控制多条记账线程的并发运行。
优选地,当多条记账线程并发运行时,redis分布式锁仅锁定其中一条记账线程中的记账操作,基于redis中的记账执行状态字段触发扫描临时表进行记账处理。
优选地,记账线程的具体执行过程包括:
S1、启动记账线程后,redis分布式锁进行记账操作锁定操作;
S2、判断记账操作是否锁定成功,若是执行S3,否则将redis中记账执行状态字段改为“未执行”,结束当前线程;
S3、将redis中记账执行状态字段改为“已执行”;
S4、扫描临时表进行记账处理;
S5、记账操作完成后,检查redis中记账执行状态字段是否为“已执行”,若是则释放redis分布式锁对记账操作的锁定并结束当前线程,否则循环执行步骤S3~S5。
优选地,步骤S4具体包括:扫描临时表,获取临时表中当前需要记账的信息,并修改对应的状态信息,进行记账处理。
优选地,当临时表中有多需要记账的信息条目时,同步获取所有记账信息条目,修改所有获取的记账信息条目的状态信息,对记账信息条目逐条进行记账处理。
一种准实时记账装置,包括存储器和处理器,所述的存储器用于存储计算机程序,所述的处理器用于当执行所述计算机程序时实现所述的准实时记账方法。
一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的准实时记账方法。
与现有技术相比,本发明具有如下优点:
本发明通过临时表***线程和记账线程两类线程的划分,对记账逻辑进行拆分,优化记账流程,临时表***线程可并发运行,同时利用redis分布式锁实现数据原子化处理,redis分布式锁锁定记账操作,并非锁定数据库中的记账表,通过本发明的方法一方面解决了高并发场景下的记账错误、重复记账问题,同时避免了现有的锁表操作导致数据库死锁问题,并提高了查询效率。
附图说明
图1为本发明一种准实时记账方法的流程框图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。注意,以下的实施方式的说明只是实质上的例示,本发明并不意在对其适用物或其用途进行限定,且本发明并不限定于以下的实施方式。
实施例1
本发明在现有技术方案上对记账方式进行了优化。首先***新增一张临时表,用于保存科目、商户、金额、借贷方向、公式规则、类型(新增、删除)、状态(初始、正式)信息。然后在新增或删除商户账、科目账时,往临时表中***相关数据,最后通过多线程触发扫描临时表,并通过redis分布式锁控制程序并发运行,对需要新增或删除的商户账或科目账统一进行记账处理。
具体地,如图1所示,本实施例提供一种准实时记账方法,该方法包括:
创建临时表;
接收记账请求时,启动临时表***线程;
在临时表***线程中,在创建的临时表中***需要记账的信息(需要新增或删除的商户账、科目账相关数据),完成临时表***后启动记账线程;
在记账线程中,采用redis分布式锁进行记账操作锁定与记账操作。
临时表中存储的信息包括科目、商户、金额、借贷方向、公式规则、类型(新增、删除)、状态信息(初始、正式)。
多条记账线程并发时,分别对应触发一条临时表***线程,多条临时表***线程同步运行,每条临时表***线程完成临时表信息***后对应启动一条记账线程。同时,通过redis分布式锁控制多条记账线程的并发运行。具体地:当多条记账线程并发运行时,redis分布式锁仅锁定其中一条记账线程中的记账操作,基于redis中的记账执行状态字段触发扫描临时表进行记账处理。
记账线程的具体执行过程包括:
S1、启动记账线程后,redis分布式锁进行记账操作锁定操作;
S2、判断记账操作是否锁定成功,若是执行S3,否则说明当前有记账操作正在执行,将redis中记账执行状态字段改为“未执行”,结束当前线程;
S3、将redis中记账执行状态字段改为“已执行”;
S4、扫描临时表进行记账处理,具体地:
扫描临时表,获取临时表中当前需要记账的信息,并修改对应的状态信息(标记为已进行记账处理),进行记账处理,当临时表中有多需要记账的信息条目时,同步获取所有记账信息条目,修改所有获取的记账信息条目的状态信息(标记为已进行记账处理),对记账信息条目逐条进行记账处理,其中,记账处理方式与现有的记账方式一致,首先在数据库中进行查询,此科目或商户上一条记录的期末余额,然后在此基础上进行新增或删除操作;
S5、记账操作完成后,检查redis中记账执行状态字段是否为“已执行”,若是则释放redis分布式锁对记账操作的锁定并结束当前线程,否则循环执行步骤S3~S5。
一下以一具体实例进行说明:
如同时接受到a、b两条记账请求,启动临时表***线程a和临时表***线程b,两条临时表***线程并发运行,在临时表中分别***对应的需要记账的信息,包括记账信息a和记账信息b,此时两条记账信息的状态均是未完成记账处理,然后完成临时表信息***后分别启动记账线程a和记账线程b,通过redis分布式锁分配记账操作锁,假设记账线程a完成了当前记账操作的锁定,此时记账线程b将redis中记账执行状态字段改为“未执行”,结束记账线程b,于此同时记账线程a将redis中记账执行状态字段改为“已执行”,记账线程a进行记账操作:首先,扫描临时表,获取临时表中所有未完成记账处理的记账信息条目,包括记账信息a和记账信息b,然后进行记账处理,记账处理方式与现有的记账方式一致,首先在数据库中进行查询,此科目或商户上一条记录的期末余额,然后在此基础上进行新增或删除操作,记账操作完成后,检查redis中记账执行状态字段是否为“已执行”,若是则释放redis分布式锁对记账操作的锁定并结束当前线程,否则,说明临时表中仍有未记账处理的记账信息(如,在上述记账线程a进行记账处理过程中有新的记账请求c,启动临时表***线程c以及对应的记账线程c,由于此时redis分布式锁仍未释放,则记账线程c无法成功锁定当前线程的记账操作,因此会修改redis中记账执行状态字段是为“未执行”),此时记账线程a需要将redis中记账执行状态字段改为“已执行”,循环进行上述记账操作过程。
本发明通过临时表***线程和记账线程两类线程的划分,对记账逻辑进行拆分,优化记账流程,临时表***线程可并发运行,同时利用redis分布式锁实现数据原子化处理,redis分布式锁锁定记账操作,并非锁定数据库中的记账表,通过本发明的方法一方面解决了高并发场景下的记账错误、重复记账问题,同时避免了现有的锁表操作导致数据库死锁问题并提高了查询效率。
实施例2
本实施例提供一种准实时记账装置,包括存储器和处理器,存储器用于存储计算机程序,处理器用于当执行所述计算机程序时实现实施例1中所述的准实时记账方法,准实时记账方法在实施例1中已经详细说明,本实施例不再赘述。
实施例3
本实施例提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现实施例1中所述的准实时记账方法,准实时记账方法在实施例1中已经详细说明,本实施例不再赘述。
上述实施方式仅为例举,不表示对本发明范围的限定。这些实施方式还能以其它各种方式来实施,且能在不脱离本发明技术思想的范围内作各种省略、置换、变更。
Claims (10)
1.一种准实时记账方法,其特征在于,该方法包括:
创建临时表;
接收记账请求时,启动临时表***线程;
在临时表***线程中,在创建的临时表中***需要记账的信息,完成临时表***后启动记账线程;
在记账线程中,采用redis分布式锁进行记账操作锁定与记账操作。
2.根据权利要求1所述的一种准实时记账方法,其特征在于,所述的临时表中存储的信息包括科目、商户、金额、借贷方向、公式规则、类型、状态信息。
3.根据权利要求1所述的一种准实时记账方法,其特征在于,多条记账请求并发时,分别对应触发一条临时表***线程,多条临时表***线程同步运行,每条临时表***线程完成临时表信息***后对应启动一条记账线程。
4.根据权利要求3所述的一种准实时记账方法,其特征在于,多条记账线程并发时,通过redis分布式锁控制多条记账线程的并发运行。
5.根据权利要求4所述的一种准实时记账方法,其特征在于,多条记账请求并发时,当多条记账线程并发运行时,redis分布式锁仅锁定其中一条记账线程中的记账操作,基于redis中的记账执行状态字段触发扫描临时表进行记账处理。
6.根据权利要求5所述的一种准实时记账方法,其特征在于,记账线程的具体执行过程包括:
S1、启动记账线程后,redis分布式锁进行记账操作锁定操作;
S2、判断记账操作是否锁定成功,若是执行S3,否则将redis中记账执行状态字段改为“未执行”,结束当前线程;
S3、将redis中记账执行状态字段改为“已执行”;
S4、扫描临时表进行记账处理;
S5、记账操作完成后,检查redis中记账执行状态字段是否为“已执行”,若是则释放redis分布式锁对记账操作的锁定并结束当前线程,否则循环执行步骤S3~S5。
7.根据权利要求6所述的一种准实时记账方法,其特征在于,步骤S4具体包括:扫描临时表,获取临时表中当前需要记账的信息,并修改对应的状态信息,进行记账处理。
8.根据权利要求7所述的一种准实时记账方法,其特征在于,当临时表中有多需要记账的信息条目时,同步获取所有记账信息条目,修改所有获取的记账信息条目的状态信息,对记账信息条目逐条进行记账处理。
9.一种准实时记账装置,其特征在于,包括存储器和处理器,所述的存储器用于存储计算机程序,所述的处理器用于当执行所述计算机程序时实现如权利要求1~8任一项所述的准实时记账方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1~8任一项所述的准实时记账方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210469811.0A CN114995998A (zh) | 2022-04-28 | 2022-04-28 | 一种准实时记账方法、装置、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210469811.0A CN114995998A (zh) | 2022-04-28 | 2022-04-28 | 一种准实时记账方法、装置、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114995998A true CN114995998A (zh) | 2022-09-02 |
Family
ID=83025805
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210469811.0A Pending CN114995998A (zh) | 2022-04-28 | 2022-04-28 | 一种准实时记账方法、装置、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114995998A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115860968A (zh) * | 2022-12-14 | 2023-03-28 | 中电金信软件(上海)有限公司 | 记账任务的批量处理方法、装置、电子设备及存储介质 |
-
2022
- 2022-04-28 CN CN202210469811.0A patent/CN114995998A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115860968A (zh) * | 2022-12-14 | 2023-03-28 | 中电金信软件(上海)有限公司 | 记账任务的批量处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9756469B2 (en) | System with multiple conditional commit databases | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
KR101203297B1 (ko) | 직접 업데이트 소프트웨어 트랜잭션 메모리 | |
CN107608773B (zh) | 任务并发处理方法、装置及计算设备 | |
WO2021027956A1 (zh) | 一种基于区块链***的交易处理方法及装置 | |
US20070239751A1 (en) | Generic database manipulator | |
US8825615B2 (en) | Simplifying implementation of custom atomic transactions in a programming environment | |
KR100781515B1 (ko) | 트랜잭션 처리를 위한 로그 정보 관리 시스템 및 방법 | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
US7958149B2 (en) | Computer program and product for append mode insertion of rows into tables in database management systems | |
US20110145201A1 (en) | Database mirroring | |
CN101350022B (zh) | 基于数据库逻辑锁的变更处理方法 | |
CN114995998A (zh) | 一种准实时记账方法、装置、存储介质 | |
CN109446258A (zh) | 一种分布式数据存储方法及*** | |
US20050071383A1 (en) | Efficient deletion of archived data | |
US20170177615A1 (en) | TRANSACTION MANAGEMENT METHOD FOR ENHANCING DATA STABILITY OF NoSQL DATABASE BASED ON DISTRIBUTED FILE SYSTEM | |
CN112035503B (zh) | 交易数据更新方法及装置 | |
US6556994B1 (en) | Method and system for improving concurrency through early release of unnecessary locks | |
US20080082533A1 (en) | Persistent locks/resources for concurrency control | |
CN114489480A (zh) | 高并发存储数据的方法及*** | |
CN113468150A (zh) | 一种支付签约数据的水平切分扩容与迁移方法 | |
CN111444214A (zh) | 一种大规模数据和工业监控内存数据库处理的方法及装置 | |
WO2024109415A1 (zh) | 一种数据库重分布的方法、***、设备集群及存储介质 | |
JPH10232809A (ja) | トランザクション処理システム | |
US8250575B2 (en) | Method and system for managing transactions utilizing a basis memory and a transaction memory |
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 |