都归于开放源码的一员,功用和功用都在高速地提高和增强。MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以关于任何商业数据库运用其间的任何一个都不能算是错误的挑选。
PostgreSQL:免费
原则:关于一个数据库,稳定性和速度并不能代表全部。关于一个老练的数据库,稳定性肯定会日益供给。而随着硬件功用的飞速提高,速度也不再是什么太大的问题。
1架构对比
MySQL:多线程
PostgreSQL:多进程
多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。
PG的有多种集群架构可以挑选,plproxy可以支撑句子级的镜像或分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或流式的读写别离集群,同步频率和集群战略调整便利,操作十分简略。
pgsql关于numa架构的支撑比mysql强一些,比MYSQL关于读的功用更好一些,pgsql提交可以彻底异步,而mysql的内存表不行实用(由于表锁的原因)
2对存储进程[1]及业务的支撑才能
1)MySQL关于无业务的MyISAM表,选用表锁定,一个长时刻运转的查询很可能会长时刻地阻止对表的更新,而PostgreSQL不存在这样的问题。
2)PostgreSQL支撑存储进程,要比MySQL好,具有本地缓存执行计划的才能;
3)MySQL4.0.2-alpha开端支撑业务的概念,保存无业务的表类型,为用户供给了更多的挑选。
3稳定性及功用
1)高并发读写,负载迫临极限下,PG的功用指标仍可以保持双曲线乃至对数曲线,到高峰之后不再下降,而MySQL显着呈现一个波峰后下滑(5.5版别之后,在企业级版别中有个插件可以改善许多,不过需求付费)
2)PostgreSQL的稳定性极强,Innodb等引擎在溃散、断电之类的灾难场景下抗打击才能有了长足进步,然而许多MySQL用户都遇到过Server级的数据库丢失的场景——mysql体系库是MyISAM的,相比之下,PG数据库这方面要好一些。
3)mysql的innodb引擎,可以充沛优化运用体系一切内存,超大内存下PG对内存运用的不那么充沛(需求根据内存情况合理装备)。从测试结果上看,mysql5.5的功用提升很大,单机功用强于pgsql,5.6应该会强更多。
4高可用性
MySQL可以习惯24/7运转。在绝大多数情况下,你不需求为MySQL运转任何铲除程序。PostgreSQL目前仍不彻底习惯24/7运转,这是由于你有必要每隔一段时刻运转一次VACUUM。
innodb的根据回滚段完成的MVCC机制,相对PG新老数据一同存放的根据XID的MVCC机制,是占优的。新老数据一同存放,需求定时触发VACUUM,会带来剩余的IO和数据库目标加锁开支,引起数据库全体的并发才能下降。并且VACUUM整理不及时,还可能会引发数据膨胀;
5数据同步方法:
1)mysql到现在也是异步仿制,pgsql可以做到同步,异步,半同步仿制。
2)mysql的同步是根据binlog仿制,相似oraclegoldengate,是根据stream的仿制,做到同步很困难,这种方法更加适合异地仿制;pgsql的仿制根据wal,可以做到同步仿制。一起,pgsql还供给stream仿制。
3)MySQL的仿制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
4)PG的主备仿制归于物理仿制,相关于MySQL根据binlog的逻辑仿制,数据的一致性更加可靠,仿制功用更高,对主机功用的影响也更小。
7权限控制对比
MySQL答应你界说一整套的不同的数据级、表级和列级的权限,答应你指定根据主机的权限;
MySQL的MERGE表供给了一个独特管理多个表的方法。myisampack可以对只读表进行紧缩,尔后依然可以直接拜访该表中的行。
7SQL句子支撑才能
1)PG有极其强悍的SQL编程才能(9.x图灵完备,支撑递归!),有十分丰厚的统计函数和统计语法支撑,比方剖析函数(ORACLE的叫法,PG里叫window函数);
2)支撑用多种语言来写存储进程,关于R的支撑也很好。这一点上MYSQL就差的很远,许多剖析功用都不支撑。腾讯内部数据存储首要是MYSQL,但是数据剖析首要是HADOOP+PGSQL(听李元佳说过,但是没有验证过)。
3)pgsql对表名巨细的处理,只有在SQL句子中,表名加双引号,才区别巨细写。
4)在SQL的规范完成上要比MySQL完善,并且功用完成比较严谨;
5)对表衔接支撑较完好,优化器的功用较完好,支撑的索引类型许多,杂乱查询才能较强;
6)MySQL选用索引安排表,这种存储方法十分适合根据主键匹配的查询、删改操作,但是对表结构设计存在约束;
7)MySQL的Join操作的功用十分的差,只支撑NestJoin,所以一旦数据量大,功用就十分的差。PostgreSQL除了支撑nestjoin外,还支撑hashjoin和sortmergejoin;PostgreSQL支撑正则表达式查找,MySQL不支撑;
8数据类型支撑才能
PostgreSQL可以更便利地运用UDF(用户界说函数)进行扩展。
1)有丰厚的几何类型,实践上不止几何类型,PG有大量字典、数组、bitmap等数据类型,因此PG多年来在GIS领域处于优势地位。相比之下mysql就差许多,instagram便是由于PG的空间数据库扩展POSTGIS远远强于MYSQL的myspatial而选用PGSQL的。MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON,其空间索引只能在存储引擎为MYISAM的表中创立,用SPATIAL关键字进行扩展,使得可以用于创立正规索引类型的语法创立空间索引。创立空间索引的列,有必要将其声明为NOTNULL。不同的存储引擎有差别。MyISAM和InnoDB都支撑spatialextensions,但差别在于:如果运用MyISAM,可以建立spatialindex,而InnoDB是不支撑的。
2)pgsql对json支撑比较好,还有很逆天的fdw[2]功用,便是把其他数据库的表当自己的用;
3)pgsql的字段类型支撑的多,有许多mysql没有的类型,但是实践中有时候用到。
4)一般关系型数据库的字符串有限定长度8k左右,无限长TEXT类型的功用受限,只能作为外部大数据拜访。而PG的TEXT类型可以直接拜访,SQL语法内置正则表达式,可以索引,还可以全文检索,或运用xmlxpath。用PG的话,文档数据库都可以省了。
5)postgresql有groupingsets函数,也是迫使我抛弃mysql榜首原因。做报表后台核算,olap/oltp之类的这个函数简直是刚性需求。没有groupingsets函数,我感觉做报表后台核算,简直不忍目睹。当然pgsql还有挺多很好用的窗口函数之类,用起来诚心爽。mysql做数据报表核算后台最大缺陷便是没有groupingsets和一些窗口函数,代替计划很麻烦并且功率低,做许多统计数据各种表衔接、外衔接等等一大堆,不同数据库之间数据的运用核算。
8)PG支撑R-trees这样可扩展的索引类型,可以更便利地处理一些特别数据。
9)PG可以运用函数和条件索引,使得数据库的调优十分灵敏,mysql就没有这个功用,条件索引在web使用中很重要。
9入库进程容错才能
大批量数据入库,PostgresSQL要求一切数据有必要彻底满足要求,有一条错误,整个数据入库进程失利;MySQL无此问题。比方,每天1000万行数据,就由于一条打印的不完好,PostgreSQL会直接报错,导致一条也导入不进去。1000万里面有一即将数字类型的等级打印成了字符串的东西,那么pgsql会非让你找出这一条删掉,然后才能将剩下的数据导入进去。mysql就彻底没有这个问题,比方mysqllevel字段界说的int类型,几千万中有一条数据没注意打印成字符串,mysql会自己给你转成0存储的,不会有任何报错。
10表安排方法
1)pgsql用承继的方法完成分区表,让分区表的运用不便利且功用差,这点比不上mysql。
2)PG主表选用堆表存放,MySQL选用索引安排表,可以支撑比MySQL更大的数据量;
3)MySQL分区表的完成要优于PG的根据承继表的分区完成,首要体现在分区个数到达上千上万后的处理功用差异较大。
11开发接口
关于web使用来说,mysql5.6的内置MCAPI功用很好用,PGSQL差一些。
PG的“无锁定”特性十分突出,乃至包括vacuum这样的整理数据空间的操作,这个和PGSQL的MVCC完成有关系。
12保护团队
MySQL的背后是一个老练的商业公司,使得MySQL的开发进程更为稳重;
PostgreSQL的背后是一个庞大的自愿开发组,PostgreSQL的反应更为敏捷。这样的两种背景直接导致了各自固有的优点和缺陷。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。