postgreSQL源码分析综述
2021SC@SDUSC
目录
- 综合分析
- 安装过程
- 主要源码
- 分工情况
- 我的任务
- 分析方式
综合分析
经过小组讨论和分析,大家一致认为postgreSQL的核心部分在于对SQL功能的实现。而postgreSQL的核心代码则在于其后端的完成实现。
由上图,可以看出postgresql处理查询请求(核心功能)都是依托postgres这个进程完成的。而查询请求处理的流程为:解析SQL语句->分析处理->语句重写->查询优化->执行计划。所以,源码的核心部分也就在这个流程中。
安装过程
在官网上下载源码,并利用虚拟机在linux上进行安装调试,具体步骤与链接: 网页链接相同,调试过程安装了readline,zlib等多个库才完成。
(进行了数据库的创建并查看进程状态可知安装成功)
主要源码
经过小组分析我们认为核心代码在于src的backend文件夹中。因此接下来的工作都是对它来展开分析。
backend文件夹包含了所有的后端源码
- access文件夹包含各种存储访问方法、索引的实现。(重要)
- bootstrap文件夹为数据库初始化时调用方法。
- catalog文件夹为系统目录。
- commands文件夹为SQL命令。(重要)
- executor文件夹为执行器相关代码。(重要)
- foreign文件夹为FDW相关代码,使得用户可以通过SQL访问没有存储在数据库中的数据。(扩展)
- jit文件夹为Just-In-Time Compilation,为即时编译的相关代码,用于提高查询语句性能。(扩展)
- lib文件夹为通用函数。
- libpq文件夹为c/cpp的库函数,处理与客户端的通信。
- main文件夹为主程序。
- nodes文件夹为链表、节点等数据结构,以及相关的方法。(重要)
- optimizer文件夹为优化器相关代码。(重要)
- parser文件夹为编译器相关代码。(重要)
- partitioning文件夹为分片相关代码。(重要)
- po文件夹为语言文件配置。
- port文件夹为平台兼容性处理相关代码。
- postmaster文件夹为postmaster进程,以及相关辅助进程的代码。
- regex文件夹为正则处理相关代码。(重要)
- replication文件夹为有关流复制的相关代码。(重要)
- rewrite文件夹为规则与视图相关的重写处理。
- snowball文件夹为全文检索相关(语干处理)代码。
- statisics文件夹为收集统计信息相关代码,与估算相关。
- storage文件夹为管理各种类型存储系统相关代码。(重要)
- tcop文件夹为postgres服务进程的主要处理部分,即查询流程调用的相关代码。(重要)
- tsearch文件夹为全文检索。(扩展)
- utils文件夹为各种支持函数,如错误报告、各种初始化操作、内存管理等。
分工情况
根据查询处理的流程以及关系型数据库的核心功能,将任务分为四个部分。
- 查询的编译与执行
- 索引的建立与使用
- 事务和并发控制
- 存储管理
我的任务
我负责索引的建立与使用这一步部分的内容
首先来说PostgreSQL提供了多种索引类型,B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一种索引类型使用了 一种不同的算法来适应不同类型的查询。默认情况下, CREATE INDEX命令创建适合于大部分情况的B-tree 索引。
PostgreSQL关于索引的建立和使用主要在backend的access文件夹中因此我的重点主要聚焦在该部分,我也会对B-tree,Hash,GiST,GiN的源码展开重点分析,涉及到其中的数据结构以及算法。
其中各种存储访问方法(在各个子目录下)
1.common(共同函数)
2.gin (Generalized Inverted Index通用逆向索引)(我的重点)
3.gist (Generalized Search Tree通用索引)(我的重点)
4.hash (哈希索引)(我的重点)
5.heap (heap的访问方法)
6.index (通用索引函数)
7.nbtree (Btree函数)(我的重点)
8.transam (事务处理)
可见这几个文件下的源码是我研究的重点。我也初步确定根据索引的类型来进行分析源码,比较异同点。
同时我也会关注到其他的文件夹中的源码来对索引的建立与使用做到更好的分析。
include包含了关于索引的数据结构,因此也是我分析的重点
在backend文件夹中,除了access文件夹还有executor文件夹- 执行来自optimizer的复杂的节点形式的查询计划,optimizer文件夹-创建查询路径和查询计划。
分析方式
通过gdb调试了解函数调用过程,然后再深入阅读源码。
postgreSQL源码分析综述相关推荐
- PostgreSQL源码分析
PostgreSQL源码结构 PostgreSQL的使用形态 PostgreSQL采用C/S(客户机/服务器)模式结构.应用层通过INET或者Unix Socket利用既定的协议与数据库服务器进行通信 ...
- postgreSQL源码分析——索引的建立与使用——GIST索引(2)
2021SC@SDUSC 本篇博客主要讲解GiST索引创建以及删除的相关函数 这里写目录标题 GIST创建 相关数据结构 GISTBuildState GISTInsertStack gistbuil ...
- postgreSQL源码分析——索引的建立与使用——Hash索引(3)
2021SC@SDUSC 上一篇博客讲了关于Hash索引创建与插入的相关函数,这一篇博客讲述关于溢出页的操作函数以及Hash表的扩展相关的函数. 目录 溢出页的分配和回收 _hash_addovflp ...
- postgreSQL源码分析——索引的建立与使用——Hash索引(2)
2021SC@SDUSC 目录 Hash索引创建 hashbuild函数 _hash_init函数 Hash索引的插入 hashinsert函数 _hash_doinsert函数 总结 Hash索引创 ...
- postgreSQL源码分析——索引的建立与使用——各种索引类型的管理和操作(2)
2021SC@SDUSC 目录 上层操作函数 index_open index_beginscan() index_create() indexcmd.c 下层接口函数 IndexScanDescDa ...
- postgreSQL源码分析——索引的建立与使用——Hash索引(1)
2021SC@SDUSC 目录 Hash索引 Hash索引原理 Hash表 Hash索引结构 Hash的页面结构 元页 桶页,溢出页,位图页 和B-Tree相比的优缺点 优点 缺点 总结 Hash索引 ...
- postgreSQL源码分析——索引的建立与使用——B-Tree索引(3)
2021SC@SDUSC 目录 B-Tree的插入 bt_insert _bt_doinsert BTInsertStateData _bt_search函数 _bt_moveright函数 B-Tr ...
- postgreSQL源码分析——索引的建立与使用——各种索引类型的管理和操作(1)
2021SC@SDUSC 目录 概述 管理索引的系统表 记录索引相关的系统表 与索引系统表相关的后端源码 索引的操作函数 上层操作函数 下层接口函数 概述 索引是指按表中某些关键属性或表达式建立元组的 ...
- postgreSQL源码分析——索引的建立与使用——总结篇
2021SC@SDUSC 在小组中我负责索引的建立与使用的相关部分,在此一共写了16篇相关的分析报告,着重分析各种索引的操作和管理方法,以及分析了PG中四种最重要的索引B-Tree索引,Hash索引, ...
最新文章
- 所有java程序都有线程_若所有的用户线程都终止了,Java程序就会结束。( )_学小易找答案...
- 2012 iis php mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建wordpress博客教程
- iOS中SQLite持久化存储第三方库FMDB
- 运维自动化之基于python语言的文字界面的运维管理软件
- 实验2 SQL Server 表操作
- html checked属性值,HTML复选框的checked属性的值是多少?
- 安卓学习笔记11:常用布局 - 网格布局
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
- visio2016 数据库模型图_数据库第七章--NoSQL数据库
- /*模拟一个简单的购房商贷月供计算器,按照以下公式计算总利息和每个月还款金额: 总利息=贷款金额*利率; 每月还款金额=(贷款金额+总利息)/贷款年限
- 扫描隧道显微镜STM功能介绍及用途
- 02H5C3-11. Nginx中部署静态网站
- 初次接触peoplesoft
- oracle数据库学习笔记(二)(创建表、DDL、DML、单行插入数据、多行插入数据)
- 设计模式之十三观察者模式
- Hutool(Excel工具使用)
- Instruction set
- .com 域名三十年回顾:从 1 到 1 亿个,一部互联网的变迁史
- HTML+CSS学习笔记(pink老师前端课程笔记--补档)
- 基于C语言的彩票开奖小程序(附源码)_☆*往事随風*☆的博客
热门文章
- 关于StringIndexOutOfBoundsException那些事~
- 95-36-210-ChannelHandler-系统Channel-TimeoutHandler
- 【Spring】Spring 关于 Redis 的序列化器
- 【kafka】消费组 死掉 kafka Marking the coordinator dead for group
- 关于git push报403的问题
- 开源数据同步神器——canal
- matlab单机带负荷系统模型,用MATLAB仿真实现电力系统静态稳定性分析
- 后端工程师的「跨域」之旅
- 5种方式,判断一个数组中是否包含某个元素
- 关于Spring注入方式的几道面试题,你能答上么?