2021SC@SDUSC
在小组中我负责索引的建立与使用的相关部分,在此一共写了16篇相关的分析报告,着重分析各种索引的操作和管理方法,以及分析了PG中四种最重要的索引B-Tree索引,Hash索引,GIST索引,GIN索引。分别讲述了这四种索引相关的原理,组织结构,创建,查询,插入等相关重要函数,同时也学会了在PG中如何使用这些索引类型来加快查找的速度。
在分析了关于PG中与索引相关的代码,这只不过是PG源码的一部分,但通过这一部分我充分体会到了PG源码的强大,可靠,安全等等特性,在索引的源码中,为了避免并行操作造成的数据的不统一以及其他的一些危害,在大部分函数的前一阶段,PG对于锁的设置与考虑是十分缜密的,包括缓冲区的pin以及页面上的lock等,多种锁的使用保证了系统的并发进行的安全性。
我们分析的12.0版本与之前的9.0版本很多地方都有较大改动,比如有些索引结构在9.0中使用了stack的相关结构,12.0版本改成了堆等查询速度更快的数据结构,这样更加优化了数据库处理大量数据时的查询速度,12.0版本对于相关的数据结构考虑更加全面,对于锁的设置以及加锁和解锁的时机考虑更加恰当,这也是PG开源后更加强大的地方。
而在PG中引用了大量的指针,加快函数调用的速度,同时对于大量的函数的层级调用PG也做的很有条理,把不同的功能封装成各个的函数从而可以使得结构更加清晰明了,这也是之后我需要需要学习的地方。
总之这次的分析PG源码获益匪浅,在之后的写代码过程中我也会学习PG的相关思想,让自己的代码更有条理,更有鲁棒性。