免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 15899 | 回复: 22

PostgreSQL .vs. MySQL特性对比 [复制链接]

论坛徽章:
0
发表于 2009-04-07 09:38 |显示全部楼层
原文连接:http://www.enterprisedb.org.cn/?action-viewthread-tid-29

PostgreSQL .vs. MySQL特性对比

字体: 小 中 大 | 打印 发表于: 2009-4-07 09:31    作者: scott.siu    来源: EnterpriseDB中文社区

简介
当前在开源数据库领域PostgreSQL数据库是公认的最好的企业级数据库新产品方案,在MySQL数据库中很多企业级数据库的应用要素没有完整的提供。然而,在企业中包括架构师、开发人员或数据库管理员(DBA)在考虑应用的数据库架构,或IT决策部门选择企业级数据库时都选择了市场上比最流行的 MySQL,对于系统的企业级数据库来说只有市场的流行是不够的,各种企业级特性及完整的体系方案才是企业选择数据库要关注的要点。

这份白皮书从多方面讨论PostgreSQL及EnterpriseDB基于PostgreSQL开发的企业级数据库产品Postgre Plus Advanced Server的特点、功能及性能,帮助数据库管理人员更深入地与MySQL进行对比。当中最重要的话题包括:数据库性能、查询优化、事务处理支持如 ACID、对过程语言及触发器的支持及各种行业标准的安全认证模式等。

在相当多的方面MySQL表现得很不完善,而这些功能Postgre Plus Advanced Server都已经做得很好并十分成熟。虽然重新设计并架构一个新的数据应用方案是十分花费时间、金钱并可会遇到不少问题。但通过本白皮书的介绍,你将会发现在很多功能及应用中,由于MySQL的制约将有可能阻碍企业IT架构的发展,由此重新设计及架构系统的花费变得十分有意义。


性能
MySQL主要是发展方向是高性能的数据库,并且这一点在Web应用及倾向于读操作的系统应用中得到业界的一致认同。但是这些性能因素都只被设计在 MySQL的默认存储引擎MyISAM上,有很多企业级应用中不适合使用MyISAM引擎。MyISAM基于IBM's Indexed Sequentail Access Method (ISAM)数据引敬,最初设计快速读取已排列的数据。在这样的环境中,MyISAM提供了相当高的速度。但是MySQL在基于ISAM的开发中已经发现了不少数据库管理问题,如:

数据“脏读”
对于一个企业级数据库来说,数据一定要保证其可用性及完整性。但是MyISAM中数据的“脏读”
问题是公认的毛病,清理因“脏读”问题而产生的错误是不少MySQL应用系统中的每日工作开销。更严重的问题是,一些由于“脏读”而引发的应用级另写入错误是不可恢复的。

锁的争夺
行级锁是广泛认同的企业级数据库基础要求,MyISAM不支持行级锁,而是使用表级锁进行,这很明显不适合多用户的并发读写应用,在这样的应用下很容易造成锁的争压,降低数据库系统性能。

在线管理
由于MyISAM不支持多版本控制,很多日常的管理例如:在正运行数据的表中增加字段是十分危险的。这个由于对多版本控制的不足往往使DBA虽要对数据库进行停相以进行这些简单的修改。

部分MyISAM的问题可以通过选择另一种数据库引擎InnoDB(此引擎的开发商已经被Oracle收购),进行解决。但是不少用户都依然只是使用 MyISAM,因为这是MySQL默认的数据库技术支持相对也比较好。MySQL正在开发及创办为Michael公开指出,MyISAM的一些不足有可能在日后的MySQL 6.1版本中得到修正。

对比MySQL,PostgreSQL是一个十分不一样的架构,并不存在这些问题。所的有PostgreSQL操作都是基于多版本应用的,通过多版本并发控制(Multi-Version Concurrency Control – MVCC)进行管理。因此,数据库中的公共性操作,如:重建索引、添加删除字段、重建视图等都可以在线进行不需要设定额外的锁,允许DBA执行各种在线的数据库维护,同时不影响应用程序及用户的正常使用。


