PostgreSQL在开源关系型数据库市场是最先进的数据库。他的第一个版本在1989年发布,从那时开始,他得到了很多扩展。根据db-enginers上的排名情况,PostgreSQL目前在数据库领域排名第四。
一、PostgreSQL 进程类型
PostgreSQL有四种进程类型
Postmaster (Daemon) Process(主后台驻留进程)
Background Process(后台进程)
Backend Process(后端进程)
Client Process(客户端进程)
Postmaster Process
主后台驻留进程是PostgreSQL启动时第一个启动的进程。启动时,他会执行恢复、初始化共享内存爱你的运行后台进程操作。正常服役期间,当有客户端发起链接请求时,它还负责创建后端进程。
PostgreSQL的数据库缓冲叫shared buffer pool。PG的backend进程通过buffer manager模块来访问PG的数据,而Buffer manager通过shared buffer pool来提高PG数据访问的性能。
backend访问PG数据文件的过程和Oracle数据库十分类似,当backend要访问某个数据块的时候,会把需要访问的数据块的地址发送给buffer manager,如果这个数据块已经在shared buffer pool中存在,那么buffer manager会返回包含这个数据的buffer id返回给backend,如果当前buffer中没有这个数据块,那么backend 通过调用buffer manager去申请一个buffer,然后把数据块的数据读入buffer,返回buffer id给后续处理使用。当然这是最简单的场景,对于分配buffer,还涉及了脏块的处理等过程,这里就不深入分析了,这些过程和Oracle数据库的DB CACHE是十分类似的,ORACLE DBA很容易理解这个过程。
二、为什么是PostgreSQL?
1.复杂查询性能高
PostgreSQL的一大优势是能够有效的处理复杂查询。PostgreSQL能够使用不同的连接算法(像hash join),这在创建最优执行计划时是非常灵活的。相比而言,MySQL仅支持嵌套循环连接,这种连接方式并不是放之四海而皆准。
PostgreSQL可能比MySQL更快的另外一个理由是对于子查询的处理。MySQL在执行子查询时,查询优化器并不够完美。在过去,大部分的执行被当作依赖子查询,如果要对这类查询加速,就要求进行手工查询重写。在MySQL 5.6中,已经做了一些提升,可以进行子查询物化。在MySQL 5.7中,针对该类情景又做了部分提升,但是相比PostgreSQL而言仍然是相去甚远。
2.PL/pgSQL等存储过程语言
在MySQL中创建存储过程是非常艰难的。比起其他RDBMS系统,MySQL中的编程语言既功能有限又不够灵活。在PostgreSQL中创建存储过程比在MySQL中容易的多 - 我们可以创建一系列的存储过程,并将复杂的操作逻辑放在数据库端。相比而言,在MySQL中,受限于存储过程语言,通常不得不把一些复杂的逻辑分离到前端应用处理。PostgreSQL的另外优势是,您不仅可以使用PL/pgSQL语言,也可以使用C、PL/Tcl、PL/Perl和PL/Python,这些都包含在核心发布包中,还有一些另外的存储过程语言可以自行添加。
3.对JSON和GIS的支持
一件令人兴奋的事,如果您使用JSON和GIS数据类型,那么好吧,PostgreSQL支持的非常好。相比之下,MySQL在5.7版本中通过MyISAM表提供GIS支持,最近才引入InnoDB引擎。JSON数据类型的支持也是在MySQL 5.7才实现。在本篇文章写作时,Galera还不支持5.7,所以您不得不选择单机版的MySQL或者PostgreSQL来实现该类需求。另外一方面,GIS和JSON都是InnoDB引擎新增的功能,还不够成熟,需要一段时间的锤炼。相对来说,PostgreSQL可以提供一种跟稳定有效的选择。
三、PostgreSQL为何这么火?
PostgreSQL在需求率、使用率、喜爱率上都拔得头筹,天时地利人和齐备,动能势能潜能都有,足以称得上是最成功的数据库,号称世界上最先进的开源关系型数据库。
PostgreSQL性能到底有多强?
1.点查QPS 60万+,最高达200万。
读写TPS每秒7万+,最高达14万。
2.极限条件下,PgSQL点查性能显著压倒MySQL,
其他性能基本与MySQL持平。
3.“分布式数据库”在相同硬件规格下的性能表现显著落后于经典数据库。
4.PostgreSQL 原生作为一个HATP数据库,
有比较亮眼的分析表现。
四、场景说明
我们就来说说简单的 PG 使用场景,数据库用户该如何配。所谓简单是指:
1、PG 实例就一个数据库
2、数据库就一个默认的 public schema
3、所有的表都在这个 public schema 下
而使用数据库的场景,由人到数据库,和应用到数据库两部分组成:
人到数据库
DBA 操作
数据库变更,DDL 和 DML 都有
数据库查询
应用到数据库
数据库变更,DDL 的话通常在应用启动前做,除此之外都是 DML
数据库查询