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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值