rocksdb 是一种key/value 存储的 ,那么 在一条数据 发生存储的时候,又是怎么计算 key值的
1.当创建表指定了 key
第一步 先 存入当前key的 index_number(这个num 是rocksdb 自增计算的 存储在rocksdb内,key/value存储 和其他数据一样)
index_number 可以range delete之类的操作
rdb_netbuf_store_index(tuple, m_index_number); tuple += INDEX_NUMBER_SIZE;
之后 会存储对应key 下的 field->ptr(not all data ,turncate)
(this->*pack_info->m_pack_func)(pack_info, field, pack_buffer, &tuple, &pack_ctx);
m_pack_func:
1.Rdb_key_def::pack_with_make_sort_key 这个是默认处理 可排序的key,按 8 位处理
2.Rdb_key_def::pack_with_varchar_encoding 这个是pk 为字符串的时候处理的,默认 是一种填充 对齐 8 位
2 . 当创建表没有指定 key
则系统 自增 为 hidden_pk_id (m_tbl_def->m_hidden_pk_val++;)
key like:
m_index_number(unique ,so all key is unique) + field->ptr + field->ptr....
rocks value 的指定就比较简单了
1.在没有ttl 和 unpack info 的时候 value like: (ttl) + (unpack_info) + field->ptr + field->ptr.... + checksums (如果 指定了checksums 还会append checksums)