今天就跟大家聊聊有关POSTGRESQL的底层存储原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1 从对比来看POSTGRESQL 的数据库(非INSTANCE 那个级别的数据库),SQL SERVER 的DBA 可以和理解 SQL SERVER 对INSTANCE 和数据库的概念一样,不需要费劲,MYSQL 的DBA 也是一样。 ORACLE的DBA 需要理解,这里的数据库就是ORACLE中一堆同样用户下的表的集合,叫数据库。非INSTANCE的那个概念。
下图就是一个POSTGRES QL INSTANCE 中包含的数据库,有一些事自建的,有些是系统的数据库, oid是每个数据库的OBJECT_ID,这点很类似SQL SERVER 中每个对象都有一个OBJECT_ID。
创建一个表company, 这里展示他的表结构,通过查询COMPANY的表结构,发现查询语句的写法的确和PL/SQL 类似,看来SQL SERVER 和MYSQL 在处理表关联是一路的, ORACLE 和 POSTGRES QL 在写表关联是一个思路。
那这个表的实体文件到底存在哪里,
一般一个表会有三个文件,表的数据文件, _FSM _VM 三个文件,组成,FSM 和 VM 和表的数据页面管理,以及数据清除有关。
POSTGRES QL 对用户是比较友好的,例如你要查当前库中的COMPANY表的一些信息,这是其他数据库都做的不足到的。
POSTGRES QL 仅仅需要输入 \dt company,直接将结果就输出了
相对其他数据库要简单的快速方便的多。
通常POSTGRESQL 中每个表是存储在多个固定的 8KB的页面中的,表存储在HEAP的文件中,并且由于页面的组织方式和 ORACLE 有些相似,通过item 指向 数据块的方式,下图画的比较粗糙,实际上POSTGRESQL在每个页面中的设计是很巧妙的。
通过相关函数(POSTGRESQL 默认不按照,自己源码编译,此处不再介绍安装过程)
通过上面的命令我们可以分析POSTGRESQL 的页面基本信息
如果我们想知道这个页面到底有多少空间还可以使用, 使用 UPPER - LOWER 就可以得到我们剩下的空间,并且头部占用 24B 每个 ITEM 占用 4B,由于元祖(data)的长度并非完全一致,所以这里面通过 alignmentpadding 来补齐元祖,提高I/O的性能,一般64位的机器的长度为8K
下面我们继续分析,POSTGRESQL 中的元祖信息(DATA),通过下图
我们可以看到,每一个数据行对应的CTID 和 每一行占用的PAGE中的大小
(SQL SERVER 里面也有类似的函数可以查看,并且一眼就可以看出和 ORACLE, POSTGRESQL 之间的数据页面的组织不同)
大致一行的数据是上面图组成的(画的还是不仔细t-min t-max 少X 应为 t-xmin t-xmax ,见谅)
主要元祖的创建transaction 号 T-XMIN
元祖的删除transaction 号 T-XMAX
CTID
t_hoff 数据偏移量
data 数据组成
未来验证上面的行结构,新建一个表 varchar(8000) ,并且大量输入字符,见下面的图,大家可以很清楚的查看,页中的truple(元祖的)偏移量和占用的空间
POSTGRES QL ,在数据存储底层设计上,和ORACLE 基本相似,并且也是堆表进行数据的存储,这在很大一方面验证了,这样的底层设计有利于大数据的处理,也验证了部分最近很大一部分机构和企业的在 ORACLE 转型中,选择POSTGRES QL 来代替 ORACLE 数据库的可行性。
看完上述内容,你们对POSTGRESQL的底层存储原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。