GaussDB(DWS)存储系列之行存表

网友投稿 1229 2022-05-28

GaussDB(DWS)实时数仓的数据都是存储在非易失性的存储设备上,本文从行存表的存储结构出发,帮助大家更好的了解GaussDB(DWS)是怎么在物理磁盘上存储数据的。

行存表的数据文(表、索引、cudesc表等文件),被划分为多个固定大小的page页面(block),每个page页面默认大小为8K,页面编号(block number)从0开始计数。如果当前page页面已经存满,则在末尾会新增一个page,继续存储。

行存表的page页面主要由page header(页头)、空闲空间、数据heap tuple组成,下图展示了page页头各个字段的存储信息:

pd_lsn:本页面最后一次变更所写入的xlog记录对应的lsn。

pd_checksum:主要用于校验页面的完整性,避免数据由于磁盘、IO等原因导致异常。

pd_flags:表示页面状态。

pd_lower:执行line pointers末尾,也就是空闲空间的起始位置。

pd_uppder:指向最后一个tuple,也就是空闲空间的结束为止。

pd_special:用在索引页中,在索引页中它指向特殊空间的起始位置,在堆表页面中它指向页尾。

pd_pagesize_version:页面大小以及页面版本号。

pd_prune_xid:该xid主要用于页面内清理

line pointers:该指针数据指向每一个对应的tuple,也表示每个tuple在页内的偏移offset。

那么页头在存储数据过程中,有什么作用呢,下面通过tuple插入的过程,给大家展示下一些页头信息时如何更新的

GaussDB(DWS)存储系列之行存表

(1)假设有一张表仅包含了一个tuple,那么该page header的pd_lower指向line pointers的第一个。在line pointers末尾和最后一个tuple之前的空间被称为free space。为了能够唯一确定页内的tuple,常用ctid(block number, offset)唯一确定对应的tuple。

(2)当插入第二个tuple,则生成line pointer递增,并指向第二个tuple。与此同时,pd_lower、pd_upper更新对应的指向,具体可见下图说明。

由此可见,随着数据的插入,页头信息也在不断实时更新。

总结:当然GaussDB(DWS)数据库不仅仅只有行存这一种存储格式,还有另外一种列存存储格式,后续的文章中我们会对列存页面结构跟大家进行讲解说明,对GaussDB(DWS)数据库底层数据存储有一个全面的认识。

数据仓库服务 GaussDB(DWS) Gauss AP EI企业智能

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Qt入门系列开发教程【基础控件篇】QSpinBox旋转框
下一篇:部署数据库主从备份1
相关文章