跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 专家Blog > 专家Blog文章
并非Oracle的噩梦

时间:2005-11-25
作者:Dmitri Maximovich
浏览次数:
本文关键字:Oracle开源数据库读锁定多版本分布式事务
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  Bill Roth的文章表明了他对开源数据库系统前景的看法:

  “它(指EntepriseDB)是Oracle的业务模型终结的预兆。如果您认真研究一下,就会发现,开源数据库正在变得越来越好,非常之好。”

  那么开源数据库已经到时候要取代Oracle作为企业数据库的地位,而我们都应该停止购买昂贵的Oracle产品了吗?

  我们来看看。您对MySql站点上的下述材料有何看法呢?

  “默认情况下,结果集是完全存储在内存中并进行检索的。大多数情况下,这是一种最有效的操作方式,而且由于MySQL的设计,网络协议更容易实现。如果要处理包含大量行或比较大的值的结果集,并且不能在JVM中为所需的内存分配堆空间,可以让驱动程序每次一行地“流回”结果集。”

  现在我们来考虑一下美国民主党全国委员会如何“使用一个包括15亿行的MySQL数据库进行投票统计”——选择内存中的所有行还是一个接一个地依次取出?不是说这不可能,肯定会有相关的应急方案(workaround),但是这并不是唯一的问题。

  再比如,读锁定的问题。Oracle在读一致性方面使用多版本(multi-versioning),所以读请求永远不会被阻塞。其他大多数(所有的?)数据库都使用共享的读锁定,而这会导致死锁和阻塞。

  还有健壮的分布式事务支持。PostgreSql的下一个版本是第一个计划支持分布式事务的版本(MySql还不确定),而它的发布还要有一段时间。没有分布式事务的企业应用?当然了,这方面可能也有应急方案之类的东西,但是,问题清单上还有很多内容。

  不要误解我的意思,我也在许多项目中使用PosgreSql,这是一个很不错的数据库,MySQL和其他的一些开源数据库也很不错。无疑,开源领域的发展很快,所以,最终它们是有可能与Oracle相媲美的,但是我认为这个时间还没有来到。

  只要数据库具有JDBC驱动程序,在WebLogic中创建一个连接池是非常简单的,但是我并不据此就急切地得出结论说该数据库已经是时候取代Oracle作为企业数据库的地位了。

评论

  • “现在我们来考虑一下美国民主党全国委员会如何“使用一个包括15亿行的MySQL数据库进行投票统计”——选择内存中的所有行还是一个接一个地依次取出?不是说这不可能,肯定会有相关的应急方案,但是这并不是唯一的问题”。

      这对我来说不成问题,至少是对于99%的用户。对于大多数的用途,有两个基于数据库的应用,联机事务处理(OLTP)和联机分析处理(OLAP)。人们使用OLTP来优化响应时间,这通常关系到减少瓶颈组件(通常是数据库)中的并发性。此外,OLTP类的应用中的结果集通常比较小(数十行、几百,很少有上千的,几乎没有上万的)。

      如果进行过跨供应商的JDBC开发,您就会知道其他数据库也是一样的,除非您要求显式光标(您应该想到SQL Server、Sybase等)。实际上,即使使用Oracle,这些类型的应用也很少取第二次以获取结果,因为它们都在驱动程序所使用的默认fetch size之内。

      现在,如果我看到一个应用(即使是OLAP类的)拿数百万行在客户机中进行分析,我就要问为什么非得这么做。关系模型的一个优点是它能够对集合起反应,而且它非常擅长汇总、聚合、生成统计数字等等。联系到当前数据库通常具有的丰富功能,通常很少有(注意,我没有使用“没有”)理由拿数百万行在客户机中进行分析。

      MySQL-5.x及其以后版本都包含取行/预取,非常类似于Oracle。我认为您需要明白,MySQL所支持的另一种模型并非“每次取一行”。在MySQL-5.x之前,结果集通常都以firehose模式返回(类似于SQLServer)。对于返回的每一行,没有round-trip。当每次处理一行时,很可能是您关掉“阀门”了。通过网络存储栈的神奇作用,服务器只以阅读的速度返回行。

      “再比如,读锁定的问题。Oracle在读一致性方面使用多版本,所以读请求永远不会被阻塞。其他大多数(所有的?)数据库都使用共享的读锁定,而这会导致死锁和阻塞。”

      MySQL(使用事务时)和PostgreSQL都像Oracle一样使用MVCC(Multiversion Concurrency Control,多版本并发控制)。

      “还有健壮的分布式事务支持。PostgreSql的下一个版本是第一个计划支持分布式事务的版本(MySql还不确定),而它的发布还要有一段时间。没有分布式事务的企业应用?当然了,这方面可能也有应急方案之类的东西,但是,问题清单上还有很多内容。”

      在马上要出beta版的MySQL-5.0中将会有对分布式事务的支持。当然,在MySQL中解决XA支持问题需要一段时间,但这在其他供应商产品中也不是一蹴而就的。看看BEA的文档中列出的众多关于各种XA实现的应急方案、限制和bug,您就知道了,大家都在试图使其更为健壮,这是一项艰巨的任务。分布式事务在理论上比较简单,但是实践起来却比较令人头疼。

      老实说,我觉得“企业”这个标签已经被滥用了。到底什么是企业应用呢?它是基于规模、作用域,还是复杂性?我认为所有的企业都有各种具有不同的规模、作用域和复杂性的应用。

       在http://www.mysql.com/customers/上列出了大量应用,它们从规模、作用域和复杂性各方面来说都是“企业”的,使用的数据库是MySQL。

       那么,如今是否有比较复杂的“企业”应用,对于它们来说,更适合使用Oracle呢?肯定有。那么企业中是否有一些应用,对于它们来说,Oracle和其他大而复杂的商业产品在购买和维护成本方面都成为昂贵的“牛刀”呢?肯定也有。在我看来,这就是如今的开源数据库的用武之地了。随着时间的推移,形势将对开源数据库更为有利。但是我认为二者将始终共存于企业中。

发表人:mark-mysql,2005年9月22日,01:39 PM

  • 我很高兴听到MySQl和PosgreSql支持非锁定的读操作了。但是我从不曾暗示不管多大的开源数据库在公司中都没有用武之地。我可能在文章中使用了过多的“企业”,而没有介绍它在文中指代的含义。我所说的“企业”是指在不同应用/过程间共享的大型数据库,而项目的最大部分通常是各种资源(比如数据库、MOM等等)间的整合。现在Oracle已经支持XA有一段时间了,而WebLogic从某一个版本(具体哪个版本我不记得了)起就支持Oracle了,而“马上要出beta”的MySQL中的XA支持还不能“一蹴而就”、还“需要一段时间”,这使我无法对其前景感到乐观。

发表人:maximdim,2005年9月22日,02:11 PM

原文出处: http://dev2dev.bea.com/blog/maximdim/archive/2005/09/oracle_nightmar.html

dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分

   
相关技术