CN102945264A - 智能启用分布式事务的方法 - Google Patents
智能启用分布式事务的方法 Download PDFInfo
- Publication number
- CN102945264A CN102945264A CN2012104085300A CN201210408530A CN102945264A CN 102945264 A CN102945264 A CN 102945264A CN 2012104085300 A CN2012104085300 A CN 2012104085300A CN 201210408530 A CN201210408530 A CN 201210408530A CN 102945264 A CN102945264 A CN 102945264A
- Authority
- CN
- China
- Prior art keywords
- database
- transaction
- connection
- distributed transaction
- distributed
- 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.)
- Granted
Links
Images
Abstract
本发明公开了一种智能启用分布式事务的方法,属于计算机领域。该方法对微软NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。与现有技术相比,本发明的智能启用分布式事务的方法具有结构清晰、应用方便、兼容标准事务接口等特点,广泛应用于分布式数据访问架构之中,具有很好的推广应用价值。
Description
技术领域
本发明涉及一种计算机技术,具体地说是一种智能启用分布式事务的方法。
背景技术
事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。对于一个分布式事务(Distributed Transaction)来讲,事务的参与者分布于网络环境中的不同的节点。参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
由于分布式事务的逻辑更加复杂,涉及到更多组件。微软.NET框架对分布式事务提供了支持,包括显式事务、隐式事务、显式分布式事务、隐式分布式事务。微软的分布式事务基于MSDTC组件。该组件的稳定性、可用性受环境影响程度较高。
在一个业务软件系统中,包含许多业务组件,在运行期,这些业务组件可以对应不同的数据访问层组件实例。在一个业务处理中,这些业务组件按照一定的流程进行编排。这样多个数据访问层实例就需要协同工作,保证数据的完整、一致。要实现这个目标,数据库本地事务就无法满足需求。因为每个组件都处于一个“隐式”的调用环境中,组件的数据访问层不能与特定的调用场景耦合。因此必须采用分布式事务才能达到目标。这样,就带来一个问题:如果所有的组件的访问层都与同一个数据库通讯,那么实际的分布式事务可以简化为数据库、应用服务器两个参与者。
TransactionScope在文档中宣称只在“必要”情况下才提升事务级别(多数据库时才使用分布式事务,如果是同一个数据库,最好使用SqlTransaction),但是事实上不是这样。在TransactionScope内,只要你用不同的SqlConnection对象操作DB一次以上(不管你的目标是不是同一个实例、同一个库),都会提升事务级别到分布式事务,无疑会大大增加系统负担,降低服务器性能。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供智能启用分布式事务的方法。利用该方法可以有效解决在单数据库场景下,因为使用分布式事务而带来的配置、部署的复杂性,并提升系统性能。
本发明的技术任务是按以下方式实现的:智能启用分布式事务的方法,对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。
上述方法的具体实现方法包含数据库连接管理及分布式事务代理两部分。
1)数据库连接管理:
实现一个数据库连接工厂GSPDatabaseFactory,以数据库连接工厂GSPDatabaseFactory实现对数据源创建的管理,创建数据库连接成功后放入内部连接池;
数据库连接工厂GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接;
数据库连接工厂GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法,在不启用分布式事务的情况下,由数据库连接工厂GSPDatabaseFactory智能管理数据库连接的开启和关闭;
2)分布式事务代理:
实现一个虚拟分布式事务协调器:VirtualDTC,初次调用下述代码,初始化当前调用上下文中的虚拟分布式事务作用域,
VirtualTransactionScope scope1 = new
VirtualTransactionScope(TransactionScopeOption.Required);
当前调用堆栈继续调用上面代码,根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合,虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数;外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;
如果连接信息相同,但是事务属性是RequiredNew,则内部创建一个显式的分布式事务,并且把管理的内部数据库连接登记到该显式事务中;
如果与堆栈上连接信息不同,则直接启动显式分布式事务,并把现有数据库连接登记到分布式事务。
与现有技术相比,本发明的智能启用分布式事务的方法解决了在单一数据库的环境下,由于各个数据访问层为了保证数据的一致,而必须使用分布式事务带来的性能损失问题。在升级为多数据库实例时,各个数据访问层的事务处理无需任何修改,即可自动启用分布式事务。这样,在单一数据库部署架构下,就大大降低了对MSDTC组件的依赖,大大提高系统的稳定性、可靠性。
附图说明
附图1是本发明智能启用分布式事务的方法中虚拟分布式事务的算法逻辑图。
具体实施方式
参照说明书附图以具体实施例对本发明的智能启用分布式事务的方法作以下详细地说明。
实施例:
本发明智能启用分布式事务的方法的具体实现方案包括:1) 数据库连接管理、2) 分布式事务代理。
1、数据库连接管理。
通常的数据库连接创建代码如下:
DBConnection myConnection = new SqlConnection(myConnString);
本方法实现一个数据库连接工厂GSPDatabaseFactory,实现对数据源创建的管理,创建数据库连接成功后放入内部连接池。
IGSPDatabase=GSPDatabaseFactory.GetDatabase(myConnString);
这个GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接。
工厂类GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法。在不启用分布式事务的情况下,由GSPDatabaseFactory智能管理数据库连接的开启和关闭。
2、分布式事务代理。
分布式事务代理实现一个虚拟分布式事务协调器:VirtualDTC。初次在调用下面代码,初始化当前调用上下文中的虚拟分布式事务作用域。
VirtualTransactionScope scope1 = new
VirtualTransactionScope(TransactionScopeOption.Required);
如附图1所示,当前调用堆栈继续调用上面代码,则会根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合。虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数。外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;如果连接信息相同,但是事务属性是RequiredNew,则内部创建一个显式的分布式事务;
CommittableTransaction Internaltran= new
CommittableTransaction();
并且调用下面代码把管理的内部数据库连接登记到该显式事务中:
InternalLocalconn.EnlistTransaction(Internaltran);
如果与堆栈上连接信息不同,则直接采取上述方式,即启动显式分布式事务,并把现有数据库连接登记到分布式事务。
Claims (2)
1. 智能启用分布式事务的方法,其特征在于:对微软.NET的分布式事务接口进行透明封装,多个数据访问层协同工作时,如果后台数据库为同一实例时,自动启用数据库事务,若是多个数据库实例,则自动启用分布式事务,并且把已经启用的数据库事务与分布式事务融合。
2.根据权利要求1所述的智能启用分布式事务的方法,其特征在于:具体实现方法包含数据库连接管理及分布式事务代理两部分:
数据库连接管理:
实现一个数据库连接工厂GSPDatabaseFactory,以数据库连接工厂GSPDatabaseFactory实现对数据源创建的管理,创建数据库连接成功后放入内部连接池;
数据库连接工厂GSPDatabaseFactory根据连接字符串形成连接信息字段列表,再根据当前线程上下文Token形成一个索引值,根据这个索引值在内部连接池中检索可用的数据库连接;
数据库连接工厂GSPDatabaseFactory的GetDatabase方法返回一个接口IGSPDatabase有执行SQL语句的接口方法和开启、关闭数据库的方法,在不启用分布式事务的情况下,由数据库连接工厂GSPDatabaseFactory智能管理数据库连接的开启和关闭;
分布式事务代理:
实现一个虚拟分布式事务协调器:VirtualDTC,初次调用下述代码,初始化当前调用上下文中的虚拟分布式事务作用域,
VirtualTransactionScope scope1 = new
VirtualTransactionScope(TransactionScopeOption.Required);
当前调用堆栈继续调用上述代码,根据TransactionScopeOption参数的值来确定虚拟分布式事务如何融合,虚拟分布式事务协调器记录当前管理的数据库连接,如果后续创建的数据库连接与连接池中的连接信息相同,则直接使用连接池中的连接,接着比较当前正在使用的数据库连接是否就是匹配的连接:如果相同,并且事务属性是Required,则前后两次数据库连接进行合并,并且增加引用计数;外部调用代码后续试图关闭数据库时,由数据库连接管理器负责减少引用计数;
如果连接信息相同,但是事务属性是RequiredNew,则内部创建一个显式的分布式事务,并且把管理的内部数据库连接登记到该显式事务中;
如果与堆栈上连接信息不同,则直接启动显式分布式事务,并把现有数据库连接登记到分布式事务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210408530.0A CN102945264B (zh) | 2012-10-24 | 2012-10-24 | 智能启用分布式事务的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210408530.0A CN102945264B (zh) | 2012-10-24 | 2012-10-24 | 智能启用分布式事务的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102945264A true CN102945264A (zh) | 2013-02-27 |
CN102945264B CN102945264B (zh) | 2017-02-15 |
Family
ID=47728208
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210408530.0A Active CN102945264B (zh) | 2012-10-24 | 2012-10-24 | 智能启用分布式事务的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102945264B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462497A (zh) * | 2014-12-19 | 2015-03-25 | 深圳中兴网信科技有限公司 | 基于关系型数据库的跨库事务处理方法和系统 |
CN105095438A (zh) * | 2015-07-23 | 2015-11-25 | 北京按钮云商科技有限公司 | 一种基于.net数据库连接池的数据管理方法及系统 |
CN107480251A (zh) * | 2017-08-14 | 2017-12-15 | 福建新大陆软件工程有限公司 | 一种管理数据访问的系统 |
CN108924184A (zh) * | 2018-05-31 | 2018-11-30 | 阿里巴巴集团控股有限公司 | 数据处理方法和服务器 |
CN109997166A (zh) * | 2016-09-19 | 2019-07-09 | 金融与风险组织有限公司 | 用于截取智能合同的系统和方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295548B1 (en) * | 1999-03-12 | 2001-09-25 | Compaq Computer Corporation | Detection of an imported transaction for finding the global transaction identifier |
CN1647080A (zh) * | 2002-04-25 | 2005-07-27 | 国际商业机器公司 | 多数据库环境中存取数据的方法、计算机程序和计算机 |
CN101980207A (zh) * | 2010-11-09 | 2011-02-23 | 中国电信股份有限公司 | 一种数据库访问的实现方法和系统 |
-
2012
- 2012-10-24 CN CN201210408530.0A patent/CN102945264B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6295548B1 (en) * | 1999-03-12 | 2001-09-25 | Compaq Computer Corporation | Detection of an imported transaction for finding the global transaction identifier |
CN1647080A (zh) * | 2002-04-25 | 2005-07-27 | 国际商业机器公司 | 多数据库环境中存取数据的方法、计算机程序和计算机 |
CN101980207A (zh) * | 2010-11-09 | 2011-02-23 | 中国电信股份有限公司 | 一种数据库访问的实现方法和系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462497A (zh) * | 2014-12-19 | 2015-03-25 | 深圳中兴网信科技有限公司 | 基于关系型数据库的跨库事务处理方法和系统 |
CN104462497B (zh) * | 2014-12-19 | 2018-07-10 | 深圳中兴网信科技有限公司 | 基于关系型数据库的跨库事务处理方法和系统 |
CN105095438A (zh) * | 2015-07-23 | 2015-11-25 | 北京按钮云商科技有限公司 | 一种基于.net数据库连接池的数据管理方法及系统 |
CN109997166A (zh) * | 2016-09-19 | 2019-07-09 | 金融与风险组织有限公司 | 用于截取智能合同的系统和方法 |
CN109997166B (zh) * | 2016-09-19 | 2024-02-06 | 金融与风险组织有限公司 | 用于截取智能合同的系统和方法 |
CN107480251A (zh) * | 2017-08-14 | 2017-12-15 | 福建新大陆软件工程有限公司 | 一种管理数据访问的系统 |
CN108924184A (zh) * | 2018-05-31 | 2018-11-30 | 阿里巴巴集团控股有限公司 | 数据处理方法和服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN102945264B (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100594498C (zh) | 海量数据实时处理架构及用于该架构的实时随需处理平台 | |
CN105429776B (zh) | 一种虚拟化网络功能管理的方法和系统 | |
US9760583B2 (en) | Method for native program to inherit same transaction context when invoked by primary program running in separate environment | |
CN105357059A (zh) | 业务事件处理方法和装置 | |
CN102945264A (zh) | 智能启用分布式事务的方法 | |
WO2019047441A1 (zh) | 一种通信优化方法及系统 | |
CN105159736A (zh) | 一种支持性能分析的SaaS软件部署方案的构建方法 | |
CN109951553B (zh) | 数据处理方法、系统、电子设备以及计算机可读存储介质 | |
CN110210845B (zh) | 用于区块链数据迁移的方法、装置、介质和计算设备 | |
CN111858615A (zh) | 数据库表生成方法、系统、计算机系统和可读存储介质 | |
CN103780686A (zh) | 一种云组织内自定义申请审批流程的方法及系统 | |
CN104615489A (zh) | 一种多节点数据交互的实现方法 | |
US20100050267A1 (en) | Method and system for the automated transformation of access control management information in computer systems | |
CN102937964A (zh) | 基于分布式系统的智能数据服务方法 | |
CN103152433A (zh) | 一种分布式服务端框架及其使用、交互、请求处理方法 | |
CN102073505B (zh) | 面向服务组装的声明式事务集成方法和系统 | |
CN110737425A (zh) | 一种计费平台系统的应用程序的建立方法及装置 | |
KR20210040322A (ko) | 스케줄링 방법, 장치, 기기, 기록 매체 및 컴퓨터 프로그램 | |
CN104123135A (zh) | 一种统一后台接口的方法及装置 | |
EP3394745B1 (en) | Semantic weaving of configuration fragments into a consistent configuration | |
US8473954B2 (en) | Executing operations via asynchronous programming model | |
Moschoyiannis et al. | True concurrency in long-running transactions for digital ecosystems | |
CN103971225A (zh) | 一种工作流动态扩展方法及系统 | |
CN101819524B (zh) | Rfid阅读器的访问方法及其接口驱动设备 | |
CN107122362A (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 | ||
CB02 | Change of applicant information |
Address after: 250100 Ji'nan high tech Zone, Shandong, No. 1036 wave road Applicant after: Langchao General Software Co., Ltd Address before: 250101 Shandong Province, Ji'nan City hi tech Development Zone, Nga Road No. 1036 Applicant before: Langchao Group Shandong Universal Software Co., Ltd. |
|
CB03 | Change of inventor or designer information |
Inventor after: Yang Liang Inventor after: Wang Yandong Inventor before: Zhao Qijie |
|
COR | Change of bibliographic data | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |