数据格式
1、oracle
1)row header
row overhead
Number of columns:1字节或3字节
Cluster key id
Rowid of chained row pieces
2)column data
Column length:为了节省空间,列中的null仅存储列长度(零),Oracle不存储空列的数据。此外,对于尾随的空列,Oracle甚至不存储列长度。
Column value
1)row是由一个或多个piece组成的。不管被分成多少个row piece存储,每一个piece的rowid都是相同的。通过这一点就可以把数据“链接”起来。
2)如果columns < 256,且能在一个block中存储,那么只有一个 piece。
3)如果columns >= 256,且能在一个block存储,那么每行的第256列以后形成的piece会与1-255列组成的piece链接在一起,这种情况叫做intra-blockchaining; 即跨内链接。
4)如果不能在一个block中存储,那么就会有多个pieces chained在一起。每个piece在一个block中; 或者原来以一个piece存储在一个block中,后来因update,导致在一个block中存储不下,必须跨块存储; 这种情况是跨块链接。不管是块内链接还是块间链接,piece之间都是通过piece的rowid来连接的,实际上相当于一个单向链表。
rowid:data object number(32bit) + relative file number(10bit) + block number(22bit) + row number(16bit)
10个Byte,18个字符形式显示,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。
2、mysql
1)compact格式
变长字段长度列表
null值列表:一个字段一个bit
记录头信息
rowid
trx_id
roll_ptr
列值
2)dynamic格式
5.7 之后默认行格式是 Dynamic ,这俩行格式和 Compact 行格式挺像,只不过在处理行溢出数据时不同,它们不会在记录的真实数据处存储字段真实数据的前 768 个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。
3、postgresql
Xmin
Xmax
Cid
Ctid:block + offset
Infomask
Hoff:用户数据的偏移量
null bitmap:每个字段对应一个bit,变长数组
data
Tuple头部是由23byte固定大小的前缀和可选的NullBitMap构成,一个空行的大小是24byte,说明最后一个byte被对齐了。
- 点赞
- 收藏
- 关注作者
评论(0)