在从技术而言,PG 功能丰富,SQL 支持得很完备,强大的数据类型,严谨的关系模型,很难从关系模型去找出PG
得
不合理之处,多年的积累,连全文索引词库都非常丰富,据说对于一些简单的搜索,都可以摆脱搜索引擎了,优化器做得很好,在代价选择上PG 实现了基因算法,这一点连Oracle 也没有做到。
也正因如此在早期mysql变成了事实上的互联网企业OLTP的事实标准。不管干啥业务,mysql都不可或缺。在行业里跳槽来跳槽去的程序员普遍对mysql也更熟悉。大量围绕mysql的商业服务都成为了行业主流。新一代分布式数据库,像TiDB为了吸引用户,首先要做的是“兼容mysql的语法”
数据库这种早期用了就基本不能换的东西是有滞后性的,你看到现在MySQL的现状,是5年前MySQL是国内几乎唯一选择的情况。5年前Postgres就已经在欧美初创项目里比较受欢迎了,PostgreSQL在全球也是二线,不独中国。PostgreSQL一直就功能比MySQL完备,唯独缺乏一个引爆点,导致生态长期不如MySQL。
两者之间区别:
Postgres是一个对象关系数据库(ORDBMS),具有表继承和函数重载等功能,可以处理复杂的查询和大型数据库。
而MySQL就是一个纯粹的关系数据库(RDBMS)相对易于建立和管理,快速,可靠且易于理解。
pg替代mysql,技术上没有任何问题。mysql能做到的,pg同样能做到,不说做得更好,至少是各有千秋。也是因为pgsql的确是好,这个查查就知道。当然现在pgsql集群方案也很多,所以我估计早期的时候,pgsql在集群方案上可能不如mysql。而且pgsql的地理信息支持是很好的……。
有一个优势是pg是BSD开源协议,允许在pg的基础上开发商业版和销售。对于商业化非常友好。而mysql是GPL协议,如果某软件使用了GPL协议,那该软件也必须开源。所以一定程度上mysql受到oracle的控制。
服务器优化的选项:MySQL提供了很多选项来调整和优化你的MySQL服务器,通过调整变量,如排序缓冲区大小,读缓冲区大小,最大允许包等。
易于使用和流行:MySQL的流
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的 *** 作,这个和PGSQL的MVCC实现有关系。
五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL。
七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便, *** 作非常简单。
八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)
最后说一下我感觉 PG 不如 MySQL 的地方。
第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。
第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,
第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.
第五点,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。
另外一些:
pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。
说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。
对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。
另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。
很多pg应用也是24/7的应用,比如skype. 最近几个版本VACUUM基本不影响PGSQL 运行,8.0之后的PGSQL不需要cygwin就可以在windows上运行。
至于说对于事务的支持,mysql和pgsql都没有问题。
1、MySQL崛起那会,PG虽然已经有许多高级特性,但那些特性互联网用不着,互联网需要的特性——快速——那时的PG不具备。历史延续下来,造成了今天的局面。可以说互联网成就了MySQL.2、MySQL的主从复制、增量备份比PG设置简单(知道PG的增量备份多耗磁盘不!),这些特性在互联网是很有用的。而旧的pg vacuum不如今天的友好。这些都限制了他在早期的崛起。
3、不认为商业支持是主要原因——有几个用MySQL的是买了商业支持的?倒是有些心理上的影响。
4、今天两者性能、特性上相差不多,而我认为pg略胜一筹,但大局在适时间内难改变——习惯造成的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)