4.2 数据的内部格式 4.2.1 页的存储数据结构
在操作系统层面,数据存储,只是一些二进制信息,这个层次,是不知道文件内容的含义的。文件的逻辑含义,取决于应用层面。
数据库系统的文件组织,也如此。在外存存储,以二进制格式存放,读写文件,以块(8k)为单位,读入的数据,存放与数据缓冲区,所以,数据的逻辑含义,始于数据缓冲区。
在bufpage.h文件中,有如下定义:
typedef struct PageHeaderData
{
/* XXX LSN is member of *any* block, not only page-organized ones */
XLogRecPtr pd_lsn; /* LSN: next byte after last byte of xlog
* record for last change to this page */
uint16 pd_tli; /* least significant bits of the TimeLineID
* containing the LSN */
uint16 pd_flags; /* flag bits, see below */
LocationIndex pd_lower; /* offset to start of free space */
LocationIndex pd_upper; /* offset to end of free space */
LocationIndex pd_special; /* offset to start of special space */
uint16 pd_pagesize_version;
TransactionId pd_prune_xid; /* oldest prunable XID, or zero if none */
ItemIdData pd_linp[1]; /* beginning of line pointer array */
} PageHeaderData;
这个结构,描述了数据页的页头信息。一个数据页,是一个块大小,即8k。这个页的初始部分,完全由PageHeaderData这个结构定义。