leveldb設計思想學習總結

2021-09-25 18:20:23 字數 1308 閱讀 5294

每一類元件,都有它特定擅長的應用場景。在leveldb出世之前,我們對於nosql下的kv儲存,我們有redis方案儲存。然而redis資料儲存的上限,即是機器記憶體。內存在目前階段,算是比較昂貴。而leveldb的出現,提供了乙個可以以機器磁碟為容量上限,支援持久化的寫操作的同時,做到寫速度較快,讀速度也不慢的乙個解決方案。

作為乙個支援持久化kv系統,核心就這麼幾個。curd

1)持久化

2)寫操作

3)讀操作

4)查詢

5)刪除

需要支援持久化,則我們一般會用wal技術,即是先寫日誌。只要日誌寫成功,那麼資料就算持久化到磁碟中了。

這個方案能夠滿足1)持久化和2)寫操作的要求

存在問題:

但是對於讀操作不友好。只寫日誌需要比較好的查詢。

基於上面的思路,我能否增加一塊記憶體來快取資料,即是我寫完日誌之後,我把資料在記憶體中寫乙份。記憶體中維護乙份kv的記憶體表。

如果資料量在比較小的情況下,那這個方案能夠比較好的滿足以上要求。

但是,資料量大的時候無法工作。

存在問題:

當資料量比較大的時候,記憶體無法支撐時,需要到日誌中去查詢資料,讀操作會顯得力不所心。

方案二的問題,在於資料量較大的情況下。

1)如果查詢資料在記憶體中,則直接返回資料。

2)如果查詢資料不在記憶體中,而在磁碟中,則需要想辦法解決這個場景的問題。

如果我們在磁碟中的日誌,也能夠儲存的時候保證key有序,查詢的時候,能夠通過比較快的定位磁碟檔案,並能夠找到具體的檔案來找具體的key,通過二分搜尋,則能夠比較快的完成查詢工作。

基於上面的分析,leveldb的主體設計思路已經呈現出來。

寫操作wal寫到日誌,再更新到memtable中。

如果memtable超過一定的size之後,則轉換成imm memtable,imm記憶體塊與磁碟中的sstable進行合併落盤。

磁碟中的sstable根據新舊進行分層。上層比下層要新,資料量要少。

讀操作在memtable中查詢資料。

在imm記憶體塊中查詢資料。

在level0、level1、…leveln中進行查詢資料

以上操作,每一步驟如果找到則返回,如果未找到則繼續往下一步驟執行。

待續。。。

設計思想學習 策略模式

首先來看一下定義 策略模式 strategy 定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換 策略模式主要有三點組成 舉個栗子 我中午想吃好吃的,但可以吃的東西有很多種 烤鴨 龍蝦 帝王蟹,但是不管吃啥,都是吃,所有就有了抽象策略角色 inte ce dine 下面這些是具體吃啥,也...

設計思想學習 外觀模式

記得有一次,我們一起去了乙個別墅轟趴,那時候大家都去玩自己想玩的事情,大廳開燈是必須的,看電影的要去小房間開投影儀幕布,玩遊戲的要開電腦或者xbox等等。最後玩的筋疲力盡了還要乙個個去把他們關掉,那時候就在想如果有乙個按鈕關掉或者開啟所有多好。直到今天看了外觀模式才知道,那個想法就是乙個外觀模式的思...

設計思想學習 組合模式

本來這篇是要元旦發出來的,可惜玩的太嗨了,沒有時間發,只能抽空看看知識點。祝大家新年新氣象,身心健康,心想事成。相信只要玩過電腦的人都對下面的這張圖不會陌生 這結構想必大家也都熟悉,就是樹狀結構 其實這也是組合模式的定義 組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結...