2018年5月22日 星期二

Google LevelDB 原始碼解說 (二) 架構設計


上一篇文章我們提到LevelDB的資料存取之結構,這邊來談談寫入及讀取的步驟:



寫入流程:

1.首先寫入LOG文件。也就是WAL LOG。
2.寫畢再將數據更新至Memtable。
3.當Memtable size超過一定大小限制之後,會將Memtable整理成一個 Immutable Memtable,顧名思義便是不可變更的KV表。
4.把Immutable Memtalbe 寫入至磁碟,變為SST文件。寫畢後釋放LOG文件的空間。
5.當Level 0 SST文件太多的時候,Level 0會與 Level 1的文件進行合併,且保證有序性。
6.Level 1 SST文件過多時,也會進行相同工作。

當數據不夠多的時候就只會進行1,2步驟,為了確保寫入速度。

圖片取自Draveness簡書


讀取流程


1.先去Memtable中查找相關的Key值,如果存在,回傳相應Value。
2.如果不存在,此時就去Immutable Memtable查找。
3.如果都不存在,那就必須去SS Table查找了,那勢必會較多時間。
*從數據新舊程度來看,Level 0所儲存的文件是最新的,所以先從最新找起,依序往Level 1,2順序查找,找到就回傳,沒有找到就讀取失敗。

Manifest & Current

Manifest:簡而言之,就是屬於SST的Log,儲存SSTable的key範圍和其他重要的metadata。

Current:記載當前manifest的文件名。

文章參考:https://zhuanlan.zhihu.com/p/34665791

沒有留言:

張貼留言

熱門文章