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文件夹中因此我的重点主要聚焦在该部分 其中各种存储访问方法(在各个子目录下) common(共同函数)、gin (Generalized Inverted Index通用逆向索引)、gist (Generalized Search Tree通用索引)、 hash (哈希索引)、heap (heap的访问方法)、index (通用索引函数)、 nbtree (Btree函数)、transam (事务处理) 可见这几个文件下的源码是我研究的重点。我也初步确定根据索引的类型来进行分析源码,比较异同点。
分析方式
通过gdb调试了解函数调用过程,然后再深入阅读源码。
|