技术开发 频道

PostgreSQL与MySQL:非常好的开源数据库之争

  【IT168 专稿】为企业选择一个适合的数据库,需要做一个相当长远的打算,因为如果日后改变选择,将付出非常艰难又昂贵的代价。所以必须第一次就做出正确的选择。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

  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具有代表性的网站:

  MySQL:

  Slashdot(资讯科技网站)

  Twitter

  Facebook

  Wikipedia(维基百科)

  PostgreSQL:

  Yahoo运行一个多拍字节修改后的PostgreSQL数据库处理每天数十亿事件

  Reddit(新闻网站)

  Disqus(社会性媒体)

  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更加灵活,拥有为不同的工作负载量身定制的更多选择。通常,企业熟悉特定的软件要比了解不同数据库的差异更为重要,因此,如果企业已经在使用其中一个数据库,那就应该坚持下去。如果非得

  为一个新项目(包括网站的后台)选择数据库,PostgreSQL将是不错的选择,因为它的可靠性和数据完整性。

0
相关文章