一些想法

    前一段时间分析了Postgresql存储系统的页面存储管理的源码,感觉这样直接上手去分析一个子模块的源代码,有点瞎子摸象的感觉。

源代码是系统整体分析和实现的一个直观的表现形式,它可以提供一切你想知道,获取的信息。但是有时候想取得自己想要的信息往往是很费力的,

毕竟海量的源代码是没有智能的,我们也不能编写一个类似数据挖掘的工具从中“挖掘”中我们所“感兴趣”的东西。向老师说,这个课题的最终目的

是要从宏观和微观完全搞清楚这个所谓最先进,最潮流的DBMS的实现。微观显然就是那些讨厌源代码,那么宏观呢,就是要从所有的论文,技术文档甚至源码

的注释中去找寻了。

    按照上诉的想法,这两天又看了一些之前看过的论文,刚接到这个课题的时候,看相关的文章完全是机械地去咀嚼,几乎没有消化,别人说什么,那就是什么。

现在分析了一段源码后再来看这些论文,反而看到了以前没看到的一些东西。

    比如我们之前分析的页面存储的部分,以前看到文章中的部分,只是知道页面是存储引擎的一部分,它的具体作用,细节,组织形式的东西等等统统不理解,但是,

分析了之后,我们可以知道页面是存放在缓冲中的,缓冲在哪呢,显然,是在内存中。这就类似于虚拟存储器了,要使用的内容存放在内存中,不需使用的存放在外存中,这就是为什么要设计页面的思想。页面存放的是什么呢,通过分析源码我们知道,存放的是元组项,是要读取,操作的元组项。页面有哪些操作呢,同样通过分析源码,我们也知道,有页面初始化,判定页面是否有效,页面添加,页面删除,页面清空等等一系列向外部提供的接口。但是这些接口在哪里被调用呢?我们不知道了,因为我们还没分析完,我们才刚刚开始。现在,我们再回过头来看文档,知道存储系统划分为,页面管理,文件管理,缓冲管理,存储管理四个子系统。页面,作为一种存储的形式,它存放的是要被上层数据库服务器调用的磁盘块上存储的物理元组文件,是要通过缓冲管理来调用的。存储管理的作用是什么,是屏蔽掉所有的物理设备的差异向上层提供统一的接口,使得可以更方便地访问这些设备(磁盘,光盘等)。表最终是要通过文件操作来访问的,如果使用操作系统提供的机制,由于上层的原因,Postgresql为每个服务分配一个进程,而在linux下,每个进程只可以操作256个文件,这显然是不够的。因此,文件系统建立了虚拟文件机制,它将所有后端打开的物理文件描述符组成一个LRU链,通过替换操作来筛选文件,最终才通过操作系统提供的低级文件访问机制来对文件进行操作。这样所有的关系都理清了,整个存储系统的宏观架构如上所述。

    有人问 Linus,怎样才能写出一个操作系统,Linus答道: Read the fucking source code!。引用马哲里面经典的话语:前途是光明的,道路是曲折的。大家一起加油吧。

姓名:鲁笛 主题:感想

posted @ 2010-01-24 01:14  电信415实验室  阅读(373)  评论(1编辑  收藏  举报