有没有这样一个数据库?它不仅可以让你来存储你的所有数据,而且不用你去购买软件授权,花很少的钱就可以获得技术支持。或许你认为这是白日做梦,实际上这样的事情是确实存在的,它们的名字叫做“开源数据库”。
但是,开源数据库和其他事物一样,并非完美无缺,它可能会让你付出另一种类型的代价,可能是比较低的数据处理数量、缺少的功能、受限制的图形化管理,或者是一些其他商业数据库有而开源数据库不具备的的东西。
当前主流的商业数据库有Oracle、微软SQL Server、IBM DB2和Sybase Adaptive SQL Server。而在开源方面,主要有三家主流数据库:MySQL、PostgreSQL和Ingres。所有这些数据库管理系统都已经在市场上存在了十年以上。
这两类数据库都已经证明了自己可以胜任数据存储和管理的需要。世界上大大小小的公司,从最小的新兴公司到世界500强的大企业,再到政府部门,每天都在使用这些产品中的一种或多种,并放心地把它们的数据交给这些数据库。
图1:部分数据库产品路线图
本篇文章通过对开源和商业数据库的用户及厂商的分析,可以看到开源数据库正在通过不同的方面来完善自己。从商业的角度来看,开源数据库正联合起来来对抗它们的商业竞争对手。另外,在本文中我们还将讨论,对于不同的应用情况是否具有选择开源数据库的理由。
希望这篇文章能成为一块敲门砖、问路石,在你开始研究开源数据库,在你考察是否将它们应用到你的企业中的时候,希望对你有些帮助作用。
大多开发者使用的数据库都不止一个,有四个因素是我们很明显要考虑的。首先是易用性,这是应用程序是否被选用的一个关键因素。图形化管理界面也是被人们经常提到的。另外,在决定为每一个应用程序选用什么数据库的时候,功能的深度也起着重要的作用。最后,软件的成本问题也是大多数人所关注的。
对比2004—2006年三大企业级数据库的市场份额是涨幅变化,如下图:
图5:2004—2006年全球关系型DBMS软件厂商利润和市场份额分布
4. 商业数据库之Sybase
最新版本的Sybase Adaptive Server与以前的版本相比,具有更丰富的功能设置,但是与上面Oracle和DB2两个商业数据库相比还是少很多,举个例子来说,它缺少对高可用群集和在线索引重建的支持。这或许是为什么在IDC的一次调查中,它仅排名第四,只有可怜的3.2%的市场份额。
Sybase比较强大的地方在于它对资源的低占有率上。在这一方面,Sybase 15还引入了新的“专利查询过程技术”,显示了增强的性能和降低的硬件资源消耗。
另一方面,Sybase正在通过其SQL Anywhere数据库服务器进入移动领域。SQL Anywhere功能之一就是其常驻内存的数据库管理系统,可以运行在Windows Mobile、Windows、Palm OS和Symbian上。
图6:Syabse数据仓库
关于Sybase还有一个很有意思的历史插曲,微软的SQL Server是从Sybase开发而来的。微软和Sybase签订了一个合约,微软被授权可以销售一个重新包装的Sybase,或在它的基础上开发一个它自己的版本。尽管微软已经对其进行了很多修改,你依然可以在SQL Server的命令组成中看到两者之间的渊源。
5.开源数据库之MySQL
MySQL是开源数据库中的佼佼者,它的用户数是在同类开源数据库中是最多的,它既可以被小的新兴公司所使用,也可以被采用了操作系统集群的大型Web站点所使用。
MySQL拥有很多插入式的存储引擎,用来给用户提供不同的所需功能,而不是默认具有全部功能。这也是为什么MySQL会在数据恢复操作中具有最佳表现的另一个原因。
自从MySQL第一版发布以来,就提供一个存储引擎接口。它让用户来根据需要选择数据存储引擎。MySQL既有事务安全(ACID兼容)的存储引擎(诸如InnoDB、Falcon),也有不支持事务处理的存储引擎(MyISAM)、日志引擎(不能被更新或删除,Archive)和通过无共享体系结构实现高可用性的群集技术, MySQL还有专有的第三方引擎,例如InfoBright和Nitro。
图6:Syabse数据仓库
关于Sybase还有一个很有意思的历史插曲,微软的SQL Server是从Sybase开发而来的。微软和Sybase签订了一个合约,微软被授权可以销售一个重新包装的Sybase,或在它的基础上开发一个它自己的版本。尽管微软已经对其进行了很多修改,你依然可以在SQL Server的命令组成中看到两者之间的渊源。
5.开源数据库之MySQL
MySQL是开源数据库中的佼佼者,它的用户数是在同类开源数据库中是最多的,它既可以被小的新兴公司所使用,也可以被采用了操作系统集群的大型Web站点所使用。
MySQL拥有很多插入式的存储引擎,用来给用户提供不同的所需功能,而不是默认具有全部功能。这也是为什么MySQL会在数据恢复操作中具有最佳表现的另一个原因。
自从MySQL第一版发布以来,就提供一个存储引擎接口。它让用户来根据需要选择数据存储引擎。MySQL既有事务安全(ACID兼容)的存储引擎(诸如InnoDB、Falcon),也有不支持事务处理的存储引擎(MyISAM)、日志引擎(不能被更新或删除,Archive)和通过无共享体系结构实现高可用性的群集技术, MySQL还有专有的第三方引擎,例如InfoBright和Nitro。
图7:MySQL体系结构
MySQL拥有很多实现特定功能的存储引擎,但是并不建议你全部安装它们。而像Google这样的公司则编写了自己的存储引擎来加速它们的常用操作。
MySQL与Oracle相比的一个优势就是它对资源的占用非常少。MySQL是实现数据恢复方面最快的数据库,但是它的确缺少一些在Oracle中的功能。
MySQL从来没有想过与其他数据库在功能数量上一较高下,MySQL的目标是易用、稳定和性能。MySQL现在具有丰富的功能,已经得到了很多开发者的支持。
6. 开源数据库之PostgreSQL
在开源数据库中,PostgreSQL以其丰富的功能而显得格外突出,其中包括存储过程、表分区(partitioning)、多过程语言支持和多种数据类型和索引的支持。
另外,PostgreSQL的标准兼容性和严格的安全功能也被众多用户所称道。PostgreSQL的在线事务处理(OLTP)是其最受欢迎的功能,在开源数据库中,它的数据仓库方面也是表现最好的。
图8:PostgreSQL V8.1 架构
由于PostgreSQL是一个被不同公司支持的社区控制型开源项目,很多公司提供对它的支持,诸如Sun、Fujitsu、SRA和Red Hat和很多新兴公司和顾问公司。PostgrefSQL在日本的市场情况很不错,仅次于Oracle。
7. 开源数据库之Ingres
在Ingres 2006版中引入了很多新功能,其中一些功能是关于大规模部署方面的,例如键范围表分区(key range table partitioning)和并行查询支持。
另外,诸如存储过程、触发器和视图功能早已被Ingres所支持,不过Ingres现在还不支持内部任务。
8.嵌入式数据库应用
数据库的一个比较特别的应用案例是嵌入式应用程序,在这方面应用中,低资源占用成为一个必需的要求。
MySQL由于其设计理念,在这一方面被应用的比较多。微软的SQL Server 2005 Express版也被做为嵌入式数据库使用,它被认为是微软数据库引擎(MSDE)的下一版本,而且它也是完全免费的。而Oracle则又通过收购得来的TimesTen内存数据库来满足嵌入式应用程序。
Linux是开源数据库的首选操作系统,因为它们都是开源而且完全免费的产品。现在的消费电子产品市场中,Linux变种已经被广泛应用。而这也使得开源数据库们在嵌入式应用程序受益。
二、如何选择适合自己的数据库?
1.按需求来选择
事实上,现在没有完美无缺的数据库,无论是商业数据库,还是开源数据库。
我们发现,选择一个数据库的主要理由就是它的功能是否可以很好地支持你的应用程序。人们通常使用数据库来完成的任务有:支持Web、事务处理、文本搜索,有的情况下复制也是一个重要的要求。
在事务处理方面,Oracle看上去更有领先优势,接下来是微软的SQL Server。没有一个开源数据库具有可以与Oracle相媲美的事务处理功能。
在那些要求功能丰富的情况下,开源数据库们并不比商业数据库有什么优势。人们经常提到的商业数据库的优势功能有存储过程、触发器和一些安全功能。
不过,正如我们上面提到过的,自从Ingres问世以来就支持触发器和存储过程。PostgreSQL对这些功能也早已支持。在MySQL的新版中最近也增加了存储过程和触发器功能。
对于支持Web应用程序,MySQL看上去要比其他对手表现好。Web应用程序主要是对数据库进行读取操作。MySQL在这方面以速度快而见长。一些用户表示,在快速阅读操作方面,MySQL至少不比Oracle差。但是,当任务从阅读数据库转向处理一个客户购买操作的时候,用户则可能更倾向于选择Oracle而不是MySQL。
在复制和群集功能上,MySQL给人的印象差别很大。MySQL中的单向复制表现惊人,但是,MySQl的群集功能被应用的不多,因为它只是基于内存的。
2. 按易用性和管理来选择
开源数据库们主要是以命令行工具中管理。尽管也有一些图形工具可用,但是与Oracle等商业数据库自带的图形管理工具相比,它们还显得不够灵活和稳定。
在图形化管理方面的赢家无疑是微软。微软的SQL Server管理工具不是基于浏览器的,而是自带的一个终端平台。这使得它有能力完成一些Web浏览器所不能实现的强大功能。一些用户希望Oracle中的管理功能也和SQL Server中一样好。
3. 按支持性来选择
当讨论开源软件的时候我们听到最频繁的问题是:“我们从哪儿能得到支持?”
MySQL为它自己的客户提供24*7、30分钟响应时间的支持。在其Unlimited服务中还有很多不同的付费支持级别。正如上面所提到的,PostgreSQL的支持来自于不同的平台厂商,支持的内容、成本、地区和要求因厂商不同而不完全一样。
由于开源数据库的源代码可以被任何人查看和修改,这导致了几个潜在的问题。
一个合法客户对数据库进行了修改会发生什么?Sun公司不会对这种情况提供支持,而MySQL公司将提供支持,但是需要满足一些特定条件和情况。事实上,能对这些开源产品进行修改的客户的数量是非常少的——这与产品的复杂度有关系。
另一个开源软件的问题是,任何人可以对产品进行修改的现实会带来一些潜在的漏洞或安全问题。诸如此类的事情已经发生过,客户需要确信从熟悉的网站下载这些产品,并且确认它们可以通过MD5校验。
4. 按成本因素来选择
数据库中成本因素是非常简单的。
对于开源数据库,你可以免费得到授权,但是同时也牺牲了一些功能。而对于商业数据库,你可以使用更多强大的功能,但是你需要按每个拷贝或每个CPU来支付授权费用。
对于开源数据库,在维护成本方面,尽管看上去你可以选择不从厂商那儿购买支持合同,因为你拥有源代码,但是实际上并不如此简单。
虽然你可以选择修改源代码,但是当新版数据库出来后,你所做的修改不得不重新进行实施,而且你曾经所做的修改可能已经没有必要,因为新版中增加了相应的功能。对我们来说,唯一比较实际的做法就是成为这个数据库开发社区中的一员,这可能需要你投入大量的时间,其成本或许会超过购买一个支持合同。
对于商业数据库,你只有面临一个选择,如果你想得到来自它们的维护支持,那么就购买它们的支持合同。
三、结论
总体来说,选择什么样的数据库要看你的应用程序的需要。如果它是以阅读数据库为主的Web应用,MySQL无疑是最佳选择。而如果需要那些事务处理和复杂的数据库功能,那么可能是Oracle和微软的SQL Server的地盘。如果你需要一些商业数据库的高级功,但又不想支付授权费用,那么看一下PostgreSQL或Ingres。对于嵌入式数据库应用,MySQL和Sybase所占有的系统资源最少。
如果你因为害怕缺乏支持而对开源数据库敬而远之,那么我们的文章已经告诉你,你可以把这些担心抛开了,三个主流开源数据库都由实力强大的企业或组织来提供支持,响应时间和专业程度完全可以和商业数据库厂商相媲美。
切记,不选最好的,只选最适合你的。