MySQL 5.0和PostgreSQL 8.1

MySQL 5.0的发布已经有好些天了,添加了“企业应用”所需的特性,它终于支持存储过程和触发器了;不过,企业应用最大的需求之一,被很多初学者所忽略了的(这个现象来自对论坛的观察),是MySQL 5.0新增加的对分布式事务的支持:http://dev.mysql.com/doc/refman/5.0/en/xa.html,基于Open Group的XA规范。

最近又看到新闻,PostgreSQL 8.1也快发布了。在其RC1版本的Release Notes中,也看到了它新增的对XA的支持:http://developer.postgresql.org/docs/postgres/release.html#RELEASE-8-1。不知道这个算不算是PostgreSQL迫于MySQL的压力才推出的功能;对于数据库这样的产品,分布式事务的支持只能算一个基本功能,Oracle和SQL Server在很早以前就已经支持了,这实在不是什么新鲜玩意儿。只是这些开源数据库也开始支持这种关键功能,这应该可以成为真正挑战商业数据库的起点。

这些数据库实现XA规范时,也都采用了2PC的方式(2-Phase Commit)。也有一些产品采用了OMG的CORBA OTS规范,也有一些使用了XA规范但用的是一步提交(XA规范同时支持这两种方式)。然而,最流行的还是基于XA和2PC的方式。SQL Server,Oracle都已经支持(Sybase和DB2也支持XA 2PC,但我不确定它们的驱动也支持);MySQL和PostgreSQL也增加了对它的支持。

Windows和.NET对这种分布式事务(XA和2PC)也有着良好的支持。对于Windows Server 2003和Windows XP,可以简单的使用COM+ 1.5的无组件服务做到:

						ServiceConfig scopeConfig 
						=
						
						
						new
						 ServiceConfig();
				
				scopeConfig.Transaction = TransactionOption.Required;
ServiceDomain.Enter(scopeConfig);
try...{
// business actions}catch(Exception e)
...{
    ContextUtil.SetAbort();
}finally...{
    ServiceDomain.Leave();
}

.NET 2.0的FCL有System.Transactions.TransactionScope类可用:http://msdn2.microsoft.com/en-us/library/system.transactions.transactionscope.aspx。用法更简单,而其背后也是通过ServiceDomain和COM+ 1.5实现的。

对于要求兼容Windows 2000的系统,则可以自己实现一个服务组件来做到这一点。如PetShop 3.0里面的例子,基本的代码看起来是这个样子:

						[Transaction(TransactionOption.Required)]
				
				
				public
				
				
				class
				 BusinessComponent : ServicedComponent

				...
				
						{
    [AutoComplete]

						public
						
						
						void
						 BusinessProcess()

						...
						
								{

								//
								 business actions
								
										
								
								    }
						
						
								}

在// business actions段,可以同时建立到多个数据库服务器的连接,数据库提供商也可不同,进行多步数据操作,并且保证这些操作是一个原子操作(实际上能保证所有四个ACID属性)。这就是分布式事务的威力,也是大型应用中必须实现的需求。

写到这里也许你已经打算用MySQL的.NET Connector试试MySQL的这个新功能了 不过还得再等等,MySQL是升级了,它的.NET Connector还没升级 开源社区看起来还是更喜欢Java(显然),因为Java版的Connector已经可以了。为新版PostgreSQL准备的.NET驱动也还在开发过程中。不过它们实现的分布式事务规范和COM+的相同,所以没有理由不支持,就看驱动的了。到时候,你是否也会考虑考虑使用这些开源的产品呢?

COM+也是个好东西,并且目前为止这是.NET下(COM+的托管包装见System.EnterpriseService命名空间)实现分布式事务的唯一途径。我刚加入Infosys不久,涉及到的两个.NET项目(一个B/S一个C/S)均使用了ES/COM+。得益于COM+服务良好的灵活性和可伸缩性,配合Windows Cluster Service,满足了客户苛刻的需求。 http://blog.joycode.com/sunmast/archive/2005/11/07/mysql_postgres_complus.aspx

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏影子

给Ionic写一个cordova(PhoneGap)插件

496100
来自专栏影子

给Ionic写一个cordova(PhoneGap)插件

13040
来自专栏生信技能树

HiC数据辅组基因组组装之Lachesis

Lachesis是希腊神话众神之一,负责决定生命之线的长度。但是咱们这个lachesis是2013年发表在nature biotechnology上(https...

1K20
来自专栏FreeBuf

如何利用Microsoft Edge漏洞获取本地文件?

在2015年,微软发布了Edge浏览器。当它最初被开发时,它被命名为Project Spartan。

11820
来自专栏信安之路

【读者投稿】wifi渗透-狸猫换太子

上期作者发布了一篇关于wifi钓鱼的方法,今天我来给大佬们带来一篇关于拿到wifi密码能干什么?

16800
来自专栏ImportSource

NoSQL-ReadConsistency-读取一致性

翻译内容: NoSQL Distilled 第五章 Consistency 一致性 作者简介: ? 本节摘要: 一致性向来是分布式...

34150
来自专栏君赏技术博客

模块化架构你为什么这么火,让我如此亲睐你?

前几天就开始研究了关于新项目的架构,也研究了模块化架构和关于Cocoapods私有库的研究。

17230
来自专栏DevOps时代的专栏

15个私有云上的 DevOps 开源工具

在可维护性,可靠性,效率和安全性方面,DevOps 为私有云在改进操作流程方面发挥着重要的作用。私有云是一个由许多硬件和软件组件组成的复杂系统。 对于任何支持的...

59550
来自专栏aCloudDeveloper

Docker 跨主机网络方案分析

58680
来自专栏猫哥学前班

猫哥网络编程系列:详解 BAT 面试题

从产品上线前的接口开发和调试,到上线后的 bug 定位、性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期。不论你是前后端的开发岗位,还是 SQA、运维等...

479120

扫码关注云+社区

领取腾讯云代金券