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