Mysql数据库与PostgreSQL数据库的一些差异

什么是PostgreSQL?

PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。

PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强大的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如一地提供高性能和创新的解决方案。PostgreSQL在所有主要操作系统开始使用PostgreSQL从未如此简单。

PostgreSQL并不是单纯的关系型数据库,他还支持很多非关系型数据库的一些数据类型。比如KV、JSON等。

PostgreSQL是一种比较偏全栈的关系型数据库,得益于它比较全面的扩展性。支持事务处理、提供了非常丰富的数据分析的一些工具。PostgreSQL对于SQL的兼容性比Mysql更完善,包括子查询、窗口函数、时序数据库、地理位置的存储、数据仓储的能力等。

PostgreSQL也支持高可用集群方案,支持副本的冗余、支持内置的主从同步。

PostgreSQL支持的内置的二进制同步复制的方式在大部分情况下比Mysql内置的Binlog方式的同步更可靠一些。

PostgreSQL是BSD开源协议,可以基于PostgreSQL去做一些二次开发。PostgreSQL的开源社区活跃度高。

扩展性强,PostgreSQL基于目录驱动进行扩展,可以非常灵活的在里面添加一些新的数据类型、操作方式、内置的函数。过程弹性,不需要在中间再去做一些编译的操作。

表格对比

PostgreSQL·MySQL
基于BSD开源协议基于开源的GPLv2协议 
只有一个事务引擎,支持事务,无需选择但是需要考虑均衡性存储引擎多,除了InnoDB和NDB都不支持事务
小数据量的读性能不佳不同的存储引擎性能不一
SQL兼容性更好(子查询、复杂的链表查性能更高)SQL兼容性不如PostgreSQL
对客户端的支持、语言更丰富
数据类型更多
PostgreSQL的性能一般更好一些,尤其是在一些并发读写的情况下、DDL执行的时候省去了一些的锁操作小数据量下高并发的读、Mysql更有优势一些
高并发场景内存消耗更大(进程)高并发场景内存消耗更小(线程)

PostgreSQL支持的数据类型

基本类型Integer, Numeric, String, Boolean
结构类型Date/Time, Array, Range, UUID
文档类型JSON/JSONB, XML, Key-value(Hstore)
几何类型Point, Line, Circle, Polygon
自定义类型Composite, Custom Types

对比Mysql

1.PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足的进步,然而很多Mysql用户都遇到过Server级的数据库丢失的场景---Mysql系统库是MyISAM的,相较而言,PG数据库在这方面要好一些。


2.任何系统都有他的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍然可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而MySQL明细出现一个波峰后下滑。


3.PG多年在GIS领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG中有大量的字典、数组、bitmap等数据类型,相比之下MaySQL就差很多,insagram就是因为PG的空间数据库扩展POSTGIS远远强于MySQL的my spatial而采用PGSQL的。


4.PG的“无锁定”特性非常突出,甚至包括vacuum这样的整理数据空间的操作,这个和PGSSQL的MVCC实现有关系。


5.PG的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。


6.PG有极其强悍的SQL编程能力,有丰富的统计函数和统计语法支持,比如分析函数(Oracle的叫法,PG里面叫Window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MySQL就差的很远,很多分析功能那个都没有,腾讯内部数据存储主要是Mysql,但是主要的数据分析就是Hadoop+PGsql。


7.PG的有很多中集群架构可以选择,plproxy可以支持语句级的镜像或者分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或者流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。


8.一般关系型数据库的字符串有限定长度8k左右,无限长Text类型的功能受限,只能作为外部大数据访问。而PG的TEXT类型可以直接方法,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库就可以省略了


9.对于web应用来说,复制的特性很重要,Mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate, 是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时pgsql还提供stream复制。


10.Pgsql对于numa架构的支持要比mysql强一些,比mysql对于读的性能要好些,pgsql提交可以完全异步,而mysql的内存表不够实用(表锁原因)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值