当前位置: 首页 > 编程日记 > 正文

小麦带你看postgres(代码模块结构)

初始化部分(Initialization)


bootstrap:和系统表相关。

main:传递参数到后台的pg进程。

postmaster:控制pg服务开关,创建共享内存,循环等待连接并分配服务。

libpq:与子进程通讯相关的库。

查询部分(Main Query Flow)

tcop:交警,分配请求到对应模块如解析器、优化器、执行器和命令行功能。

parser:把sql语句转化成查询执行树。

rewrite:规则和视图支持部分。

optimizer:优化查询路径生成计划。

optimizer_path:生成所有可能的路径,检查表连接顺序,where条件限制,优化表的统计信息,对于可执行的计划评估开销。

optimizer_geqo:遗传(或者是祖传?)查询优化器评估的路径对于要连接的表,当表的数量很少时会给很优化的结果,表太大就直接给一个一般的,可以通过参数控制是否使用这个功能。      

optimizer_plan:拿着“optimizer_path”的结果输出最小开销的路径。

optimizer_prep:处理特殊的查询计划。

optimizer_util:优化支持部分。

executor执行复杂的计划包括,增删改查。算子举例:堆扫描、索引扫描、排序、连接、聚合、分组、去重等。

指令支持(Command Support)

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

相关文章:

c#学习的几个层次

1. 基本运用C#语法,在各种工具和示例代码的支持下,完成一些基本程序任务 2. 熟练掌握面向对象与组件构造,知其然亦知其所以然,完成一般小规模信息管理类软件项目开发任务 3. 深入理解CLR内核机制,对各种类型与.NET平…

nodeJs --- web服务器创建

一、下载nodeJs http://nodejs.cn/download/ 根据自己的情况选择下载 然后在命令行中输入 node -v 看是否安装成功 (下载node时,会把npm包处理工具一起下) 二、server,js 在文件夹下创建一个server.js var http require(http)http.createSer…

河北省医疗卫生数据中心案例简介

河北省卫生厅是负责全省卫生工作的政府部门,辖区人口6000万,其职能是基于国家卫生工作大政方针,研究提出全省卫生事业发展规划和战略目标,制订全省卫生工作计划、地方规范和标准,开展行业监督管理和服务。河北省卫生信…

Angular应用中tsconfig.json文件配置说明及配置全局路径映射

