小麦带你看postgres(代码模块结构)
初始化部分(Initialization)
bootstrap:和系统表相关。
main:传递参数到后台的pg进程。
postmaster:控制pg服务开关,创建共享内存,循环等待连接并分配服务。
libpq:与子进程通讯相关的库。
tcop:交警,分配请求到对应模块如解析器、优化器、执行器和命令行功能。
parser:把sql语句转化成查询执行树。
rewrite:规则和视图支持部分。
optimizer:优化查询路径生成计划。
optimizer_geqo:遗传(或者是祖传?)查询优化器评估的路径对于要连接的表,当表的数量很少时会给很优化的结果,表太大就直接给一个一般的,可以通过参数控制是否使用这个功能。
optimizer_plan:拿着“optimizer_path”的结果输出最小开销的路径。
optimizer_prep:处理特殊的查询计划。
optimizer_util:优化支持部分。
executor:执行复杂的计划包括,增删改查。算子举例:堆扫描、索引扫描、排序、连接、聚合、分组、去重等。
commands:响应指令,以及简单的功能如vacuum、create table直接在元数据(catalog)上面做了。
catalog:元数据,直接操作系统表和目录,如索引、表、存储过程、操作符等。
access:大量的数据访问函数,如索引访问、堆访问、和事务日志。
access_common:通用访问方法。
access_gin:索引相关访问。
access_gist:搜索树相关访问。
access_hash:哈希相关访问方法。
access_heap:存储数据行。
access_index:被索引类型使用。
access_nbtree:Lehman和Yao的B树管理算法。
access_spgist:空间分片的全局特征信息相关访问。(GiST)
access_transam:事务管理,如日志读写。(BEGIN/ABORT/COMMIT)
nodes:关于SQL查询的创建或者操作叫做节点,节点一般都有类型和特殊的数据结构,节点间经常被放在链表里。
storage:管理大量存储系统,提供统一后台访问。
storage_buffer:共享缓存管理。
storage_file:文件管理。
storage_freespace:剩余空间映射表。
storage_ipc:信号量和共享内存。
storage_large_object:超大对象。
storage_lmgr:锁管理。
storage_page:页管理。
storage_smgr:磁盘和存储设备管理。
utils:工具类。
utils_adt:包含所有PG中內建数据类型(如bool、char、date)。
utils_cache:因为PG支持很多随意数据类型,后台系统需要查询一个系统表关于这些随意类型时会先走这个缓存。
utils_error:错误反馈,从后端反馈到前端去。
utils_fmgr:函数管理,处理动态绑定的函数调用,和系统表中定义的函数调用。
utils_hash:哈希函数管理,被缓存和内存管理器使用以做快速查询动态数据存储结构。
utils_init:大量初始化。
utils_mb:单字节和多字节的编码。
utils_misc:冗余的东西(官方叫miscellaneous stuff)
utils_mmgr:内存管理(PG进程本地)。
utils_resowner:资源拥有者追溯。
utils_sort:排序工具,如对元祖排序。
utils_time:事务时间,与mvcc有关,判断一个元祖是过期了还是未提交。
基础支持(Support Facilities)
include:引用的文件。
lib:支持的库,大致看了下有二插堆,布隆过滤器。
port:兼容性部分。
regex:正则表达式。
snowball:语法库,雪球是一个语法库,各国语言的规范都有。
replication:通过日志迁移支持流式备份。
tsearch:文本查询库用于支持全文查询。
翻译自 (https://wiki.postgresql.org/wiki/Backend_flowchart)
转载于:https://www.cnblogs.com/zhejiangxiaomai/p/10653693.html
小麦带你看postgres(代码模块结构)相关推荐
- php大马编写,带你走进php大马的结构模块编写之路
本帖最后由 xoanHn 于 2017-11-13 11:56 编辑 带你走进php大马的结构模块编写之路 本文原创作者:Laimooc(原名xoanHn),个人站点:www.laimooc.cn . ...
- 51ak带你看MYSQL5.7源码2:编译现有的代码
从事DBA工作多年 MYSQL源码也是头一次接触 尝试记录下自己看MYSQL5.7源码的历程 申明:个人Python编程很溜,但是C++还停在白痴水平,源码理解方面有点弱,如发现有错误的地方,轻喷 目 ...
- sql+php修改mysql结构,MSSQL_修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,具体不废话了,请看下文代码 - phpStudy...
修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库 具体不废话了,请看下文代码详细说明吧. 向表中增加一个 varchar 列: ALTER TABLE distributors ...
- 【 全干货 】5 分钟带你看懂 Docker !
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付 ...
- ML之XGBoost:XGBoost参数调优的优秀外文翻译—《XGBoost中的参数调优完整指南(带python中的代码)》(二)
ML之XGBoost:XGBoost参数调优的优秀外文翻译-<XGBoost中的参数调优完整指南(带python中的代码)>(二) 目录 2. xgboost参数/XGBoost Para ...
- 毕业生的商业软件开发之路 --- C#基本语法-C#代码模块逻辑框架
C#基本语法 课程介绍 面向读者说明C#编程语言的基本语法,本章要求阅读者已经掌握了一种计算机高级编程语言,比如VB或C++等,理解变量.数组.条件判断.循环等编程知识.达到了国家计算机等级考试二级的 ...
- 太好了,一分钟带你分清Python的模块、库、包有什么联系和区别?
Python的流行主要依赖于其有众多功能强大的库(Library),Python自带的标准库(Standard Library)可以满足大多数的基础需求,除了函数库以外,模块(Module)和包(Pa ...
- 【 全干货 】5 分钟带你看懂 Docker ! 1
作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...
- 【全干货】5分钟带你看懂 Docker!
作者丨唐文广:腾讯工程师,负责无线研发部地图测试. 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成.自动交付.自动部署,并且实现开发环境.测试环境.运维环境三方环境的 ...
最新文章
- 防火墙安装的十步骤,加强网络第一道保护屏
- 2017年秋季个人阅读计划
- mysql server 5.6root_root密码mysqlMySQL-5.6.24免安装版配置方法
- Windows 恢复环境(Windows RE模式)
- 橡胶支座抗压弹性模量计算公式_隔震支座的这些力学特性您都掌握了吗?
- !!统计字符(处理字符串)(getline函数使用)
- AI 对不起 我还爱着你
- python 闯关之路二(模块的应用)
- QLabel控件功能示例
- 今生梦一场,思念你的殇
- 动名词做主语时的谓语动词问题
- 网易云音乐接入微信状态
- NRF52840 SOC 在空气净化市场应用的发展趋势
- 使用jsoup入门java爬虫 案例
- c语言编程实现dsa算法,椭圆曲线加密算法的C语言实现.doc
- 移动二班 21号 pycharm 04.09
- SQL Server 2012 SP1 企业版
- React生命周期解析
- webots(webot社群助手)
- BUUCTF【axb_2019_fmt32】
热门文章
- oracle层次查询用处,Oracle描述层次查询(hierarchicalquery)
- 无监督学习与有监督学习的本质区别是什么_人工智能中的无监督学习
- 码云nacos下载_nacos安装,配置以及持久化
- php extension loaded,php中extension_loaded()函数的使用详解
- 卡片使用_APP必备的设计元素!卡片
- java 详解 搭建 框架_maven 基本框架搭建详解
- matlab 坐标轴中心,matlab中怎么将坐标轴改为经纬度坐标轴
- 用java代码实现Singleton,为什么在Java代码中实现Singleton模式(有时被认为是Java世界中的反模式)?...
- python统计linux流量,通过Python进行MySQL表信息统计
- myeclipse搭建php,MyEclipse常用配置图文教程