前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 5.0和PostgreSQL 8.1

MySQL 5.0和PostgreSQL 8.1

作者头像
张善友
发布2018-01-29 11:16:54
1.1K0
发布2018-01-29 11:16:54
举报
文章被收录于专栏:张善友的专栏张善友的专栏

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的无组件服务做到:

代码语言:javascript
复制
						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里面的例子,基本的代码看起来是这个样子:

代码语言:javascript
复制
						[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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2006-03-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档