当前位置:Linux教程 - Linux业界 - 2007年展望:开源数据库技术发展趋势

2007年展望:开源数据库技术发展趋势

2006年已经成为写满注脚的一页成为了历史,2007年作为新的空白页刚刚被掀开。

  开源数据库在2006年的应用开发中取得了新的进步,截至到2006年12月,据调查数据显示,在开发项目中使用的数据库软件品牌分布以及企业内部信息系统使用的数据库分布调查中,开源MySQL都位居第三,紧随位居前两位的Oracle和微软的SQL Server之后(如下图)。




  图1:在开发项目中使用的数据库软件品牌分布调查结果图




  图2:公司和企业内部使用的数据库软件品牌分布调查结果图

  在2006年频频遭遇竞争性收购和收购威胁的开源数据库,在新的一年中其产品和技术或将独善其身或将推陈出新,我们将拭目以待。


  纵然开源数据库被一些人形容为数据库领域的“小生境”,纵然面临着来自主流商业数据库厂商的竞争性收购,但开源数据库各自的“头衔”却都很有气势。 MySQL号称“世界上最流行的开源数据库”,PostgreSQL号称“世界上最先进的开源数据库”,EnterpriseDB号称“真正的企业级开源数据库,并足以与Oracle相竞争”(EnterpriseDB Advanced Server 8.1已经发布可用),如此等等。

  即使把开源数据库看作整个领域的小生境,其内部的“生态变化”也足以丰富,各开源数据库厂商或者被商业厂商收购(InnoDB和BerkeleyDB已经被Oracle收购),或者在问世不久被合作伙伴收购(MaxDB),或者自己的部分核心技术被竞争对手收购(MySQL)……无论是开源数据库领域的业界动态还是技术变革,都丝毫不比数据库的大生境所逊色。

  完善自我的MySQL

  在2006年遭遇最为“惨重”的当属MySQL。

  MySQL开源数据库采用的是双重授权策略,对于不愿公开自己源代码的使用者,需要付费使用MySQL, 而对于开放源代码的使用者,可以基于GNU的公共许可协议GPL来使用。

  MySQL数据库并没有属于自己的用于负责数据的物理存储和索引的存储引擎,它普遍使用别的开源数据库引擎做为自己的关键性存储引擎。MySQL曾经把InnoDB做为自己的事物型数据存储引擎,把BerkeleyDB做为自己的嵌入式事物型存储引擎。这两种开源数据库被Oracle收购之后(InnoDB在2005年10月份被收购,BerkeleyDB在2006年2月份被收购),MySQL在做了一些应急措施及得到一些“帮助”之后(2006年2月,MySQL雇佣了嵌入式开源数据库Firebird项目的关键人物Jim Starkey;2006年9月份,宣布去除掉对BerkeleyDB存储引擎的支持;2006年7月25日,专门为MySQL量身定做的Beta版 SolidDB Storage Engin正式对外发布)正在加紧研发自己的存储引擎。

  MySQL起初也没有自己的存储过程 (Stored Procedure)语言,在当时这是对习惯于企业级数据库的程序员的最大限制。多语句SQL命令必须通过客户方代码来协调,这种情形是借助于相当健全的查询语言和赋予客户端锁定和解锁表的能力,这样才允许的多语句运行。 但在MySQL 5.0发布之后,MySQL宣称已经完全支持存储过程。

  但是MySQL目前没有自己的存储引擎。MySQL的存储是以可插取的存储引擎存在的,它采用不同的存储引擎技术把数据存储在文件或者内存中。 MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、 FEDERATED、ARCHIVE、CSV、BLACKHOLE。可以采用内存存储引擎存储临时数据,采用事物存储引擎来完成事物处理,等等。相比之下,其它的一些数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。对于用户而言,这种选择不同的存储引擎来存储和检索数据的灵活性,是比较受欢迎的。然而,Oracle也正是看中了这一点,才对MySQL发难。

  研发自己的存储引擎是MySQL在2007年亟需解决的任务。2006年年底,MySQL AB公司和NitroSecurity公司达成协议,双方联合研发一款基于NitroEDBTM高速关系数据库技术的MySQL数据库引擎。 NitroSecurity技术使用独特的索引技术、数据管理方法和查询处理算法,该技术可以轻松处理大容量的数据库操作,而未来的MySQL数据库服务器版中将嵌入NitroSecurity的NirtroEDB数据库存储引擎,并且这种解决方案可以与旧版本的MySQL数据库的应用程序互相兼容。而在 2007年的开始,已经有消息传出针对批量Web服务器环境而设计的内部测试版新MySQL存储引擎已经发布,以用于细化MySQL的存储引擎的功能和性能。

  2007年新的一年中,MySQL不仅要在存储引擎上做出努力,还要在磁盘存储、内存损耗、集群技术以及其他的企业级性能和功能上有自己的突破。另外,面对时下的开源环境,MySQL也应该仔细考虑自己的发行费用方式的转变、培训、关键性部署等非技术性问题。

  仍需努力的PostgreSQL

  2006年的6月份,PostgreSQL庆祝了自己的10岁生日(2006年12月,PostgreSQL 8.2正式版发布)。并且在2006年11月份被《Linux Journal》杂志的评为“2006年度开源数据库编辑选择奖”。实际上,PostgreSQL一直在觊觎MySQL的“第一”位置,即使连从 PostgreSQL派生出来的EnterpriseSQL也是“理直气壮”。

  PostgreSQL是一种复杂的对象——关系型数据库管理系统(ORDBMS),它的特性丰富、复杂,其中的一些特性甚至连商业数据库都不具备,其目标是要做超大型的面向对象关系型数据库系统。它支持 SQL 89和SQL 92标准。相对于MySQL,它支持事物处理,可以满足一些商业领域的数据操作需求。但是因为PostgreSQL使用的进程,与使用线程的MySQL相比,在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多,因此PostgreSQL的运行速度明显降低。对于一些需要复杂业务操作,而对性能要求不是过于苛刻,同时期望系统的设计富于扩展性的用户而言,可以采用PostgreSQL数据库。

  相比于MySQL在2006年所遭受的打击,PostgreSQL在过去的一年中除去一些Bug修复、产品发布和获得Sun公司支持外,可谓风平浪静。但在新的2007年中,PostgreSQL如果想步MySQL的后尘仍然需要努力。

  首先,在应用平台上,PostgreSQL是运行在Cygwin模拟环境下,在Windows下运行没有MySQL稳定(MySQL在 WinNT/Win2000/WinXP下是一个服务)。广大的Windows环境阵地,应该成为PostgreSQL不能失去的一块阵地。

  在经历了更为彻底的测试之后,PostgreSQL的事务支持能力在开源数据库中是值得称赞的。而对于开源数据库产品在商业上的关键应用,对于事务处理的支持是必不可少的。但是这并不能保证PostgreSQL就可以完全满足商业性数据处理需求,因为PostgreSQL并不完全适应24/7运行,而要求人为地隔一段时间运行一次VACUUM。所以,在新的一年中这方面加强自己的完善性。

  对于无事务的MyISAM表处理,MySQL采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。

  客观而言,PostgreSQL的技术特性与商业应用是比较接近的。

  PostgreSQL率先支持存储过程,这就可以保证在不增加数据库服务器负担的前提下,对以一些严肃的商业逻辑进行封装,还可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。同时,存储过程的存在也避免了在网络上大量的原始的SQL语句的传输。

  PostgreSQL支持视图,对于视图权限的合理使用可以提供行级别的权限,这是MySQL的权限系统所无法实现的。另外,它还支持触发器、约束、子查询、R-trees可扩展索引类型、UDF(用户定义函数)扩展。以PostgreSQL的这些技术性能,似乎没有理由去据MySQL之后,但是, MySQL的流行性和广泛性使得其拥有更多的用户群、更多的开发技术支持、更丰富的应用考验、着更好的商业支持、更完善的技术文档资料。拓展自己的应用范围,提高部署安装数量,是PostgreSQL在新的一段时间内的重中之重。

  小结

   MySQL与PostgreSQL基本上已经成为开源数据库的代表产品,其他的一些开源数据库与这二者相比,在总体技术性能、应用部署、下载量等方面都不太具有代表性。但是,MySQL与PostgreSQL在向企业级商业数据库产品前进的战略和路线,可以做为其他开源数据库的前车之鉴。

  开源数据库与主流专有商业数据库的竞争关系是显而易见的,但是随着“开源模式”的趋于成熟和稳定,以及对传统专有商业软件业的影响甚至颠覆,数据库产品领域不再是“一家独大”。用户在以后的产品采购决策中,会更加青睐对开源数据库的选择。但是,开源数据库产品在自身技术特性和功能特性的提高和完善上需要寻找一个平衡点,不要去过分地遵循专有商业数据库的产品路线图,而是要找出适合自身发展的技术、市场切入点。

 

it168