PostgreSQL学习笔记:学习总结

news2025/1/13 7:47:40

一、架构

1. 常驻进程(Postmaster)

        管理后端的常驻进程,默认监测UNIX Domain Socket和TCP/IP(Windows等一部分平台只监测TCP/IP)的5432端口,等待前端连接处理,监测的端口号可在设置文件postgresql.conf中修改。

2. Postgres(子进程)

        根据pg_hba.conf定义的安全策略判断是否允许连接,可拒绝特定IP、网络,或只允许特定用户或对某些数据库进行连接。接受前端查询,对数据库进行检索、更新,更新数据会记录在事务日志(WAL日志)中,用于停电、宕机重启时恢复,日志归档后可用于恢复到特定时间点。

3. PgArch进程(归档)

        WAL日志会被循环使用,PgArch在归档前备份WAL日志。通过PITR技术,全量备份数据库后,利用备份时间点之后的归档WAL日志,可将数据库推到全量备份后的任意时间点。

4. PgStat进程(统计数据收集)

        进行数据的统计收集工作,主要用于查询优化时的代价估算,如一个表和索引的插入、更新、删除操作次数,磁盘块读写次数、行读次数等,信息存储在pg_statistic中。

5. AutoVacuum进程(自动清理)

        在PostgreSQL中,DELETE操作后旧数据不立即删除,更新数据是新生成一行,旧数据被标识为删除状态,当无并发事务读这些旧数据时,由AutoVacuum进程清除。

6. BgWriter进程(后台)

        页写到磁盘上的进程,为提高插入、更新和删除数据的性能。

7. WalWriter进程(预写式日志)

        在修改数据之前把修改操作记录到磁盘中,这样更新实时数据时不需要再进行数据持久化到文件中。

8. CheckPoint进程(检查点)

        检查点是系统设置的事务序列点,保证检查点前的日志信息刷到磁盘中。

9. Syslogger进程(系统日志)

        将错误信息写到log日志中,需在Postgres.conf中logging_collection设置为on,主进程才会启动Syslogger辅助进程。

        其物理架构由共享内存、一系列后台进程和数据文件组成。共享内存包括SharedBuffer(数据页缓冲区)和WALBuffer等,对于专用DB服务器,shared_buffers的值一般约为系统总RAM的25%,如果系统有大量并发连接,wal_buffers值越高性能越好。

二、优势

1. 稳定性方面

        灾难场景抗打击能力强:Innodb等引擎在崩溃、断电等灾难场景下虽有进步,但很多MySQL用户遇到过Server级数据库丢失(MySQL系统库是MyISAM的),相较而言,PG数据库在这方面表现更好。

2. 性能方面

        高并发读写下的性能表现:在高并发读写,负载逼近极限时,PG的性能指标可维持双曲线甚至对数曲线,到顶峰之后不再下降,而MySQL会出现波峰后下滑的情况。

        对NUMA架构的支持:PG对numa架构的支持比MySQL强,读性能较好,PG提交可以完全异步,而MySQL的内存表因表锁原因不够实用。

3. 数据类型方面

        丰富的数据类型:在GIS领域多年处于优势地位,有丰富的几何类型,不止几何类型,还有大量的字典、数组、bitmap等数据类型,相比之下MySQL就差很多,例如Instagram因为PG的空间数据库扩展POSTGIS远远强于MySQL的myspatial而采用PGSQL。

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

4. 特性方面

        无锁定特性突出:包括vacuum这样的整理数据空间的操作也无锁定,这和PGSQL的MVCC实现有关系。

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

        强大的SQL编程能力:有丰富的统计函数和统计语法支持(如分析函数,PG里叫Window函数),还可以用多种语言写存储过程,对R的支持也很好,而MySQL在分析功能上差很多,如腾讯内部数据存储主要是MySQL,但主要的数据分析是Hadoop + PGsql。

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

        复制特性多样:对于web应用来说,复制特性很重要,MySQL到现在还是异步复制,PGSQL可以做到同步、异步、半同步复制。MySQL的同步基于binlog复制(类似oraclegoldengate,基于stream的复制,做到同步很困难,更适合异地复制),PGSQL的复制基于wal,可以做到同步复制,同时还提供stream复制。

        支持多版本并发控制(MVCC)等并发特性:有索引、高级索引、复杂的查询计划期/优化器、交互、多版本并发控制(MVCC)、读取查询的并行化和构建B树索引、表分区以及Sql标准中定义的所有事物隔离级别,包括Serializable、即时表达式汇编(JIT)等,这些特性有助于提高并发性能。

三、前景

1. 高需求

        随着企业和组织对数据存储和管理需求的不断增长,对数据库专业人员的需求持续上升。PostgreSQL在企业中的应用越来越广泛,所以掌握PostgreSQL技能的人才需求也在增加。

2. 开源优势

        作为开源软件,具有广泛的社区支持和活跃的开发者社区。这为用户提供了强大的功能和灵活性,并且能够根据需求进行定制和扩展。对于雇主而言,选择使用PostgreSQL可减少数据库软件许可费用,并受益于开源社区的持续改进和更新。

3. 就业机会多

        数据库管理员(DBA)和开发者职位:掌握PostgreSQL技能的人才在数据库管理员(DBA)和数据库开发者职位方面有很好的就业机会。企业需要专业人员来管理和维护PostgreSQL数据库,编写高效的SQL查询语句,进行性能优化以及确保数据安全性。

        数据工程师和数据分析师:随着数据驱动决策的重要性增加,对数据工程师和数据分析师的需求也在增长。这些角色需要掌握数据库技能以及数据处理和分析的能力。PostgreSQL作为常用的数据库系统,熟练掌握它对数据工程师和数据分析师是一个有价值的技能。

