myrocks store format 举例

来源:互联网 发布:假病例制作软件 编辑:程序博客网 时间:2024/05/21 10:42

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

 Nullable bitmap

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

ttl

 

  c1  c2     c3 c4 c5  c6c7c8crc32 option
                                                                                                                           

说明:

ttl:

如果comment里有ttl,才添加ttl

nullable bitmap 计算方式

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 byte(store data size) + data


crc

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


原创粉丝点击