从每种数据库的特有功能来看, MySQL特有的可插拔式数据存储引擎接口是一个亮点,允许用户根据自己的需要选择特定的存储引擎,数个列式数据库厂商推出了自己的引擎集成到MySQL中,用户也能从中获益,无需修改自己的大部分代码,就可用到与使用新引擎之前完全不同的一种功能,带来某方面性能的大幅度提升。mysql slow log 是用来记录执行时间较长(超过long_query_time秒)的sql的一种日志工具,可以自动记录慢SQL语句,非常有利于DBA监控,比起Oracle数据库要用AWR工具等获取此类信息要方便了不少,当然它记录的信息比较简单。PostgreSQL的开放性带来了许多插件,比如PostGIS,就是一个空间数据库的插件,通过创建PostGIS模板的数据库就可以用到空间数据库的功能。值得深思的是,各种数据库面向对象功能的推出已经时间不短了,但到目前为止,仍没有一个成功的商业案例。
集群是数据库规模变大时横向扩展的一种手段,Oracle的RAC功能已经相当完善,和硬件绑定的Exadata更是将数据库性能提高到了一个新的高度。MySQL也单独发布MySQL Cluster版本,PostgreSQL集群主要有第三方公司提供,例如Greenplum和EnterpriseDB。
业界有一个数据库软件和服务器硬件捆绑的趋势,3大商业数据库在这方面都有动作,Oracle最早动手,2009年就和HP公司合作推出Exadata,收购Sun公司后推出使用自家硬件的v2,使用SSD缓存,infiniBand交换机和intel CPU的PC服务器构建的存储服务器和数据库服务器。IBM的Db2 purescale借鉴了大型机上的技术,利用db2 9.8和Power主机结合,数据共享组中的各成员可以通过一个非常有效的 InfiniBand™ 网络直接与 PowerHA pureScale 组件通信,GPFS(IBM General Parallel File System)实现了高度的可伸缩性和可用性,对应用程序是透明的。微软没有公布其SQL Server 2008 R2 并行数据仓库版(Parallel Data Warehouse )的细节,只是宣称支持数百TB的数据量和MPP架构,并从HP获得应用的硬件设备。
一些额外的功能,各种数据库都有值得提升的地方,比如压缩,MySQL数据库压缩后查询效率下降幅度很大,Oracle则压缩比不高,不过后者已经在Exadata中得到了改善。
从文档来看,商业数据库也较免费数据库更有优势,资料的分类较多,用户可以方便地获取到自己需要的部分信息,DB2和MS SQL Server在文档本地化方面做得最好,MySQL和PostgreSQL其实在开源数据库界,它们的文档也算是很出色的,不过和商业数据库比较还是稍弱一些。
下面将各种数据库的功能和性能排名罗列如下,按照在各自测试项目中的表现,分别打1-3分,1分为最优,3分最差。最后加总所有项目的分数,分数越小越好,这里没有考虑价格因素,仅仅是从一个最终用户使用的角度做出的评价。
读者可以依据自己对不同项目的重视程度赋予不同的权数再加总,以求得自己心目中的优胜者。
▲表5 各种数据库综合评分
所有的数据库目前都面临着网络时代新的业务模式的挑战,对于web2.0网站来说,存在对数据库高并发读写的需求、对海量数据的高效率存储和访问的需求、对数据库的高可扩展性和高可用性的需求。在上面提到的“三高”需求面前,关系数据库遇到了难以克服的障碍,而关系数据库的很多主要特性却往往无用武之地,例如:数据库事务一致性需求、数据库的写实时性和读实时性需求,因此数据库事务管理成了数据库高负载下一个沉重的负担,对复杂的SQL查询,特别是多表关联查询的需求。由此产生了NoSQL (非关系型数据存储)。它打破了长久以来关系型数据库与 ACID 理论大一统的局面。NoSQL 数据存储不需要固定的表结构,通常也不存在连接 操作。在大数据存取上具备关系型数据库无法比拟的性能优势。虽然它们的应用场景不同,但值得数据库提供商和开发人员关注,以跟上实际应用的步伐。