myrocks 的 pk 的生成原理(k/v)

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)

猜你喜欢

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