查询优化
MySQL的API系统接口对于查询优化、查询计划器及动态的调优的支持都不如理想,虽然当前有MySQL支持了多种数据库引擎可以适应于不同数据库需求,但依然不能解决核心API的功能限制问题。优秀的优化工具可以通过数据库API进行对特定应用的操作优化,以大幅度提高数据库性能,在这一点上 PostgreSQL提供了良好的API接口,并已经在内部集成一整套数据查询优化方案。


事务处理支持
企业级数据库必须提供事务处理的支持。在数据库行中,一个事务就是一个完整操作的过程,可能包括两个或以上的操作。例如,一对简单的减少及增大数目的操作以使用总数得到平衡,两个操作必须完整执行;首先在一个记录中对字段值行减少,然后在另一个记录中对字段值进行增大,一但其中一个操作出现非预期的结果整个操作都必须进行回滚使数据恢复到事务开始前的状态。在数据库中,一般把这样的特性称为“原子性”。

以下性质就是“ACID”的详细分解,被广泛地应用于定义数据库事务处理要求:
1. 原子性(Atomicity)
事务的原子性是指事务中包含的所有操作要么全做,要么全不做(all or none)。
2. 一致性(Consistency)
在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态。
3. 隔离性(Isolation)
事务隔离性要求系统必须保证事务不受其他并发执行的事务的影响,也即要达到这样一种效果:对于任何一对事务T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前已经结束,要么在 T1 完成之后才开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。
4. 持久性(Durability)
一个事务一旦成功完成,它对数据库的改变必须是永久的,即便是在系统遇到故障的情况下也不会丢失。数据的重要性决定了事务持久性的重要性。

简单地说,PostgreSQL完全遵守ACID规范,但MyISAM做不到这一点,PostgreSQL完合支持事务处理应用,但MyISAM不完全支持。InnoDB可以较好地支持ACID规范,但性能比MyISAM有较大差据,网上有不少高并发压力测试的结果都表明InnoDB的并发访问性能只能达到PostgreSQL的70-80%。

性能方面的比较可以参考(postgresql的一个社区,可能有些片面,仅供参考;但当中的很多测试都不是社区自己做的里面包括有FreeBSD做的与LINUX对比的测试结果):
http://postgresql-chinese.blogsp ... E%E7%95%B0%E6%80%A7


完整的关系约束(外键)
表关系约束可以确保多个表之间数据的一致性,是另外一个企业级数据库所必须的特性。例如:每一个员工都应该有各自所属的部门,在员工的表中有一个外键与部门表的主键进行关联,一但要删除部门表中的某个行,必须要求先修改所有员工表中与此行主键相关联的数据,并给于错误信息提示;由此保证不会出现没有部门归属的员工。

PosgreSQL对关系约束有的支持已经有20年历史。对比MySQL只有少数的数据库引擎支持关系约束,但由于MySQL对于在不支持关系约束的引擎进行约束建立时不会出现任何的报错信息,这使得数据库管理员通常要在建立表以后重新对应用进行重新检查,通过外部程序编写每次修改时的关系约速自定义确认,以实现此功能。


过程语言支持
在商业应用的设计中通过提供自定义函数及过程语言,以允许开发者或DBA在数据中开发或执行自己的应用,提高数据的处理速度,并有效减轻网络压力。然而过程语言的支持只是在最近才加入到MySQL当中,PostgreSQL自从1998年的6.3版本开始就支持包括PL/SQL及Tcl相类似的过程语言。

由于PostgreSQL是一个可扩展的数据库,开发者可以开发他们自己的过程语言。因此,当前PostgreSQL是当前全球支持过程语言最多的数据库,已经支持过程语言语法有:Perl、Tcl、Python、Ruby、PHP等。


触发器支持
和过程语言一样,触发器的支持也是在最新才加入到MySQL中。不幸的是,MySQL的触动器只提供基于“per-statement”的处理,无法进行更多定义的处理操作,这是一个严重的功能缺陷。PostgreSQL早在1998年6.3的版本中就支持这种低级的触发器,当前PostgreSQL已经支持“row-level”及“statement-level”触发级别,支持“before”及“after”操作操作顺序,是完全符合ISO标准的触发器功能。


安全认证模式的支持
PostgreSQL是一个公认符合行业高安全标准的数据库,支持多种安全认证模式包括: trust、password、GSSAPI、SSPI、Kerberos、Ident、LDAP及PAM。
MySQL只支持自己的数据库内部身份认证,支持其它标准,也不支持扩展,是一个内部认证系统。这使得企业用户的安全身份证变得十分困难,因为数据库帐号不能在系统中进行同一管理。


