天天看點

LevelDB之Cache之HandleTable

HandleTalbe::HandleTable()

LevelDB之Cache之HandleTable

LRUHandle* HandleTalbe::Insert(LRUHandle* h)

1. 插入元素

情況1:對于原始的HandleTable中沒有元素

LevelDB之Cache之HandleTable
LevelDB之Cache之HandleTable

情況2:對于待插入的HandleTable中通過FindPointer找到具有相同的key或hash的節點

LevelDB之Cache之HandleTable
LevelDB之Cache之HandleTable

2. 擴容,重新計算hash并調整節點

LevelDB之Cache之HandleTable

插入4個元素後的HandleTable記憶體結構示意圖:

LevelDB之Cache之HandleTable

擴容:

LevelDB之Cache之HandleTable

重新計算hash及調整結點:

即将原來list_中的所有節點,根據目前桶的個數(new_length)及其hash值重新計算放置到new_list中的桶索引,下圖中标紅的語句。

LevelDB之Cache之HandleTable

調整後的HandleTable記憶體結構示意圖:

LevelDB之Cache之HandleTable