转自:http://down.chinaz.com/server/201108/982_1.htm
为企业选择一个适合的数据库,需要做一个相当长远的打算,因为如果日后改变选择,将付出非常艰难又昂贵的代价。所以必须第一次就做出正确的选择。MysqL和Postgresql是两个最受欢迎的开源数据库,它们往往是数据库管理员准备进行新的部署时最终的两个候选。本文通过对这两个开源数据库的概述及对比,为您选择满足企业需求的数据库提供帮助。
Postgresql
Postgresql (发音为Post-gress-cue-ell)宣称自己是世界上最先进的开源数据库。Postgresql的狂热者认为它的性能跟Oracle不分上下,而且没有高成本的负担。Postgresql拥有着悠久的历史,可以追溯到1985年,由加州大学伯克利分校最早开发,是Ingres数据库的衍生。
Postgresql是100%社区驱动的开源项目,由全球范围内千人以上的社区贡献者共同维护。Postgresql提供了一个完整功能的版本,而不像MysqL那样,提供多个不同的版本,如社区版、商业版及企业版。Postgresql的开源协议采用自由的BSD/MIT类型,这种开源协议允许任何人在保留版权声明的情况下使用、复制、修改或者分享代码。
可靠性是Postgresql最优先的事项。众所周知,Postgresql坚如磐石并且设计精密,能够支持事务处理和关键任务应用。Postgresql提供一流的文档服务,包括全面的免费在线手册,以及旧版本手册的存档。社区的支持非常出色,并且有独立厂商提供商业支持。
数据一致性和完整性也是Postgresql的高度优先事项。Postgresql是完全符合ACID原则(原子性、一致性、隔离性、持久性)的数据库。Postgresql对数据库访问提供强大的安全控制,不仅能够利用好企业安全工具,如Kerberos和OpenSSL等,还可以根据自己的业务规则自定义核对方法,以确保数据的质量。数据库管理员最喜欢的功能是时间点恢复(point-in-time recovery 简称PITR)功能,它具有灵活性、高可用性特征,能够打造快速故障的热备份服务器,以及快照和恢复到特定时间点等。但这还不是全部。该项目提供了很多方法来管理Postgresql,使Postgresql具有高可用性、负载均衡和同步功能,因此你可以利用这些功能来满足特定需求。
MysqL相对年轻,首次出现在1994年。MysqL自称是世界上最流行的开源数据库。MysqL是LAMP中的M,LAMP软件包经常用于Web开发,该软件包还包括了Linux、Apache和Perl/PHP/Python。很多应用程序建立在LAMP组合的基础上,其中包括一些很著名的应用,如wordpress、Drupa、Zend和PHPBB等。
最初MysqL被设计为快速的Web服务器后台,使用快速索引顺序访问方法(indexed sequential access method 简称ISAM),不符合ACID原则。MysqL初期已经支持一些辅助性存储引擎,并且现在可以通过InnoDB引擎履行ACID原则。MysqL还支持其它存储引擎,提供了一些功能,如MEMORY存储引擎提供的临时表,EXAMPLE存储引擎提供的开发者实例,MyISAM引擎提供的快速只读数据库,再加上其他几个核心存储引擎以及若干第三方引擎。
MysqL文档资源丰富,包括高质量的免费参考手册,许多相关书籍和网上的技术文章,并可以从Oracle和第三方供应商那里获得培训和支持。
近年来,MysqL经历了所有权变更和一系列戏剧性事件。它最初是由MysqL AB开发,MysqL AB于2008年以10亿美元的价格被Sun Microsystems公司收购。2010年Sun又被Oracle收购。Oracle提供多个版本:标准版、企业版、经典版、集群版、嵌入式版与社区版。其中有些是免费下载,也有需要付费的。核心代码使用GPL协议,不喜欢使用GPL协议的开发商和供应商可以使用商业许可证。
目前对基于原始的MysqL代码的数据库有更多的选择,因为几个关键的MysqL开发人员已经发布了MysqL的分支。Michael“Monty”Widenius是MysqL的创始人之一,开发了自己的MysqL分支,MariaDB,免费并采用GPL许可协议。Drizzle是MysqL的分支,由著名的MysqL开发人员Brian Aker开发,Drizzle进行了重大改写并改变核心观念,为多处理器、云技术、.NET应用程序和大量的并发操作进行优化。
平台和工作负载
以下是使用MysqL或者Postgresql具有代表性的网站:
- Slashdot(资讯科技网站)
- Wikipedia(维基百科)
Postgresql:
MysqL和Postgresql有很多共同点,它们都可以运行在多个操作系统上,如Linux、 Unix、Mac OS X和Windows系统;它们都是开源的和免费的,因此测试只需要耗费时间和硬件;它们都很灵活,使用范围很广,不管是小型部署还是大型分布式系统均可使用。MysqL比Postgresql小一个级别,利用libMysqLd进入嵌入式空间。Postgresql不支持嵌入式应用,坚持替代传统客户机/服务器架构。
MysqL通常被认为是网站和应用程序最快捷的数据库后台,执行快速读取和大量琐碎查询,但是提供较少的复杂功能和数据完整性检查。Postgresql被认为是正式的、功能齐全的、讲求实际的事务型企业应用主力,完全符合ACID原则以及大多数据完整性检查。为了使某些任务的速度更快,MysqL分别执行不同的存储引擎。MysqL的MyISAM是迄今为止最快的引擎,因为它执行最少的数据完整性检查。MyISAM为繁忙的只读网站后台工作,但是任何读/写数据库都包含敏感数据将会成为灾难,因为MyISAM表将不可避免的损坏。MysqL对已损坏的MyISAM表有恢复工具,但对于敏感数据,InnoDB引擎是一个更好的选择,因为它符合ACID原则。
相比之下,Postgresql是一个完全与独立存储引擎集成的数据库服务器。通过调整postgresql.conf的参数,并对查询和处理稍作调整,便可以提高性能。
MysqL和Postgresql都是可配置的,并可以为不同的任务调整以优化性能。新增功能都支持扩展。
人们通常认为MysqL比Postgresql更容易学习。其实关系数据库管理系统都是复杂的,规则较多,因此这两个数据库具有相似的学习曲线。
符合标准
Postgresql目标是符合sql标准(现行的标准是ANSI - sql:2008)。MysqL基本上符合sql标准,但其自身也扩展和支持非sql功能。每种方式各有利弊。坚持标准对于数据库管理员、数据库开发人员和应用程序开发者来说将会变得更容易,这意味着他们只需要学习一种标准,只需要使用和支持同一公共集合的功能和命令,并且这些代码是可移植的。这就节省了时间和精力,并从供应商的限制中得到解脱。
支持使用非相容性定制的理由,包括自由迅速的推出有用的新特点,而不是等待通过标准过程。ANSI/ISO标准变化发展,因此符合标准也是一个不断变化的目标; 知名的RDBMSes,如微软sql Server、甲骨文和IBM的DB2只符合部分标准。大多数MysqL定制不是完全的变革,例如,单引号和双引号表现方式的差异,以及MysqL的转义字符表现方式的差异,这些似乎不会形成干扰或者造成潜在的错误。MysqL支持多个sql模式,如ANSI,更增加的其复杂性。对传统sql标准更加符合,尤其是再严格的数据输入检查,以及其他各种严格的和宽松的数据检查模式。
总结
Postgresql和MysqL尽管有着不同的历史、引擎和工具,但它们在使用上并没有明显的区别。若选择Postgresql是因为它的可靠性和对数据保护的优势。而MysqL更加灵活,拥有为不同的工作负载量身定制的更多选择。通常,企业熟悉特定的软件要比了解不同数据库的差异更为重要,因此,如果企业已经在使用其中一个数据库,那就应该坚持下去。如果非得