CN104199976A - 一种融合原生事务和逻辑事务的方法 - Google Patents
一种融合原生事务和逻辑事务的方法 Download PDFInfo
- Publication number
- CN104199976A CN104199976A CN201410492350.4A CN201410492350A CN104199976A CN 104199976 A CN104199976 A CN 104199976A CN 201410492350 A CN201410492350 A CN 201410492350A CN 104199976 A CN104199976 A CN 104199976A
- Authority
- CN
- China
- Prior art keywords
- affairs
- logic
- transaction
- logic affairs
- upper layer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 26
- 230000003111 delayed effect Effects 0.000 claims description 9
- 230000007613 environmental effect Effects 0.000 claims description 6
- 230000006870 function Effects 0.000 claims description 6
- 230000002159 abnormal effect Effects 0.000 claims description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000005538 encapsulation Methods 0.000 description 1
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种融合原生事务和逻辑事务的方法,其实现过程为:创建事务;启动事务;加入事务管理;提交事务;事务回滚。本发明的一种融合原生事务和逻辑事务的方法与现有技术相比,采用逻辑事务类型和逻辑事务边界类型,用户可以选择是启动事务或者直接提交,逻辑事务的提交、回滚根据当前事务的边界类型决定事务的执行,解决事务之间的死锁,实用性强。
Description
技术领域
本发明涉及云计算技术领域,具体地说是一种实用性强、融合原生事务和逻辑事务的方法。
背景技术
数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。但是数据库事务必须保证事务在同一个应用程序中,不适用与多框架之间的使用,不能保证多框架之间的操作使用同一个事务来管理。
另外使用逻辑锁和事务的结合,会有以下的问题:
1、可能导致死锁或者阻塞,同一个逻辑事务中,业务代码在写操作前要求先锁定资源,如果锁定失败,需要解锁同一个功能sessionID下的所有的锁。
2、事务隔离级别,理论上逻辑事务的隔离级别没有实际用处,主要是给数据库事务用的,目前需求不是很明确。
3、事务嵌套,用户需要关心事务隔离级别,需要了解上层事务。
基于此,现提供一种融合原生事务和逻辑事务的方法,该方法保证多框架之间的数据操作能够存在统一个实际事务中,有效解决上述问题。
发明内容
本发明的技术任务是针对以上不足之处,提供一种实用性强、融合原生事务和逻辑事务的方法。
一种融合原生事务和逻辑事务的方法,其具体实现过程为:
创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种;
启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql;当启动本地事务时,记录事务嵌套边界类型和环境事务;
加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例;
延迟提交的数据库对象实例,缓存要执行的Sql语句、功能SessionID、数据库对象名到线程安全的集合中;
提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句;
当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
当事务执行方式为逻辑事务嵌套,创建并启动内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。
当上层逻辑事务失败时,或者内部逻辑事务失败,或者全部执行失败时,根据上层逻辑事务和内部逻辑事务的边界类型,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
本发明的一种融合原生事务和逻辑事务的方法,具有以下优点:
该发明的一种融合原生事务和逻辑事务的方法可以控制是否推迟将数据提交到数据库;可以解决事务之间的死锁;能够做到事务的嵌套使用;保证多框架之间的数据操作能够存在统一个实际事务中,做到在逻辑事务执行的时候才延迟提交所有数据,并且做到了根据业务场景通过配置启用逻辑事务;实用性强,适用范围广泛,易于推广。
附图说明
附图1为本发明的实现流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
本发明提供一种融合原生事务和逻辑事务的方法,如附图1所示,其具体实现过程为:
创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种;
启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql;当启动本地事务时,记录事务嵌套边界类型和环境事务;
加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例;该步骤中原生的数据库对象实例,直接执行Sql。
延迟提交的数据库对象实例,缓存要执行的Sql语句、功能SessionID、数据库对象名到线程安全的集合中;
提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句;
当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务时,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。根据上层逻辑事务和内部逻辑事务的边界类型,当上层逻辑事务失败,或者内部逻辑事务失败,或者全部执行失败时,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
对于逻辑事务嵌套,内部逻辑事务复用上层逻辑事务的情景,内部逻辑事务不在创建新的逻辑事务,将当前要执行的Sql和数据库连接、功能SessionID记录到线程安全的集合,做到延迟提交。这样只能是上层逻辑事务才能真正提交,做到统一管理,可以保证多逻辑事务之间的写操作能够存在同一个实际事务中。
实施例:以下内容为该方法的一个实例的数据访问,本实例应用了事务嵌套。
其具体实现过程为:
一、定义外部事务执行方式和事务边界类型,创建逻辑事务。
var ltrans = new GSPTransactionScope(GSPTransactionScopeOption, ScopeType。
二、执行数据操作,创建数据库实例对象,将需要执行的Sql语句、功能SessionID、数据库对象名存放到线程安全的集合中 ,见以下代码:
using (var db = GSPDatabaseFactory.GetDataBase())
{
db.ExecSqlStatement(sql);
}
public override int ExecSqlStatement(string sqlStatement)
{
CheckForNullReference(sqlStatement, "sqlStatement");
int result = 0;
try
{
//缓存要执行的sql语句
LogicalSqlStatement logicalSqlStatement = new LogicalSqlStatement();
logicalSqlStatement.FuncSessionId = GSPAppContext.GlobalContext[LogicalTransactionFuncSessionID].ToString();
logicalSqlStatement.SqlStatement = sqlStatement;
logicalSqlStatement.DBConfigKey = this.DBkey;
GSPTransactionScope.Current.PostponeExecuteSql(logicalSqlStatement);
}
catch (DbException e)
{
throw CreateExption(e);
}
return result;
}
三、创建启动内部逻辑事务,根据外部逻辑事务和内部逻辑事务的边界决定内部事务继承或者创建新的逻辑事务,本例是继承。
四、执行内部逻辑事务数据操作,同步骤二。
五、提交逻辑事务,因为内部逻辑事务是继承外部逻辑事务,所以只有外部逻辑事务提交时,所有数据操作才会实现真正的延迟提交。
六、如果外部或者内部逻辑事务报错,则所有逻辑事务回滚。
上述方法通过封装事务的创建、启动、提交、回滚,通过定义不同的逻辑事务边界类型,按需调用逻辑事务。实现了逻辑事务的嵌套使用,采用逻辑事务类型和逻辑事务边界类型,用户可以选择是启动事务或者直接提交,逻辑事务的提交、回滚根据当前事务的边界类型决定事务的执行,解决事务之间的死锁。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种融合原生事务和逻辑事务的方法的权利要求书的且任何所属技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。
Claims (3)
1.一种融合原生事务和逻辑事务的方法,其特征在于:其实现过程为:
创建事务,初始化事务边界,指定事务执行方式、事务边界的类型,这里的事务执行方式包括本地事务和逻辑事务两种;
启动事务,配置事务执行方式,决定启动逻辑事务或者本地事务:当启动逻辑事务时,记录事务嵌套边界类型和环境事务,并创建线程安全的集合来存储Sql;当启动本地事务时,记录事务嵌套边界类型和环境事务;
加入事务管理,执行Sql,创建数据库对象实例,当启用逻辑事务时,创建延迟提交的数据库对象实例;当启用本地事务时,使用原生的数据库对象实例;
延迟提交的数据库对象实例,缓存要执行的Sql语句、功能SessionID、数据库对象名到线程安全的集合中;
提交事务,显示调用事务Complete方法,设置Complete标识,如果启动的是逻辑事务,此时统一执行线程安全的集合中的Sql语句;
当执行Sql出现异常时,根据启动事务的类型,选择是否回滚:启动的是逻辑事务,则回滚;启动的是本地事务,则只抛出异常,不进行真正的回滚。
2.根据权利要求1所述的一种融合原生事务和逻辑事务的方法,其特征在于:当事务执行方式为逻辑事务嵌套,创建并启动内部逻辑事务的时候,记录上层逻辑事务,并根据上层逻辑事务的事务边界类型和内部逻辑事务的事务边界类型,启动内部逻辑事务,决定是否继承上层逻辑事务,或者自己重新创建逻辑事务,或者启动本地事务。
3.根据权利要求2所述的一种融合原生事务和逻辑事务的方法,其特征在于:当上层逻辑事务失败时,或者内部逻辑事务失败,或者全部执行失败时,根据上层逻辑事务和内部逻辑事务的边界类型,决定上层逻辑事务、内部逻辑事务是否回滚或者只抛出异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410492350.4A CN104199976A (zh) | 2014-09-24 | 2014-09-24 | 一种融合原生事务和逻辑事务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410492350.4A CN104199976A (zh) | 2014-09-24 | 2014-09-24 | 一种融合原生事务和逻辑事务的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104199976A true CN104199976A (zh) | 2014-12-10 |
Family
ID=52085269
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410492350.4A Pending CN104199976A (zh) | 2014-09-24 | 2014-09-24 | 一种融合原生事务和逻辑事务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104199976A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786595A (zh) * | 2016-02-29 | 2016-07-20 | 浪潮通用软件有限公司 | 一种两段式提交的事务控制方法 |
CN106776052A (zh) * | 2016-12-07 | 2017-05-31 | 金蝶软件(中国)有限公司 | 共享资源访问方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870761A (en) * | 1996-12-19 | 1999-02-09 | Oracle Corporation | Parallel queue propagation |
CN101673275A (zh) * | 2009-08-11 | 2010-03-17 | 东软集团股份有限公司 | 一种保证数据库内事务一致的方法及装置 |
CN102306200A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 增量数据操作语句的并发应用装置和方法 |
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与系统 |
-
2014
- 2014-09-24 CN CN201410492350.4A patent/CN104199976A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870761A (en) * | 1996-12-19 | 1999-02-09 | Oracle Corporation | Parallel queue propagation |
CN101673275A (zh) * | 2009-08-11 | 2010-03-17 | 东软集团股份有限公司 | 一种保证数据库内事务一致的方法及装置 |
CN102306200A (zh) * | 2011-09-22 | 2012-01-04 | 用友软件股份有限公司 | 增量数据操作语句的并发应用装置和方法 |
CN103294479A (zh) * | 2013-06-19 | 2013-09-11 | 成都市欧冠信息技术有限责任公司 | 分布式事务处理方法与系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786595A (zh) * | 2016-02-29 | 2016-07-20 | 浪潮通用软件有限公司 | 一种两段式提交的事务控制方法 |
CN105786595B (zh) * | 2016-02-29 | 2019-04-23 | 浪潮通用软件有限公司 | 一种两段式提交的事务控制方法 |
CN106776052A (zh) * | 2016-12-07 | 2017-05-31 | 金蝶软件(中国)有限公司 | 共享资源访问方法和装置 |
CN106776052B (zh) * | 2016-12-07 | 2019-12-10 | 金蝶软件(中国)有限公司 | 共享资源访问方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077382B (zh) | 在多租户应用服务器环境中进行事务恢复的系统和方法 | |
CN104793988B (zh) | 跨数据库分布式事务的实现方法和装置 | |
US20180232259A1 (en) | Distributed processing of mixed serial and concurrent workloads | |
KR20170132338A (ko) | 파일 시스템에 대한 체크포인트 | |
US10268776B1 (en) | Graph store built on a distributed hash table | |
CN105183852A (zh) | 一种数据库迁移方法和装置 | |
CN105867907A (zh) | 去除业务耦合性的JSS多层Web开发框架设计方法 | |
US20230367577A1 (en) | Method and apparatus for updating cloud platform | |
US9207966B2 (en) | Method and system for providing a high-availability application | |
WO2012083697A1 (zh) | 一种事务恢复方法和事务恢复装置 | |
CN111258957B (zh) | 分布式文件系统目录更新方法、装置、设备和介质 | |
CN111324425A (zh) | 一种数据访问方法、装置、设备及存储介质 | |
CN104199976A (zh) | 一种融合原生事务和逻辑事务的方法 | |
CN105138646A (zh) | 一种基于Hibernate的数据库操作方法 | |
CN111339114B (zh) | 一种数据访问方法、装置、设备及存储介质 | |
WO2015084409A1 (en) | Nosql database data validation | |
CN105227551A (zh) | Xbrl应用平台的统一权限管理方法 | |
CN103176868A (zh) | 一种文件状态备份方法 | |
US10338891B2 (en) | Migration between model elements of different types in a modeling environment | |
EP3394745A1 (en) | Semantic weaving of configuration fragments into a consistent configuration | |
Popovic et al. | Formal verification of distributed transaction management in a SOA based control system | |
Pillai et al. | Crash Consistency: Rethinking the Fundamental Abstractions of the File System | |
US11936739B2 (en) | Automated reset of session state | |
Singhal | Protecting customer databases to shield business data against ransomware attacks and effective disaster recovery in a hybrid production environment | |
CN107947978A (zh) | 一种关联数据的方法以及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141210 |
|
WD01 | Invention patent application deemed withdrawn after publication |