levelDB簡單認識

2021-07-11 00:26:59 字數 1185 閱讀 7317

leveldb是乙個google實現的非常高效的kv資料庫。它是乙個c/c++程式語言的庫,不包含網路服務封裝,無法像一般的儲存伺服器(如mysql)那樣用客戶端來連線它,使用者應該自己封裝自己的網路伺服器。

leveldb是單程序的服務,能夠支援billion級別的資料量,而且具有非常高的效能。寫資料速度高達每秒過40w,隨機讀的效能就相對低一些。這是因為它的lsm儲存引擎的設計思想:將對資料的修改增量保持在記憶體中,達到指定的大小限制後將這些修改操作批量寫入磁碟。

leveldb的基本框架

memtable:db資料在記憶體中的的儲存形式,採用skiplist實現。

sstable:資料持久化檔案,其size有限制最大值,sstable採用分層管理。db預定了最大的層級數。sstable前一部分是由乙個個block組成,後面是索引元資訊(封裝成filemetadata)。

log:日誌檔案,主要作用是用於系統崩潰恢復而不丟失資料,leveldb在寫入記憶體前先將操作記錄寫入log檔案中,然後再寫入記憶體(memtable)中。

manifest:清單檔案,主要儲存的是sstable中key開始和結束的區間,在讀操作時可以定位要讀取的key在哪個sstable。

寫操作:

先將資料同步到log,再寫入memtable,寫完成同時snapshot(當寫入不為空時);當memtable的size到達閥值,memtable就會形成immutable memtable(唯讀memtable),同時生成新的memtable,後台compact會將唯讀儲存表dump成sstable。第一次dump形成level 0,往後依次形成level1、level2…。level0和其他層是有可能重疊的,其他層之間互不重疊。刪除、修改都是寫操作,刪除是做標記,修改是寫入和原來key一樣的value,在最後sstable合併的時候才進行物理上的刪除和修改。

讀操作:

讀資料時先去記憶體的memtable和immutable memtable查詢;如果沒有找到,根據索引檔案manifest判斷要找的key在哪個sstable中,然後先去cache中查詢,未找到則在磁碟找,磁碟找到的sstable調入到cache中。

深入leveldb 初步認識leveldb

1.leveldb簡介 leveldb是google兩位工程師實現的單機版k v儲存系統,具有以下幾個特點 1.key和value都是任意的位元組陣列,支援記憶體和持久化儲存 2.資料都是按照key排序 3.使用者可以重寫排序函式 4.包含基本的資料操作介面,put key,value get ke...

leveldb之SkipList的簡單實現

skiplist是鍊錶的變形,它在鍊錶的基礎上給每個元素增加了乙個高度,且每個元素的高度是乙個隨機值,因此skiplist是一種隨機化的資料結構。skiplist增 刪查 改的效率都非常高,是一種典型的以空間換時間的儲存方式。常規的鍊錶如下 而相同元素對應的skiplist結構如下 由上可知,當要在...

this簡單認識

this 在函式中簡單的說,this的指向存在於函式呼叫的時候決定的,誰呼叫了這函式 函式中的this就指向誰 例如 1 普通的呼叫函式的時候 fn window2 物件呼叫 var obj obj.f fn obj.f this obj3 定時器呼叫 因為fn不是我們自己手寫 呼叫的 底層是win...