热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL与MySQL之间的选择

为企业选择一个适合的数据库,需要做一个相当长远的打算,因为如果日后改变选择,将付出非常艰难又昂贵的代价。所以必须第一次就做出正确的选择。MySQL和PostgreSQL是两个最受欢迎的开源数据库,它们往往是数据库管理员准备进行新的部署时最终的两个候

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


推荐阅读
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了一种方法,通过使用Python的ctypes库来调用C++代码。具体实例为实现一个简单的加法器,并详细说明了从编写C++代码到编译及最终在Python中调用的全过程。 ... [详细]
  • 高级缩放示例.就像谷歌地图一样.它仅缩放图块,但不缩放整个图像.因此,缩放的瓷砖占据了恒定的记忆,并且不会为大型缩放图像调整大小的图像.对于简化的缩放示例lookhere.在Win ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 2019-2020学年 20174325 叶竞蔚 《网络对抗技术》实验六:Metasploit基础应用
    本实验旨在掌握Metasploit框架的基本应用方法,重点学习三种常见的攻击方式及其实施思路。实验内容包括一次主动攻击(如MS08-067)、一次针对浏览器的攻击(如MS11-050)以及一次针对客户端的攻击(如Adobe漏洞利用)。此外,还包括成功应用一个辅助模块。 ... [详细]
  • 每种编程语言都有其独特的完成任务的方式,这也说明了为什么有这么多语言可供选择。在JimHall的《不同的编程语言如何完成相同的事情》文章中,他演示了13种不同的语言如何使用不同的语 ... [详细]
  • 本文介绍了如何在Linux系统中获取库源码,并在从源代码编译软件时收集所需的依赖项列表。 ... [详细]
author-avatar
仇顺嵐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有