myrocks store format 举例

create table coltypes(
c1 int not null,
c2 int,
c3 char(10) not null,
c4 char(10),
c5 varchar(10) not null,
c6 varchar(10),
c7 blob not null,
c8 blob,
primary key c1
) comment="ttl_duration=1,ttl_col=c1" engine=RocksDB

mysql 在上层中构造一个 char * buf 然后调用 handler::write_row 插入

           

8byte has_ttl  unpack_info Nullable bitmap  定长
4byte
     定长 
字符集相关
      定长
字符集相关
size # data
变长 # 定长
size # data 
变长 # 定长
size # data
变长 # 定长
size # data
变长 # 定长
8+32+32bit
     定长

ttl

     c2      c3  c4  c5   c6 c7 c8 crc32 option

说明:

unpack_info 

是可选的,是一些 unpack 的信息

只有

ttl:

如果comment里有ttl,才添加ttl

nullable bitmap 计算方式

扫描二维码关注公众号,回复: 933010 查看本文章

ptr[m_null_offset] |= m_null_mask(0x1 << n) 如果 等于 0x80 总byte 数加一,总字节数等于count(nullable fields)+7/8

for(Field f:fields){ 
 uchar cur_null_mask=0x1; 
   if(f.maybe_null()){ 
              if(cur_null_mask == 0x80)
                      cur_null_mask=0x1; 
                      null_bytes++; //这个表示总共字节数
            else
                     cur_null_mask<<=1; 
   }
  else {
          m_null_mask=0; 
  }
}

if (cur_null_mask != 0x1) 
         null_bytes++;


c5,c4

存入格式为:1 or 2 byte(store data size)+ data

c7,c8

存入格式为: 1 -4 byte(store data size) + data


crc

为随机 如果下面函数为TRUE -> m_store_row_debug_checksums && (rand() % 100 < m_checksums_pct),则有 crc

猜你喜欢

转载自blog.csdn.net/qq948993066/article/details/78802663