PostgreSQL与MySql比较Word格式.docx
- 文档编号:20864880
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:26.16KB
PostgreSQL与MySql比较Word格式.docx
《PostgreSQL与MySql比较Word格式.docx》由会员分享,可在线阅读,更多相关《PostgreSQL与MySql比较Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
3.3MySQL特性和功能11
3.4社区为王11
3.5共享许可12
3.6小结12
MySQL与PostgreSQL对比一
PostgreSQL由于是类似Oracle的多进程框架,所以能支持高并发的应用场景,这点与Oracle数据库很像,所以把OracleDBA转到PostgreSQL数据库上是比较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。
同时,PostgreSQL数据库的源代码要比MySQL数据库的源代码更容易读懂,如果团队的C语言能力比较强的话,就能在PostgreSQL数据库上做开发,比方说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。
为了说明PostgreSQL的功能,我下面简要对比一下PostgreSQL数据库与MySQL数据库之间的差异:
我们先借助Jametong翻译的"
从Oracle迁移到Mysql之前必须知道的50件事"
,看一看如何把Oracle转到MySQL中的困难:
1.对子查询的优化表现不佳.
2.对复杂查询的处理较弱
3.查询优化器不够成熟
4.性能优化工具与度量信息不足
5.审计功能相对较弱
6.安全功能不成熟,甚至可以说很粗糙.没有用户组与角色的概念,没有回收权限的功能(仅仅可以授予权限).当一个用户从不同的主机/网络以同样地用户名/密码登录之后,可能被当作完全不同的用户来处理.没有类似于Oracle的内置的加密功能.
7.身份验证功能是完全内置的.不支持LDAP,ActiveDirectory以及其它类似的外部身份验证功能.
8.MysqlCluster可能与你的想象有较大差异.
9.存储过程与触发器的功能有限.
10.垂直扩展性较弱.
11.不支持MPP(大规模并行处理).
12.支持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差.
13.对于时间、日期、间隔等时间类型没有秒以下级别的存储类型.
14.可用来编写存储过程、触发器、计划事件以及存储函数的语言功能较弱.
15.没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能.
16.不支持快照功能.
17.不支持数据库链(databaselink).有一种叫做Federated的存储引擎可以作为一个中转将查询语句传递到远程服务器的一个表上,不过,它功能很粗糙并且漏洞很多.
18.数据完整性检查非常薄弱,即使是基本的完整性约束,也往往不能执行。
19.优化查询语句执行计划的优化器提示非常少.
20.只有一种表连接类型:
嵌套循环连接(nested-loop),不支持排序-合并连接(sort-mergejoin)与散列连接(hashjoin).
21.大部分查询只能使用表上的单一索引;
在某些情况下,会存在使用多个索引的查询,但是查询优化器通常会低估其成本,它们常常比表扫描还要慢.
22.不支持位图索引(bitmapindex).每种存储引擎都支持不同类型的索引.大部分存储引擎都支持B-Tree索引.
23.管理工具较少,功能也不够成熟.
24.没有成熟能够令人满意的IDE工具与调试程序.可能不得不在文本编辑器中编写存储过程,并且通过往表(调试日志表)中插入记录的方式来做调试.
25.每个表都可以使用一种不同的存储引擎.
26.每个存储引擎在行为表现、特性以及功能上都可能有很大差异.
27.大部分存储引擎都不支持外键.
28.默认的存储引擎(MyISAM)不支持事务,并且很容易损坏.
29.最先进最流行的存储引擎InnoDB由Oracle拥有.
30.有些执行计划只支持特定的存储引擎.特定类型的Count查询,在这种存储引擎中执行很快,在另外一种存储引擎中可能会很慢.
31.执行计划并不是全局共享的,,仅仅在连接内部是共享的.
32.全文搜索功能有限,只适用于非事务性存储引擎.Ditto用于地理信息系统/空间类型和查询.
33.没有资源控制.一个完全XX的用户可以毫不费力地耗尽服务器的所有内存并使其崩溃,或者可以耗尽所有CPU资源.
34.没有集成商业智能(businessintelligence),OLAP**数据集等软件包.
35.没有与GridControl类似的工具(
)
36.没有类似于RAC的功能.如果你问”如何使用Mysql来构造RAC”,只能说你问错了问题.
37.不支持用户自定义类型或域(domain).
38.每个查询支持的连接的数量最大为61.
39.MySQL支持的SQL语法(ANSISQL标准)的很小一部分.不支持递归查询、通用表表达式(Oracle的with语句)或者窗口函数(分析函数).支持部分类似于Merge或者类似特性的SQL语法扩展,不过相对于Oracle来讲功能非常简单.
40.不支持功能列(基于计算或者表达式的列,Oracle11g开始支持计算列,以及早期版本就支持虚列(rownum,rowid)).
41.不支持函数索引,只能在创建基于具体列的索引.
42.不支持物化视图.
43.不同的存储引擎之间,统计信息差别很大,并且所有的存储引擎支持的统计信息都只支持简单的基数(cardinality)与一定范围内的记录数(rows-in-a-range).换句话说,数据分布统计信息是有限的.更新统计信息的机制也不多.
44.没有内置的负载均衡与故障切换机制.
45.复制(Replication)功能是异步的,并且有很大的局限性.例如,它是单线程的(single-threaded),因此一个处理能力更强的Slave的恢复速度也很难跟上处理能力相对较慢的Master.
46.Cluster并不如想象的那么完美.或许我已经提过这一点,但是这一点值得再说一遍.
47.数据字典(INFORMATION_SCHEMA)功能很有限,并且访问速度很慢(在繁忙的系统上还很容易发生崩溃).
48.不支持在线的AlterTable操作.
49.不支持Sequence.
50.类似于ALTERTABLE或CREATETABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复.Schame被保存在文件系统上,这一点与它使用的存储引擎无关.
PostgreSQL数据库可以解决以上问题中的:
1.对子查询的优化表现不佳
PostgreSQL完全支持SQL-92标准,对SQL的支持也很全面,可以支持复杂的SQL查询。
PostgreSQL提供了执行计划和详细的cost值,可以方便看到SQL的执行效率。
PostgreSQL提供了完善的存储过程和触发器支持。
11.不支持MPP(大规模并行处理)
而PostgreSQL是类似Oracle数据库的架构,是多进程的架构,而不像MySQL是多线程的架构,所以能支持MPP。
PostgreSQL提供完善的数据完整性检查机制,支持外键。
而PostgreSQL则支持这些表连接类型
PostgreSQL数据不存在这个问题,假设表T的两个字段col1的col2上有两个索引,idx_1和idx_2,那么select*fromtwherecol1=:
aandcol2=:
b;
查询时,PostgreSQL数据库有可能把这个查询转化为select*fromtwherecol1=:
aintersectselect*fromtwherecol2=:
b,这样两个索引都可以使用上。
PostgreSQL只有一种存储引擎,所以不存在上面的情况。
而PostgreSQL支持完善的事务。
PostgreSQL数据库支持全文搜索,支持更多类型的索引,如B-tree,R-tree,Hash,GiST,GIN,R-tree,GIST,GIN索引可用于空间类型和查询。
PostgreSQL支持丰富的类型,同时也支持自定义类型。
这些PostgreSQL数据库都支持,如窗口函数。
PostgreSQL支持函数索引
PostgreSQL支持sequence
50.类似于ALTERTABLE或CREATETABLE一类的操作都是非事务性的.它们会提交未提交的事务,并且不能回滚也不能做灾难恢复.Schame被保存在文
件系统上,这一点与它使用的存储引擎无关.
PostgreSQL不存在这个问题。
===============
mysql只是应用中扁平数据当中,比如bbs,文章发布,图片管理,可以说是简单大规模应用
这类应用可以有延时的,可以进行数据切分
Postgres确实非常强,可以说是简化版的Oracle.从Oracle转过来很简单
pg真的很强大,不过查询性能真的不如mysql。
但这个应该在特定领域不是问题,我想太多请求没有命中缓存而是命中数据库,即使是mysql也不给力的吧。
所以如果缓存系统设计的好,pg和mysql的性能差距应该是可以忽略的。
我想pg应该更适合数据严谨要求高的“事务”型系统,而mysql更适合类似oschina这样偏向常规查询而对事务严谨不苛刻的系统。
mysql适合如网站这样扁平数据的场合,但在大数据量、读写并行、多表联合等情况下性能相当的差,并且最讨厌的不是慢而是不稳定——读写并发大了可能会导致表损坏,这对于数据安全要求高的场合是不可接受的。
其实pgsql自己就带有表总行数的记录,保存在系统表中,由vacuum更新。
这个数值并不精确是个近似值,对于表行精确度要求不高的场合适合。
个人以为mysql的种种问题是娘胎里面带来的,属于先天缺陷。
除非是如google等技术实力非常雄厚的公司可以动刀让它有内在变化,否则普通人拿它就在web上用用吧。
重要场合谨慎采用,否则有得苦头吃~
很多基于Mysql的应用,表都是基于冗余设计的,这个在业务变化的时候,也是非常麻烦
我们内部有个审批系统是全球部署的,每个国家都有人维护一个instance,结果是每个月表都发生损坏。
Mysql最糟糕的设计在于,多个进程是执行复杂任务,并行,同级别的,会发生竞争。
而Oracle/Mssql/Pgsql是流水作业的,将读,写,统计分开独立进程管理,而且查询是基于计划的。
这个是根本上的区别。
Mysql是单表单文件,即便Inodb,也是如此,它根本无法支持复杂结构的表数据,特别是数据发生变动的
而且Oracle/Ms/Pg是基于主数据库词典管理的。
Mysql这么多年,根源上的东西,并没有改观。
pg自带的hotstand-by就能很好的支持读写分离,对一个master写,对多个slave读。
对一般的应用来说足够了。
更大的集群可以使用pgpool-II。
如果用hotstandby的话,负载均衡可以自己写一个简单的consistencehash来实现;
如果想更先进一点的话,推荐pgpool-II。
MySQL与PostgreSQL对比二
最近打算研究下几个开源的数据库,但是主要精力还是研究OracleRDBMS。
MySQL和PostgreSQL是开源中用的最多的2个。
从网上搜了点资料。
整理如下。
这些资料也是以前的资料,现在肯定是有变动。
所以这些内容,仅供参考。
两者的共同优势
这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。
MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。
两者不同的背景
MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。
这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。
这样的两种背景直接导致了各自固有的优点和缺点。
MySQL的主要优点
速度
首先是速度,MySQL通常要比PostgreSQL快得多。
MySQL自已也宣称速度是他们追求的主要目标之一,基于这个原因,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。
但是在最新的文档中,我们看到MySQL4.0.2-alpha已经开始支持事务,而且在MySQL的TODO中,对触发器、约束这样的注定会降低速度的功能也列入了日程。
但是,我们仍然有理由相信,MySQL将有可能一直保持速度的优势。
MySQL比PostgreSQL更流行
MySQL比PostgreSQL更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。
与PostgreSQL相比,MySQL更适宜在Windows环境下运行。
MySQL作为一个本地的Windows应用程序运行(在NT/Win2000/WinXP下,是一个服务),而PostgreSQL是运行在Cygwin模拟环境下。
PostgreSQL在Windows下运行没有MySQL稳定,应该是可以想象的。
MySQL使用了线程,而PostgreSQL使用的是进程。
在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。
MySQL可以适应24/7运行。
在绝大多数情况下,你不需要为MySQL运行任何清除程序。
PostgreSQL目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次VACUUM。
MySQL在权限系统上比PostgreSQL某些方面更为完善。
PostgreSQL只支持对于每一个用户在一个数据库上或一个数据表上的INSERT、SELECT和UPDATE/DELETE的授权,而MySQL允许你定义一整套的不同的数据级、表级和列级的权限。
对于列级的权限,PostgreSQL可以通过建立视图,并确定视图的权限来弥补。
MySQL还允许你指定基于主机的权限,这对于目前的PostgreSQL是无法实现的,但是在很多时候,这是有用的。
对事务的支持
由于MySQL4.0.2-alpha开始支持事务的概念,因此事务对于MySQL不再仅仅成为劣势。
相反,因为MySQL保留无事务的表类型。
这就为用户提供了更多的选择。
MySQL的MERGE表提供了一个独特管理多个表的方法。
MySQL的myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。
PostgreSQL的主要优点:
对事务的支持与MySQL相比,经历了更为彻底的测试。
对于一个严肃的商业应用来说,事务的支持是不可或缺的。
MyISAM表
MySQL对于无事务的MyISAM表。
采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新。
而PostgreSQL不存在这样的问题。
对存储过程的支持
PostgreSQL支持存储过程,而目前MySQL不支持,对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。
此外存储过程的存在也避免了在网络上大量的原始的SQL语句的传输,这样的优势是显而易见的。
对视图的支持
对视图的支持,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。
而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是MySQL的权限系统所无法实现的。
对触发器的支持
对触发器的支持,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。
合理地使用触发器也有利于保证数据的完整性。
对约束的支持
对约束的支持。
约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。
对子查询的支持
对子查询的支持。
虽然在很多情况下在SQL语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。
而且使用子查询的SQL语句与使用带条件的多表连接相比具有更高的程序可读性。
对可扩展的索引类型的支持
支持R-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。
UDF(用户定义函数)
PostgreSQL可以更方便地使用UDF(用户定义函数)进行扩展。
MySQL和PostgreSQL
选择
除了MySQL和PostgreSQL外,还有Oracle、Sybase、Informix等数据库的选择。
如何确定只在MySQL和PostgreSQL中进行选择,可以参考:
1、如果你的应用对数据的完整性和严肃性要求不高,但是追求处理的高速度。
例如是一个论坛和社区,你应该使用MySQL。
2、你的应用是一个严肃的商业应用,对数据完整性要求很高。
而且你希望对一些商业数据逻辑进行很好的封装,例如是一个网上银行,你应该使用PostgreSQL。
3、你的应用处理的是地理数据,由于R-TREES的存在,你应该使用PostgreSQL。
MySQL与PostgreSQL对比三
一谈到PostgreSQL和MySQL的比较,总会让双方支持阵营骚动和兴奋,它们都是技术过硬,安装基础很好的开源数据库,在现实中工作中,要选择一个占绝对优势的开源数据库基本上是不靠谱的,不管是PostgreSQL还是MySQL,都不能声称自己比对方更优秀,对用户来说,只有合适的,没有最优秀的。
当人们了解了每一种产品的优势后,要做出斩钉截铁的选择就很容易了,为了准确评价PostgreSQL和MySQL各自的优势,我们从双方的历史谈起,然后介绍一下它们的功能和性能特点,最后介绍一个成功的企业级数据库部署都有哪些要求。
历史对比
PostgreSQL社区是同类数据库历史最悠久,规模最大,发展最快的社区,PostgreSQL起源于1985年加州伯克利大学的Ingress项目,在学术界流行多年后,PostgreSQL项目开源了,社区开始蓬勃发展,截至目前,有超过1000名贡献者和3万名成员。
大社区的关键优势在于用户和开发者之间的互动比较频繁,用户甚至可以直接参与到新功能的设计中,这种多元化的社区模式也是其它开源社区争相模仿的模式。
MySQL社区最初起源于商业世界,MySQL于1994年诞生在瑞典,作为网站背后的高速数据库,在MySQLAB公司控制几年后,MySQL也选择了开源,有商业公司的支持使得MySQL很快便成为世界上广泛使用的数据库之一,这也是Sun公司2008年花10亿美元重金收购MySQLAB的原因,因为MySQL的流行,也成为欧盟调查Oracle收购Sun一案的主要因素。
PostgreSQL特性和功能
通过数十年的发展,PostgreSQL被誉为市场上最先进的开源数据库,作为一个功能全面的开源关系数据库管理系统,PostgreSQL在支持高事务,关键任务应用方面提供了许多特性。
PostgreSQL最核心的竞争力是对它保管的数据的安全保护能力,通过使用企业身份验证机制,如LDAP或Kerberos控制数据库的连接访问,一单通过验证,所有到数据库的通信都可以走SSL连接,提供了高度安全的保护。
添加或修改数据时,PostgreSQL强制执行用户定义的大量约束,确保数据质量符合业务规则限制,从简单的范围检查到复杂的外键检查,一旦数据存储到磁盘上,就可以进行备份,更重要的是,从灾难恢复是至关重要的,PostgreSQL有一个简单的在线备份工具,配合时间点恢复(PITR)机制,为管理员执行快速恢复提供了很好的灵活性。
PostgreSQL的核心架构允许其他社区小组通过附加模块的形式为PostgreSQL创建更高级的功能,一个很好的例子就是PostgreSQL的地理空间支持,此功能来自一个名为PostGIS的模块,它是PostgreSQL的一个简单扩展,使其成为最强大的可保存空间数据的开源或商业数据库。
PostgreSQL另一个扩展能力是它具有多种不同类型的存储过程语言,允许开发人员使用他们熟悉的语言编写服务器端代码,例如,需要执行复杂文本处理的触发器可以用Perl编写,以便利用其强大的正则表达式功能。
MySQL特性和功能
MySQL被誉为是最流行的开源数据库,从一开始,MySQL就被设计为适合网站快速顺序索引方法(ISAM)的数据存储引擎,这种工作负载的一大特点就是有许多小型查询,于是催生了查询缓存,MySQL集群等提高MySQL性能的技术,MySQL集群允许数据库跨多台物理服务器部署,实现负载均衡。
PostgreSQL不是唯一允许通过外部扩展增加数据库功能的开源数据库,MySQL最大的优势之一就是它的可插入式存储引擎,MySQL默认采
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PostgreSQL MySql 比较
![提示](https://static.bdocx.com/images/bang_tan.gif)