小麦带你看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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值