CN106708948A - 一种用主键唯一性实现事务操作的方法及装置 - Google Patents
一种用主键唯一性实现事务操作的方法及装置 Download PDFInfo
- Publication number
- CN106708948A CN106708948A CN201611051471.0A CN201611051471A CN106708948A CN 106708948 A CN106708948 A CN 106708948A CN 201611051471 A CN201611051471 A CN 201611051471A CN 106708948 A CN106708948 A CN 106708948A
- Authority
- CN
- China
- Prior art keywords
- business
- major
- data
- business operation
- uniqueness
- 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
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/2365—Ensuring data consistency and integrity
-
- 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/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种用主键唯一性实现事务操作的方法及装置,该方法包括以下步骤:S1:在数据库中创建一张主键表;S2:提取业务操作中的业务操作数据;S3:对业务操作数据排序,并合并成业务字符组;S4:将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。本发明的方法是抽取业务关键数据产生唯一主键,利用数据库的主键唯一性的特点,避免在高并发环境下由于数据重复更改导致的数据冲突,确保事务数据一致性。本方案并没有使用事务锁,而且并不需要进行额外的查询操作,因此近乎不影响系统性能,也不影响系统的稳定性,适用于高并发、海量数据的业务场景。
Description
技术领域
本发明属于计算机信息技术领域,尤其涉及一种用主键唯一性实现事务操作的方法及装置。
背景技术
在软件开发过程中,按照业务、安全的需求,经常需要系统软件实现业务数据一致,例如余额取款,首先需要确保账户里有足够的余额,才能进行取款操作,否则操作失败。为了保证这种业务数据一致性,系统软件通常会先查询帐户余额,然后再进行业务操作。这过程需要加上事务锁以确保在未完成操作之前,数据不会被其他业务线程修改,避免高并发下的数据冲突。即是先把账户余额加锁,再进行查询、扣款动作,完成操作后再解锁,在这过程中,其他请求必须在解锁后才能操作账户余额,这样利用事务锁来保证数据一致性。
这种方法对于数据量、并发量不大的软件系统,可以很好地解决数据一致性的问题,但是对于数据量大、高并发的系统,就会降低系统性能和稳定性。事务加锁、查询都会增加系统性能的消耗。由于事务锁的特性,在高并发环境下,只接受当前的一个请求,其他请求只能在排队等待,即使在多线程系统中也只能是排队轮候。而且系统中大量使用事务锁,则容易引发死锁的异常情况,增加系统不稳定因素。
在检索到的申请号为201310650884.0的文件中,其公开了“主备数据库数据一致性核查备份方法及其系统”,其原理是利用MD5哈希每条数记录,以哈希值作为依据对比数据是不是发生更改,以便只同步已更改的数据,用于数据主从复制,也则是主要用于数据备份,并不涉及具体的系统业务的处理。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种用主键唯一性实现事务操作的方法,其能通过主键来保证数据一致性,并且能够增加系统的稳定性。
本发明的目的之二在于提供一种用主键唯一性实现事务操作的装置,其能通过主键来保证数据一致性,并且能够增加系统的稳定性。
本发明的目的之一采用以下技术方案实现:
一种用主键唯一性实现事务操作的方法,包括以下步骤:
S1:在数据库中创建一张主键表;
S2:提取业务操作中的业务操作数据;
S3:对业务操作数据排序,并合并成业务字符组;
S4:将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。
优选的,在步骤S3与步骤S4之间还包括以下步骤:
步骤S31:通过哈希算法对该业务字符组进行哈希值转换。其能进一步降低主键索引容量,减少索引检索的性能消耗。
优选的,所述哈希算法为MD5算法。
本发明的目的之二采用以下技术方案实现:
一种用主键唯一性实现事务操作的装置,包括以下模块:
主键表创建模块:用于在数据库中创建一张主键表;
业务数据提取模块:用于提取业务操作中的业务操作数据;
合并字符模块:用于对业务操作数据排序,并合并成业务字符组;
插入判断模块:用于将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。
优选的,在合并字符模块和插入判断模块之间还包括以下模块:
哈希值转换模块:用于通过哈希算法对该业务字符组进行哈希值转换。其能进一步降低主键索引容量,减少索引检索的性能消耗。
优选的,所述哈希算法为MD5算法。
相比现有技术,本发明的有益效果在于:
本发明的方法是抽取业务关键数据产生唯一主键,利用数据库的主键唯一性的特点,避免在高并发环境下由于数据重复更改导致的数据冲突,确保事务数据一致性。本方案并没有使用事务锁,而且并不需要进行额外的查询操作,因此近乎不影响系统性能,也不影响系统的稳定性,适用于高并发、海量数据的业务场景。
附图说明
图1为本发明一种用主键唯一性实现事务操作的方法的流程图;
图2为本发明一种用主键唯一性实现事务操作的装置的结构图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
如图1所示,本发明提供了一种用主键唯一性实现事务操作的方法,包括以下步骤:
S1:在数据库中创建一张主键表;
S2:提取业务操作中的业务操作数据;
S3:对业务操作数据排序,并合并成业务字符组;在整个流程中,并不需要使用事务锁,只需要将关键的业务数据组合成主键即可;
S31:通过哈希算法对该业务字符组进行哈希值转换;所述哈希算法为MD5算法;其中将关键业务数据hash是为了转换成具有唯一性、长度固定在16位的主键字符,以降低主键索引的容量,减少索引带来的性能的消耗,相对于本方案,hash算法的选用主要考虑两个因素:性能和摘要长度,因此性能高且摘要字符少的MD5算法更加的适用;
S4:将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。本发明方法适用于所有有唯一主键功能的数据库,包括主流的关系型数据库、nosql数据库。
本方法的原理是抽取业务操作的关键数据,组合成字符型主键值,为了提高主键索引的性能,采用哈希算法,将主键值Hash成16位字符的关键字作为数据表的主键,插入到主键数据表中;由于数据库的表主键具有唯一性,即主键值不能重复,而且哈希值具有代表唯一性,则不同的业务关键数据哈希值不相同,如果不同的哈希值插入到主键数据表中,则不会引发主键重复的异常,相反,如果插入了相同的哈希值则会引发主键异常,表明数据重复或数据冲突,这样利用数据库的主键唯一性,判断业务操作是否唯一,避免数据冲突,保证事务数据一致。
本发明方法的适用场景可以有以下场景:第一、账号注册,防止重名注册,其中hash关键数据为用户账号;第二、消息发送,防止相同短信、邮件重复发送,其中hash关键数据为接收人、消息内容和时间;第三、一次限购,防止超额购买,hash关键数据为用户账号和商品编号;第四、余额取款,hash关键数据账号ID、余额和时间。在此仅仅是列举出可以使用本发明方法的场景,并不限于此。
在本实施例中,再对余额取款来进行进一步的详细说明:
S1:在数据库中额外创建一张主键表,字段中必须包括字符型唯一主键,数据结果大致如下:KeyTable{keyid[primary,char(16)],createdate[datetime]};
S2:在具体业务请求流程中,程序提取业务关键的数据,例如余额取款中,关键数据如下:余额、账号ID和时间;
S3:对关键数据排序、合并成字符,如:账号ID+余额+时间;
S4:对合并后的字符转为Hash值,如093dd0fec383a9d9;
S5:将Hash值插入到主键表中,如果插入成功,则不存在重复主键,表示事物数据一致,可以继续业务流程操作,如果数据库跑出主键重复异常,则表明相同账号相同余额在一分钟内重复提款2次或以上,余额数据冲突,存在交易风险,取款流程应该中断返回。
如图2所示,本发明提供了一种用主键唯一性实现事务操作的装置,包括以下模块:
主键表创建模块:用于在数据库中创建一张主键表;
业务数据提取模块:用于提取业务操作中的业务操作数据;
合并字符模块:用于对业务操作数据排序,并合并成业务字符组;
哈希值转换模块:用于通过哈希算法对该业务字符组进行哈希值转换;所述哈希算法为MD5算法;
插入判断模块:用于将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (6)
1.一种用主键唯一性实现事务操作的方法,其特征在于,包括以下步骤:
S1:在数据库中创建一张主键表;
S2:提取业务操作中的业务操作数据;
S3:对业务操作数据排序,并合并成业务字符组;
S4:将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。
2.如权利要求1所述的用主键唯一性实现事务操作的方法,其特征在于,在步骤S3与步骤S4之间还包括以下步骤:
步骤S31:通过哈希算法对该业务字符组进行哈希值转换。
3.如权利要求2所述的用主键唯一性实现事务操作的方法,其特征在于,所述哈希算法为MD5算法。
4.一种用主键唯一性实现事务操作的装置,其特征在于,包括以下模块:
主键表创建模块:用于在数据库中创建一张主键表;
业务数据提取模块:用于提取业务操作中的业务操作数据;
合并字符模块:用于对业务操作数据排序,并合并成业务字符组;
插入判断模块:用于将业务字符组插入主键表中,并判断是否插入成功,如果插入成功,则执行相对应的业务操作,如果插入失败,则停止业务操作。
5.如权利要求4所述的用主键唯一性实现事务操作的装置,其特征在于,在合并字符模块和插入判断模块之间还包括以下模块:
哈希值转换模块:用于通过哈希算法对该业务字符组进行哈希值转换。
6.如权利要求5所述的用主键唯一性实现事务操作的装置,其特征在于,所述哈希算法为MD5算法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611051471.0A CN106708948A (zh) | 2016-11-24 | 2016-11-24 | 一种用主键唯一性实现事务操作的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611051471.0A CN106708948A (zh) | 2016-11-24 | 2016-11-24 | 一种用主键唯一性实现事务操作的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106708948A true CN106708948A (zh) | 2017-05-24 |
Family
ID=58933899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611051471.0A Pending CN106708948A (zh) | 2016-11-24 | 2016-11-24 | 一种用主键唯一性实现事务操作的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708948A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108596587A (zh) * | 2018-04-12 | 2018-09-28 | 乐蜜有限公司 | 提现审核方法、装置、电子设备、程序产品和存储介质 |
CN112256480A (zh) * | 2020-10-22 | 2021-01-22 | 全知科技(杭州)有限责任公司 | 一种数据重复请求控制业务正确的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708416A (zh) * | 2012-05-10 | 2012-10-03 | 华为软件技术有限公司 | 一种用户订购业务的方法、设备和系统 |
CN104268272A (zh) * | 2014-10-14 | 2015-01-07 | 青岛海尔软件有限公司 | 一种数据唯一性检查方法及装置 |
CN105354328A (zh) * | 2015-11-25 | 2016-02-24 | 南京莱斯信息技术股份有限公司 | 一种解决NoSQL数据库并发访问冲突的系统及方法 |
CN105808559A (zh) * | 2014-12-29 | 2016-07-27 | 深圳市金蝶中间件有限公司 | 处理数据冲突的方法及装置 |
-
2016
- 2016-11-24 CN CN201611051471.0A patent/CN106708948A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708416A (zh) * | 2012-05-10 | 2012-10-03 | 华为软件技术有限公司 | 一种用户订购业务的方法、设备和系统 |
CN104268272A (zh) * | 2014-10-14 | 2015-01-07 | 青岛海尔软件有限公司 | 一种数据唯一性检查方法及装置 |
CN105808559A (zh) * | 2014-12-29 | 2016-07-27 | 深圳市金蝶中间件有限公司 | 处理数据冲突的方法及装置 |
CN105354328A (zh) * | 2015-11-25 | 2016-02-24 | 南京莱斯信息技术股份有限公司 | 一种解决NoSQL数据库并发访问冲突的系统及方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108596587A (zh) * | 2018-04-12 | 2018-09-28 | 乐蜜有限公司 | 提现审核方法、装置、电子设备、程序产品和存储介质 |
CN112256480A (zh) * | 2020-10-22 | 2021-01-22 | 全知科技(杭州)有限责任公司 | 一种数据重复请求控制业务正确的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108804112B (zh) | 一种区块链落账处理方法及系统 | |
US10678808B2 (en) | Eager replication of uncommitted transactions | |
CN107977376B (zh) | 分布式数据库系统及事务处理方法 | |
US20220253548A1 (en) | Method and system for a distributed computing system | |
EP3120261B1 (en) | Dependency-aware transaction batching for data replication | |
CN103885986B (zh) | 主备数据库同步的方法和装置 | |
CN105608086B (zh) | 分布式数据库系统的事务处理方法及装置 | |
US7376675B2 (en) | Simulating multi-user activity while maintaining original linear request order for asynchronous transactional events | |
EP2825958B1 (en) | Systems and methods for supporting transaction recovery based on a strict ordering of two-phase commit calls | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
CN101350022B (zh) | 基于数据库逻辑锁的变更处理方法 | |
CN111522631A (zh) | 分布式事务处理方法、装置、服务器及介质 | |
CN109643310A (zh) | 用于数据库中数据重分布的系统和方法 | |
KR20040074627A (ko) | 복제 명령 분배 시스템 및 방법 | |
EP4239492A1 (en) | Object processing method and apparatus, computer device, and storage medium | |
CN106708948A (zh) | 一种用主键唯一性实现事务操作的方法及装置 | |
US20230394027A1 (en) | Transaction execution method, computing device, and storage medium | |
CN106959989A (zh) | 主备数据库的同步方法及装置 | |
CN111127088B (zh) | 实现最终一致性的方法、装置、计算机设备及存储介质 | |
CN108984660A (zh) | 一种MySQL数据库主从同步数据去重方法 | |
CN112035503B (zh) | 交易数据更新方法及装置 | |
CN115329395A (zh) | 数据库的数据处理方法、装置、系统、设备及存储介质 | |
CN116974983A (zh) | 数据处理方法、装置、计算机可读介质及电子设备 | |
CN113391933A (zh) | 一种处理资金的方法 | |
CN111913973A (zh) | 一种数据同步方法、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170524 |
|
RJ01 | Rejection of invention patent application after publication |