mysql与pgsql
Posted Hepburn Yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql与pgsql相关的知识,希望对你有一定的参考价值。
来一张图胜过千言万语
哈哈 ,只是皮一下,还是要好好说话~~
为什么说pgsql是最先进的的开源关系型数据库?
因为pgsql是一款一专多长的全栈数据库!!
成熟的应用可能会用到许许多多的数据组件(功能):缓存,OLTP,OLAP/批处理/数据仓库,流处理/消息队列,搜索索引,NoSQL/文档数据库,地理数据库,空间数据库,时序数据库,图数据库。传统架构选型可能会组合使用多种组件,典型的如:Redis + mysql + Greenplum/Hadoop + Kafuka/Flink + ElasticSearch。在这里MySQL只能扮演OLTP关系型数据库的角色,但如果是PostgreSQL,就可以身兼多职,One hold them all,比如:
OLTP:事务处理是PostgreSQL的本行
OLAP:citus分布式插件,ANSI SQL兼容,窗口函数,CTE,CUBE等高级分析功能,任意语言写UDF
流处理:PipelineDB扩展,Notify-Listen,物化视图,规则系统,灵活的存储过程与函数编写
时序数据:timescaledb时序数据库插件,分区表,BRIN索引
空间数据:PostGIS扩展(杀手锏),内建的几何类型支持,GiST索引。
搜索索引:全文搜索索引足以应对简单场景;丰富的索引类型,支持函数索引,条件索引
NoSQL:JSON,JSONB,XML,HStore原生支持,至NoSQL数据库的外部数据包装器
数据仓库:能平滑迁移至同属Pg生态的GreenPlum,DeepGreen,HAWK等,使用FDW进行ETL
图数据:递归查询
缓存:物化视图
因此,pgsql可以扮演多面手的角色,一个组件当做多个组件使用,单一数据组件选型可以极大地削减项目额外复杂度,意味着可以节省很多成本。
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就差的很远,很多分析功能都不支持.
- 一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
- 对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
最后分享一下知乎众大神的见解:
PostgreSQL 与 MySQL 相比,优势何在?
以上是关于mysql与pgsql的主要内容,如果未能解决你的问题,请参考以下文章
使用python登录pgsql,实现监控PostgreSQL