总结
PostgreSQL比MySQL更适合用于企业的核心关键应用,是行业长年以来的共识,这个要取决于数据库的特性、功能及并发处理性能。MySQL当前被业界广泛应用,这主要是用于业务操作无关的运行系统,如:Web网站。不少企业IT部门出于对当前市场应用的广泛度,过份乐观地选择使用MySQL开发他们的产品。


以上都是我自己的一些理解,如果大家认为有问题请指出进行讨论。


Postgres Plus™ Advanced Server简介
EnterpriseDB基于全球最新进的开源数据库PostgreSQL引擎,开发出Postgres Plus™ Advanced Server。 Postgres Plus™ Advanced Server是一个企业级关系型数据库(RDBMS)适用于要求高稳定性、高容量、高性能的关业务系统。EnterpriseDB主要对 PostgreSQL的性能及Oracle兼容性进行了提高。

Postgres Plus™ Advanced Server最特别的地方在于,他提供直接运行Oracle数据库应用的能力,基于Oracle开发的应用程序无需经过代码修改就可以运行在 Postgres Plus™ Advanced Server上。EnterpriseDB的Oracle兼容性使得企业可以有效地保护他们的现有技术投资,同时良好的兼容性使得客户在进行数据库迁移时可以大大节省工作时间,提高工作效率,并且避免重新对应用进行程序编码的修改,减少因程序改动而重新进行应用测试的工作量。

在EnterpriseDB位于英国牛津大学的性能实验中心,EnterpriseDB数据库的性能调优专家对 Postgres Plus™ Advanced Server进行了深入的优化,使得PostgreSQL原有的高性能OLTP运行性能双一次得到大幅提高,以提供企业级数据库所需的性能要求。事实上Oracle的数据库应用在EnterpriseDB数据库中运行时,用户会发现整体应用性能与Oracle相当,甚至可能更高。


如果您想要更多相关的资料,请与我联系!

论坛徽章:
0
发表于 2009-04-23 11:29 |显示全部楼层
强大。。

论坛徽章:
0
发表于 2009-04-24 10:46 |显示全部楼层
还没有机会用上PostgreSQL

论坛徽章:
0
发表于 2009-04-24 16:01 |显示全部楼层

回复 #3 lastexile 的帖子

呵呵,有机会多用!!!

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
发表于 2009-04-25 12:55 |显示全部楼层
sun完了,现在MySQL的前途还不十分明确。

论坛徽章:
0
发表于 2009-04-25 15:49 |显示全部楼层

回复 #5 fender0107401 的帖子

MySQL有自己的价值,如果不是用要企业OLTP类的应用上,性能没得说。

MySQL应该不会在短期内有太大变化,另外MySQL的老大也正在重新开“分支”,这是个好事!

大家请多支持开源类应用的发展。

论坛徽章:
0
发表于 2009-04-27 11:38 |显示全部楼层
看应用场合,如是web应用,mysql首选,企业级应用自然用pg

论坛徽章:
0
发表于 2009-04-27 15:30 |显示全部楼层
原帖由 zonyuan 于 2009-4-27 11:38 发表
看应用场合,如是web应用,mysql首选,企业级应用自然用pg



差不多!我的理解是:

只要对数据严谨性同时又要求并发性能的选Posgres系列。

要求特别高的并发性能,但对数据严谨性没要求的选MySQL。

另外当前见到有一些测试表明InnoDB比MyISAM性能要好,说是InnoDB在并发压力下锁管理比较优秀。理论上也的确是这样,但我自己没有测试过,希望有同仁分享一下。
junqiang 该用户已被删除
发表于 2009-04-27 23:09 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2009-04-28 18:18 |显示全部楼层
原帖由 scottsiu 于 2009-4-25 15:49 发表
MySQL有自己的价值,如果不是用要企业OLTP类的应用上,性能没得说。

MySQL应该不会在短期内有太大变化,另外MySQL的老大也正在重新开“分支”,这是个好事!

大家请多支持开源类应用的发展。

又分支?还要分多少支啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP