1. 程式人生 > >myrocks 的 pk 的生成原理(k/v)

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)