4. 广泛应用于各行各业

        PostgreSQL广泛应用于金融、电信、医疗、教育、电子商务等各行各业。掌握PostgreSQL技能可以为在不同行业中的就业机会提供更多选择。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于腾讯云的AI视频课程制作工具

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中,发现录制课程比较麻烦,要保证环境安静,保证录制过程不出错,很容易反复重复录制,为了解决重复录制的工作量,想通过 ai 课程制作工具,来解决…

注册安全分析报告:北外网校

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【软考】设计模式之中介者模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点 1. 说明 1.用一个中介对象来封装一系列的对象交互。2.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。3.中介者模式(Mediator Pattern&…

Qt-自定义控件鼠标事件键盘事件定时器绘图

1. 自定义控件 1.1 创建自定义控件 1.在项目目录上右键, 选择 "Add New" 2.选择 "Qt" --> "Qt 设计师界面类" 3.根据需求选择模板,此处选择空窗口 4.设置类名 和 相关文件名 使用设计师界面类会产生三个文件&…

媒界:插混VS增程:魏牌蓝山用天花板Hi4诠释都市家庭用车最优解

在新能源混动领域,关于插混、增程谁才是混动最优解,一直业内争论的焦点。正如路遥知马力、日久见人心。对于新能源动力系统的评判标准来说,最好的答案就是路上见。 近日,一位媒体博主驾驶着魏牌全新蓝山从阿拉善到武汉往返狂飙30…

Python面向对象编程:封装和私有属性④

文章目录 1. 引言2. 什么是封装?3. 公有属性和方法4. 私有属性和方法5. 属性访问器(Getters 和 Setters)6. 使用 property 函数7. 综合示例7.1 项目结构7.2 模块代码__init__.pystudent.pycourse.pymanager.py 7.3 主程序代码main.py 7.4 运行…

cmake模板-支持编译动态/静态文件

代码链接:代码仓库 git clone https://gitee.com/etsuyou/cmake-template.git模板 模板截图 如何使用 在src和inc中写代码 此处用我默认提供的代码 ./go.sh cmake 生成Makefile ./go.sh make 生成bin文件和.a以及.so ./go.sh run app 运行 ./go.sh clean 以…

Tomcat服务部署及优化

一、Tomcat的基本介绍 1. tomcat是什么? Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,T…

QT QML 练习8-Simple Transformations

简单的转换(Simple Transformations) 转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移,旋转,缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始…

Python学习100天第9天之面向对象进阶

1 前言 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 2 property装饰器…

AVLTree 旋转笔记(根据平衡因子插入的公式,贼好理解)

平衡因子 avltree是一棵每个节点的左右子树的高度差不超过1的二叉树搜索树,对于avltree最重要的就是对平衡因子的控制。 对于旋转我们重点要注意的是三个节点,以左旋举例,需要注意的就是parent,subr,subrl。而旋转的方…

MYSQL架构、执行过程和顺序

MYSQL架构、执行过程和顺序 一、前言 1.1、说明 就MySQL的架构,以及执行过程、sql执行顺序,以及一些相关学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方&a…

Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。 通过 Docker 部署 Jenkins 使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南: 1. 安装 Docker 如果你的系统上还没有安装 Docker,请根据操作系统…

春日技术问答:Spring Boot课程答疑

3系统分析 3.1可行性分析 通过对本课程答疑系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本课程答疑系统采用JAVA作为开发语言,Spring Boot框…

【2D/3D-Lidar-SLAM】 Cartographer详细解读

【2D/3D-Lidar-SLAM】 Cartographer详细解读 1. 摘要 2. Cartographer系统数据处理流程2.1. 数据获取(Input Sensor Data)2.2 姿态外推器(PoseExtrapolator)2.3 局部建图(Local SLAM) 3. 关键模块实现 3.1 …

5、springboot-基础入门

1、系统要求 Java 8 & 兼容java14 .Maven 3.3idea 2019.1.2 1.1、maven设置 修改maven的settings.xml文件中的镜像&#xff0c;如下 <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyu…

vue3 在store的index.js

导入vuex&#xff0c;在store的index.js创建store对象 在main.js挂载store import store from ./storenew Vue ({/* 将store对象实例挂载到vue实例中 所有组件就可以直接从store中获取全局数据了*/ store, render: h > h(App) }).$mount(#app) 在store中的index.js进行声明…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66&#xff0c;全称为Network Address Translation for IPv6 to IPv6&#xff0c;是一种用于IPv6网络的地址转换技术。在…

FPGA基于SRIO Auraro 三速以太网 IIC SPI等多协议的高速传输处理项目

高速传输处理项目 此项目涉及较多协议和接口&#xff0c;有较复杂的系统顶层框图设计。在涉及设备较多的应用场景中&#xff0c;需要涉及一款PCI-E板卡&#xff0c;将多个子系统的数据汇总上传到PC或服务器上。在此项目中有3路数据源&#xff0c;分别是:srio数据&#xff0c; …

数据结构与算法:动态规划的深度探讨

目录 12.1 动态规划的核心思想 12.2 经典动态规划问题 12.3 动态规划在图中的应用 12.4 高级动态规划技术 总结 数据结构与算法&#xff1a;动态规划的深度探讨 动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种解决复杂问题的有效方法&#xff0c;特别适…