CN100365632C - 实现内存数据和数据库数据事务一致性的处理方法 - Google Patents
实现内存数据和数据库数据事务一致性的处理方法 Download PDFInfo
- Publication number
- CN100365632C CN100365632C CNB2006100663838A CN200610066383A CN100365632C CN 100365632 C CN100365632 C CN 100365632C CN B2006100663838 A CNB2006100663838 A CN B2006100663838A CN 200610066383 A CN200610066383 A CN 200610066383A CN 100365632 C CN100365632 C CN 100365632C
- Authority
- CN
- China
- Prior art keywords
- data
- transaction
- database
- internal memory
- issued transaction
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种实现内存数据与数据库数据事务一致性的处理方法,包括:1.当内存和数据库在开始事务时,对内存和数据库的事务处理对象加锁;2.生成本次事务的唯一事务流水号,将该流水号和事务类型记录在内存和数据库的事务日志中;3.对内存中的数据进行事务处理,并记录内存变更日志;4.利用内存数据更新数据库数据;5.在数据库的事务日志中记录本次数据库事务处理成功,并解除数据库事务处理对象的锁;6.解除内存事务处理对象的锁。通过本发明提供的方法,简化了利用内存加快业务处理速度的应用程序的复杂度,并在异常发生时由应用程序自动恢复内存数据,尤其是在发生应用程序不可控的异常时,保持内存数据与数据库数据的一致性。
Description
技术领域
本发明涉及一种内存数据事务处理的方法,尤其是发生应用程序不可控制的异常情况时,仍能自动保持内存数据的事务完整性的方法。
背景技术
对于大型且实时性要求较高的数据库应用系统,在数据的处理过程中,利用共享内存来缓存数据,以加速业务处理速度。由于内存相比硬盘等外存在存取速度等方面的巨大优势,采用内存缓存技术会极大提高业务处理速度。这种处理方法要求在数据库事务的处理过程中,内存中的数据与数据库中数据要保持一致性。
目前现有的实现内存数据与数据库数据事务一致性的处理方法如下:内存与数据库均开始事务;应用程序访问内存数据,更新内存中的数据,并在内存中记录数据变更日志;当对内存中的数据完成业务处理后,利用内存数据更新数据库数据;当数据库数据更新完成后,提交数据库事务;然后清理内存变更日志,并提交内存数据。
在上述过程中,应用程序检测到处理发生错误时,首先进行数据库事务的回退,再利用内存变更日志回退内存数据,保证事务的完整性。
现有技术的缺点:
在现有技术中,事务完全由应用程序控制,在发生应用可控的异常时,事务可以得到较好的保证,但在发生应用无法控制的异常时,如进程被强行终止等,由于应用没有机会进行异常处理,导致内存与数据库数据的不同步,且应用程序自身不了解数据库事务的完成情况,难以对异常自动处理,一般需人工干预恢复内存与数据库数据的同步。如果应用是多层系统的中间层服务,由于事务通常由客户端控制,无法使内存与数据库发生不同步时自动恢复内存数据。
发明内容
本发明的目的是针对上述现有技术中实现内存数据与数据库数据事务一致性的处理方法存在的不足,提供一种实现内存数据与数据库数据事务一致性的处理方法,通过在事务处理过程中对内存和数据库的事务处理对象进行加锁,并记录事务处理的流水号,使得在发生应用程序不可控的异常时,可以根据数据库事务的完成情况,自动的恢复内存中的数据,保持内存数据与数据库数据的一致性。
为了实现上述发明目的,本发明提供了一种实现内存数据与数据库数据事务一致性的处理方法,包括如下步骤:
步骤1、当内存和数据库在开始事务时,对内存和数据库的事务处理对象加锁;
步骤2、生成本次事务的唯一事务流水号,将该流水号和事务类型记录在内存和数据库的事务日志中;
步骤3、对内存中的数据进行事务处理,并记录内存变更日志;
步骤4、当完成对内存中的数据进行事务处理后,利用内存数据更新数据库数据;
步骤5、当数据库数据更新完成后,在数据库的事务日志中记录本次数据库事务处理成功,并解除数据库事务处理对象的锁;
步骤6、解除内存事务处理对象的锁。
通过本发明提供的方法,不仅可以使内存数据和数据库数据保持同步,简化利用内存加快业务处理速度的应用程序的编程复杂度,还可以在异常发生时由应用程序自动恢复内存数据,尤其是在发生应用程序不可控的异常时,保持内存数据与数据库数据的一致性。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1为本发明的实现内存数据与数据库数据事务一致性的处理方法的具体实施例的流程图。
具体实施方式
内存数据来源于数据库表,为了便于内存数据的访问和控制,按数据类型分为键值表和数据表。键值表存放业务对象的关键信息,如银行系统的储蓄账号、电信运营系统的用户号等。为加快键值表访问速度,可以将键值表组织成平衡二叉树、哈希表、键树等结构。数据表存放业务对象对应的各类数据,通过键值表可快速访问相关数据。
键值表如下所示:
序号 | 名称 | 说明 |
1 | 键值 | 事务对象的关键值 |
2 | 加锁标志 | 表示该内存对象是否已被锁定,提供行级加锁功能,便于多个进程并发访问统一块内存数据。为保证加锁和解锁访问的完整性,对加锁标志的读取和更改应使用操作系统提供的原子操作方法。 |
3 | 事务类型 | 当前受理事务的类型 |
4 | 事务流水号 | 每次事务受理产生唯一的流水号 |
5 | 事务受理时间 | |
6 | 数据表1索引 | 定位数据 |
7 | 数据表2索引 | 定位数据 |
数据表结构依据具体存储数据而定,可以组织成单向或双向链表。
参见图1,其为本发明的实现内存数据与数据库数据事务一致性的处理方法的具体实施例的流程图,包括如下步骤:
步骤101、当内存和数据库在开始事务时,对内存和数据库的事务处理对象加锁;其中事务处理对象为数据的关键信息,例如:如银行的储蓄帐号和电信运营商的交费帐号等,并且事务锁是独占性的。
步骤102、生成本次事务的唯一事务流水号,将该流水号和事务类型记录在内存和数据库的事务日志中;
步骤103、对内存中的数据进行事务处理,并记录内存变更日志;
步骤104、当完成对内存中的数据进行事务处理后,利用内存数据更新数据库数据;
步骤105、当数据库数据更新完成后,在数据库的事务日志中记录本次数据库事务处理成功,并解除数据库事务处理对象的锁;
步骤106、解除内存事务处理对象的锁。在解除内存事务处理对象的锁后还可以包括清理内存变更日志的操作。
如果在上述的事务处理的过程中,在应用程序可控的范围内发生异常,如更新数据库失败等,则内存应用根据内存变更日志恢复内存中的数据,并利用数据库事务回滚机制恢复数据库数据。
如果在应用程序未知或不可控范围内发生异常,如进程被强行终止等,当该事务处理对象再次接受业务处理而进行加锁时,如果对数据库的事务处理对象加锁失败,表示事务处理对象正在被其他事务处理,则等待一定时间后重试加锁或报加锁失败返回。重试加锁成功则继续进行事务处理。
如果内存的事务处理对象加锁失败,则利用内存中记录的上次事务类型和事务流水号,查询数据库的事务日志上次事务处理的日志,判断上次数据库的事务处理是否成功,如果上次数据库的事务处理成功,则表示上次内存数据处理成功完成,对内存事务处理对象重新加锁,然后继续进行事务处理;如果上次数据库事务处理失败,则表示内存中数据有与数据库中的数据不一致的可能性,利用数据库中的数据恢复内存中的数据,恢复后对所述内存的事务处理对象重新加锁,继续进行事务处理。
本发明具有如下有益效果:
减少了现有技术中必须的内存提交步骤,保证了内存和数据库数据的一致性。并能在异常发生时,由内存应用自动重新同步内存和数据库的数据,尤其是在发生应用程序不可控的异常时,保持内存数据与数据库数据的一致性。而其他利用内存应用的应用程序无需对内存事务进行任何附加处理,从而实现内存事务的透明管理,扩展了内存缓存技术的适用领域。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
Claims (5)
1.一种实现内存数据和数据库数据事务一致性的处理方法,其特征在于包括如下步骤:
步骤1、当内存和数据库在开始事务时,对内存和数据库的事务处理对象加锁;
步骤2、生成本次事务的唯一事务流水号,将该流水号和事务类型记录在内存和数据库的事务日志中;
步骤3、对内存中的数据进行事务处理,并记录内存变更日志;
步骤4、当完成对内存中的数据进行事务处理后,利用内存数据更新数据库数据;
步骤5、当数据库数据更新完成后,在数据库的事务日志中记录本次数据库事务处理成功,并解除数据库事务处理对象的锁;
步骤6、解除内存事务处理对象的锁。
2.根据权利要求1所述的方法,其特征在于在所述步骤6中,在解除内存事务处理对象的锁后还包括清理内存变更日志的操作。
3.根据权利要求1所述的方法,其特征在于如果在事务处理的过程中,在应用程序可控的范围内发生异常,则根据内存变更日志恢复内存中的数据,并利用数据库事务回滚机制恢复数据库数据。
4.根据权利要求1所述的方法,其特征在于如果对数据库的事务处理对象加锁失败,则等待后重试加锁或报加锁失败返回。
5.根据权利要求1所述的方法,其特征在于在所述步骤1中,如果内存的事务处理对象加锁失败,则利用内存中记录的上次事务类型和事务流水号,查询数据库的事务日志上次事务处理的日志,判断上次数据库的事务处理是否成功,如果上次数据库的事务处理成功,则对所述内存的事务处理对象重新加锁,然后继续进行事务处理;如果上次数据库事务处理失败,则利用数据库中的数据恢复内存中的数据,恢复后对所述内存的事务处理对象重新加锁,继续进行事务处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100663838A CN100365632C (zh) | 2006-04-05 | 2006-04-05 | 实现内存数据和数据库数据事务一致性的处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100663838A CN100365632C (zh) | 2006-04-05 | 2006-04-05 | 实现内存数据和数据库数据事务一致性的处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1858745A CN1858745A (zh) | 2006-11-08 |
CN100365632C true CN100365632C (zh) | 2008-01-30 |
Family
ID=37297654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100663838A Active CN100365632C (zh) | 2006-04-05 | 2006-04-05 | 实现内存数据和数据库数据事务一致性的处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100365632C (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101089857B (zh) * | 2007-07-24 | 2011-05-11 | 中兴通讯股份有限公司 | 一种内存数据库事务管理方法及系统 |
CN101364217B (zh) * | 2007-08-08 | 2011-06-22 | 华为技术有限公司 | 数据库中数据维护方法、设备及其系统 |
CN101136783B (zh) * | 2007-10-15 | 2010-06-02 | 中兴通讯股份有限公司 | 一种网管系统配置数据的备份、恢复方法及装置 |
CN101699412B (zh) * | 2009-10-15 | 2012-02-22 | 清华大学 | 一种计算机事务存储方法 |
CN102693520A (zh) * | 2011-03-24 | 2012-09-26 | 苏州乐盈科技有限公司 | 基于短信息的彩票投注方法 |
CN102156928A (zh) * | 2011-04-29 | 2011-08-17 | 浪潮通信信息系统有限公司 | 一种通过业务逻辑锁进行系统并发控制的方法 |
CN102779138B (zh) * | 2011-05-13 | 2016-04-13 | 上海振华重工(集团)股份有限公司 | 实时数据的硬盘存取方法 |
CN103034636A (zh) * | 2011-09-29 | 2013-04-10 | 盛乐信息技术(上海)有限公司 | 一种非关系型数据库的回滚方法、装置及系统 |
CN102375892B (zh) * | 2011-11-16 | 2014-07-02 | 北京握奇数据系统有限公司 | 大容量数据库卡的事务管理方法、大容量数据库卡及系统 |
CN103186564A (zh) * | 2011-12-28 | 2013-07-03 | 深圳市金蝶中间件有限公司 | 数据对象的处理方法及系统 |
CN103514164B (zh) * | 2012-06-15 | 2016-12-21 | 阿里巴巴集团控股有限公司 | 数据迁移方法及系统 |
CN104750703B (zh) * | 2013-12-26 | 2018-06-26 | 中国移动通信集团天津有限公司 | 一种提高数据准确性的方法和装置 |
CN104008133B (zh) * | 2014-05-06 | 2017-08-01 | 烽火通信科技股份有限公司 | 基于碰撞探测的行级锁定集合实现装置及方法 |
CN106610865A (zh) * | 2015-10-21 | 2017-05-03 | 阿里巴巴集团控股有限公司 | 一种数据加锁及解锁的方法及装置 |
CN105426410B (zh) * | 2015-11-02 | 2018-11-09 | 东软集团股份有限公司 | 数据采集系统和用于数据采集系统的分析方法 |
CN106446037A (zh) * | 2016-08-31 | 2017-02-22 | 南威软件股份有限公司 | 一种基于分布式锁实现Redis与MYSQL数据一致性的方法 |
CN109032774B (zh) * | 2018-06-27 | 2021-08-13 | 中国建设银行股份有限公司 | 应用程序恢复方法与装置 |
CN112416955B (zh) * | 2020-11-18 | 2022-02-22 | 四川长虹电器股份有限公司 | 基于高并发环境的缓存一致性问题解决方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5247672A (en) * | 1990-02-15 | 1993-09-21 | International Business Machines Corporation | Transaction processing system and method with reduced locking |
CN1122919C (zh) * | 1998-07-22 | 2003-10-01 | 艾利森电话股份有限公司 | 涉及数据库中事务处理的方法 |
CN1174323C (zh) * | 1997-04-17 | 2004-11-03 | 阿尔卡塔尔公司 | 管理共享内存的方法 |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
-
2006
- 2006-04-05 CN CNB2006100663838A patent/CN100365632C/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5247672A (en) * | 1990-02-15 | 1993-09-21 | International Business Machines Corporation | Transaction processing system and method with reduced locking |
CN1174323C (zh) * | 1997-04-17 | 2004-11-03 | 阿尔卡塔尔公司 | 管理共享内存的方法 |
CN1122919C (zh) * | 1998-07-22 | 2003-10-01 | 艾利森电话股份有限公司 | 涉及数据库中事务处理的方法 |
CN1740978A (zh) * | 2004-08-23 | 2006-03-01 | 华为技术有限公司 | 实现共享内存数据库的方法及内存数据库系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1858745A (zh) | 2006-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100365632C (zh) | 实现内存数据和数据库数据事务一致性的处理方法 | |
CN101089857B (zh) | 一种内存数据库事务管理方法及系统 | |
CN102073540B (zh) | 分布式事务提交方法和装置 | |
CN108459919B (zh) | 一种分布式事务处理方法及装置 | |
US7801846B2 (en) | Generating log sequence identifiers to apply a transaction to a storage system | |
EP2825958B1 (en) | Systems and methods for supporting transaction recovery based on a strict ordering of two-phase commit calls | |
CN106021016A (zh) | 在快照之间的虚拟时间点访问 | |
CN103647834B (zh) | 一种用于处理多阶段分布式任务调度的系统及方法 | |
CN113396407A (zh) | 用于利用区块链技术扩充数据库应用的系统和方法 | |
CN108710638B (zh) | 一种基于混合rdma操作的分布式并发控制方法及系统 | |
Paxton | A client-based transaction system to maintain data integrity | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
CN101692226B (zh) | 海量归档流数据存储方法 | |
CN106777270A (zh) | 一种基于提交点时间线同步的异构数据库复制并行执行系统及方法 | |
CN104657158B (zh) | 一种业务系统中业务处理的方法和装置 | |
CN102103642A (zh) | 基于oltp的数据删除方法、系统及图形数据库服务器 | |
CN102651007A (zh) | 一种管理数据库索引的方法和装置 | |
CN101046821A (zh) | 通用数据库操纵器 | |
CN106354583A (zh) | 一种MySQL数据库的热备份方法与系统 | |
CN102945278A (zh) | 一种数据库记录重做日志的方法和装置 | |
CN101350022B (zh) | 基于数据库逻辑锁的变更处理方法 | |
CN102193991A (zh) | 基于oltp的数据修改方法、系统及图形数据库服务器 | |
EP1933236A1 (en) | Branch Office and remote server smart archiving based on mirroring and replication software | |
CN111708835B (zh) | 区块链数据存储方法及装置 | |
US7051051B1 (en) | Recovering from failed operations in a database system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |