PostgreSQL之TOAST

TOAST的全称是The Oversized-Attribute Storae Technique, 即超尺寸字段存储技术;每次看到,恰好也想到面包片,而它的总体想法也就是把一个超大尺寸的列(主要是变长类型的)进行尽可能地切片。

这个图给出了TAOST技术在磁盘存储上的整体信息,关键信息点如下:

  1. toast只是针对一条元组中的某个超长的字段进行操作的,操作成功后这个字段存储了一个toast指针类型的数据,由它来寻找切片后的数据存储在哪里,怎么样将它们寻找完整;
  2. toast元组存储在额外的表中,属于一个字段的元组有着相同的chunk id,同时又有另外一个chunk seq标识将各个片断标识并有序联系起来,这样就可以还原为一条完整的可访问字段的数据;
  3. 一个toast元组其结构与常规元组无异,其大小不会超过面的1/4,一个页中基本来说有4个这样的元组即可填充满;

TOAST的存储策略

varlen数据的存储

变长的存储有两种格式,一种是1字节头的,一种是4字节头的。以big endian来讲,

第1种恰好对应的是taost指针数据的存储格式。第2种是最常见的长度在127之内的字符串数据的存储格式。剩下的两种情况是4字节存储格式,只是一种是压缩数据的,另一种是非压缩的。

对于有些数据类型,是不允许padding的。无论是在磁盘上的存储,还是在执行引擎过程中的运算,都必须是4字节的头格式。这一部分数据在实施数据的压缩过程中是需要注意的。

Table of Contents