深入理解缓冲区(九)

本文介绍了数据库系统中内外存地址的映射原理。通过缓存结构、数据库对象标识及数据对象映射信息,阐述了缓存块与数据文件、数据库对象间的关联方式。
4.1.4.3          内外存地址是如何映射的

1 缓存对应的内外存的映射关系:

typedef struct buftag

{

       RelFileNode rnode;               /* physical relation identifier */ // 数据库对象的位置标识,具体说明见下

       ForkNumber   forkNum;  // 可以查看“relpathbackend”函数,理解其所起的地址映射作用

       BlockNumber blockNum;             /* blknum relative to begin of reln */

} BufferTag;

 

2 数据库、表空间、和对象(主要是表对象)的对应关系,构成了内存和数据库对象的映射。

typedef struct RelFileNode

{

       Oid                spcNode;        /* tablespace */ //表空间,本身是一个物理存储的概念,每个表空间的id与其具体的数据文件对应,这样使得缓存块可以和数据文件对应

       Oid                dbNode;                /* database */

       Oid                relNode;         /* relation */

} RelFileNode;

在这个结构中,注意,成员relNode,很重要,是数据和数据库对象映射的重要链条。

 

GetNewRelFileNode函数的如下代码:

              /* Generate the OID */

              if (pg_class)

                     rnode.node.relNode = GetNewOid(pg_class);

              else

                     rnode.node.relNode = GetNewObjectId();

 

3 数据对象和数据的映射关系:pg_class.h

       在pg_class.h文件中,有一列,信息如下:

       int4         relpages;         /* # of blocks (not always up-to-date) */

标识了本行所表示的对象的具体位置(在数据文件中的具体位置)。

       而pg_class系统表,存放了数据库对象(表、视图、序列等)的元信息,本表隶属于具体的数据库(即系统表是局部的,每个数据库都有一份;有的系统表是全局的,全系统只有一份如pg_database)。

 

       有了如上三种信息,即可以串联起数据库对象、内存(缓存)、外存间的映射关系,即可知晓内外存地址是如何映射的了。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值