tsconfig.json文件配置说明1. tsconfig.json文件中的选项配置2. 配置全局路径映射1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的JSON模式 {"title": "JSON schema for the TypeScript compilers configuration file","$schema"…

疑问:c++中的memset

在dev c下调试 1 #include <mem.h>2 #include <iostream.h>3 #include <cstdlib>//配合system("PAUSE");用于看调试结果 4 5 intmain()6 {7 intia1[10];8 memset(ia1,1,10*sizeof(int));9 for(inti0;i<(sizeof(ia1)/sizeof(int));i)10 cout <…

Scrapy shell

一、Scrapy shell简介 Scrapy终端是一个交互终端&#xff0c;供您在未启动spider的情况下尝试及调试您的爬取代码。 其本意是用来测试提取数据的代码&#xff0c;不过您可以将其作为正常的Python终端&#xff0c;在上面测试任何的Python代码。 该终端是用来测试XPath或CSS表达式…

堆排序——HeapSort

基本思想&#xff1a; 图示&#xff1a; &#xff08;88,85,83,73,72,60,57,48,42,6&#xff09; 平均时间复杂度&#xff1a; O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN)&#xff0c;共N - 1次重新恢复堆操作&#xff0c;再加上前面建立堆时N / 2次向下调整&#xff0c…

一个web蠕虫的简单实现

在这之前先鄙视下一些人发现漏洞就挂马的无耻行为&#xff0c;我曾经因为一个公开的漏洞而在一个网站站上发现24个各个所谓组织&#xff0c;所谓黑客的后门&#xff0c;鄙视&#xff01;所谓蠕虫&#xff0c;其本质是利用计算机或者应用程序的漏洞进行感染和传播的一段程序&…

SpringBoot设置Session失效时间

1 #Session超时时间设置&#xff0c;单位是秒&#xff0c;默认是30分钟 2 server.session.timeout10 然而并没有什么用&#xff0c;因为SpringBoot在TomcatServletWebServerFactory代码中写了这个 1 private long getSessionTimeoutInMinutes() { 2 Duration sessi…

js url传值中文乱码完美解决(JAVA)

首先在你的jsp页面这样更改&#xff1a; var url"你要传入的Action的位置&ipid"ipid"&keyWord"key; 这里的key是中文&#xff0c;从input中取到值后&#xff0c;使用alert(key)发现中文没有乱码。 那么我们可以对url进行一下处理&#xff1a;urlen…

Angular应用中配置全局路径映射

Angular应用中配置全局路径映射1. tsconfig.json文件配置说明2. 配置全局路径映射2.1 指定baseUrl属性值2.2 配置paths属性值2.3 使用示例为了避免移动文件时调整基本文件的引用路径&#xff0c;或者为了引用部分文件时缩短引用路径&#xff0c;可以在配置文件中配置全局路径映…

对Oracle中索引叶块分裂而引起延迟情况的测试和分析

在版本10.2.0.4未打上相关one-off补丁的情况下&#xff0c;分别对ASSM和MSSM管理模式表空间进行索引分裂测试&#xff0c;经过测试的结论如下&#xff1a; l 在10gr2版本中MSSM方式是不能避免索引分裂引起交易超时问题&#xff1b; l 10.2.0.4上的one-off补丁因为目前仅存在L…

node.js和npm版本升级及升级过程中遇到的问题和解决方案

Node.js和NPM版本升级1. 安装Node.js1.1 版本检查1.2 下载安装程序1.3 安装2. npm升级2.1 版本检查2.2 升级3. 检查Node.js和npm之间的版本对应关系4. 检查Angular CLI、Angular、Node.js、TypeScript 和 RxJS 兼容性矩阵最初在本地安装Node.js和npm时&#xff0c;是通过Angula…

学习进度(5)

记录时间&#xff1a; 第六周 所花时间&#xff08;包括上课&#xff09; 20h 代码量&#xff08;行&#xff09; 400行 博客量&#xff08;篇&#xff09; 0篇 了解到的知识点 结对开发石家庄地铁软件&#xff0c;迪杰斯特拉算法的应用 转载于:https://www.cnblogs.c…

Windows搭建wnmp

http://www.cnblogs.com/wujuntian/p/7252343.html转载于:https://www.cnblogs.com/xiaobai-y/p/7815945.html

我的名字叫博客

我的部落是一个小部落&#xff0c;人口比较少&#xff0c;资源很贫瘠&#xff0c;但是我的人们很努力&#xff0c;他们都是最强的&#xff01;转载于:https://www.cnblogs.com/cchenry/archive/2009/06/25/1511162.html

实例15 判断某一年是否为闰年

package wjf; import java.util.Scanner; public class wjf1{public static void main(String[] args){ //主方法Scanner scannew Scanner(System.in); System.out.println("请输入一个年份"); //向控制台输出一个提示信息long year;try{yearsc…

前端开发知识总结思维导图

前端开发扮演的一个角色&#xff1a; 前端开发知识点总结&#xff1a; 转载于:https://www.cnblogs.com/zhaodagang8/p/7821427.html

Angular应用提高打包速度

当Angular应用功能不断增加时&#xff0c;其打包速度会变慢&#xff0c;可以尝试使用以下方法缩短打包时间。 打开node_modules/webpack/lib/optimize/ModuleConcatenationPlugin.js文件&#xff0c;注释以下代码片段&#xff1a; for (let i 0; i < newModule.dependencie…

iCup,USB加热饮品方案

词条&#xff1a; iCup USB加热杯 USB电器 猛料&#xff1a; 其实看用的macbook作为例子&#xff0c;就知道这个设计很有一段时间啦&#xff0c;用i打头来为苹果打造各种莫名其妙的周边产品也是前几年的潮流&#xff0c;iCup出自Onur Karaalioglu的设计&#xff0c;将USB作为加…

Angular 文件上传与下载

Angular文件上传与下载文件上传方式1 使用NG ZORRO中的组件。文件下载方式1 直接下载方式2 通过HTTP请求后端数据的方式进行下载文件上传 方式1 使用NG ZORRO中的组件。 文件下载 方式1 直接下载 已知明确的下载链接&#xff0c;可以直接进行下载。 <a href"downlo…

包装类接受string 会自动将数字类型string转换成对应得包装类型

转载于:https://www.cnblogs.com/classmethond/p/10663229.html

tensorflow常用函数解析

一、tf.transpose函数的用法 tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不同维度用的&#xff0c;如果输入张量是二维&#xff0c;就相当是转置。dimension_n是整数&#xff0c;如果张量是三维&#xff0c;就是用0,1,2…

FLASH处理图像的移动、缩放、旋转、颜色变换的类推荐。

这3个都是比较好的外部类&#xff0c;帮助操作图像的。 教程也比较详细。 看了以后发现&#xff0c;需要把图形学的书翻出来再补补课鸟... http://www.adobe.com/devnet/flash/articles/matrix_transformations_print.html http://blog.joa-ebert.com/imageprocessing-library/…

机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义

0.随机森林的思考 随机森林的决策树是分别采样建立的&#xff0c;各个决策树之间是相对独立的。那么&#xff0c;在我们得到了第k-1棵决策树之后&#xff0c;能否通过现有的样本和决策树的信息&#xff0c; 对第m颗树的建立产生有益的影响呢&#xff1f;在随机森林建立之后&…

使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!

今天遇到个表态的问题&#xff01;使用带事务的存储过程执行sql语句&#xff0c;看数据库里面插入更新都正常&#xff01; 但是返回值一直为-1&#xff01; 头那个大哦&#xff01;先贴2个存储过程吧&#xff01;看大侠们能否找到问题的存在 USE [My_DB] GO/****** Object: St…

poj2289二分图多重匹配

题意&#xff1a;给你一张二分图&#xff0c;求右边点到汇点的最小容量&#xff08;保证流量为n&#xff09;是多少 题解:二分答案&#xff0c;每次重新建边跑最大流&#xff0c;看是不是为n就好了 #include<map> #include<set> #include<cmath> #include<…

Express应用配置端口

Express应用设置端口方法1 静态修改--直接修改代码中配置的默认端口号方法2 动态修改--修改代码逻辑使其获取启动命令中的端口号参数相关文章在Express应用创建成功后&#xff0c;应用会自动配置一个端口号&#xff0c;比如3000&#xff0c;有时会遇到端口号被占用的情况&#…

Oracle中PL/SQL的循环语句

PL/SQL的三种形式的循环&#xff1a;1.LOOP&#xff08;无条件循环&#xff09;&#xff1a;loopstatements;end loop;2.WHILE&#xff08;有条件循环&#xff09;&#xff1a;while condition loopstatements;end loop;3.FOR&#xff08;固定次数循环&#xff09;&#xff1a;…

处理器调度算法

1. P117页,练习15&#xff1a;最高响应比 HRRF&#xff1a; 作业 提交时刻 运行时刻 开始时刻 完成时刻 周转时间/min 带权周转时间/min 1 10:00 2:00 10:00 12:00 120 120/120 2 10:10 1:00 12:25 13:25 195 195/60 3 10:25 0:25 12:00 12:25 120 …