leveldb原始碼剖析2 4 核心設計之資料迭代器

2021-10-24 01:19:41 字數 751 閱讀 7873

2 其他迭代器

在leveldb中,迭代子模式被廣泛用及、幾乎貫穿於整個**之中。

在leveldb中,主要的迭代器如下:

注:除了圖中的關鍵迭代器,還有一些迭代器,例如emptyiterator。

該迭代器主要功能是迭代sstable檔案資訊。其key為檔案的largest key;value為檔案檔案序列號和檔案大小序列化後的資料。value值的序列化如下:

slice value()

const override

該迭代器用於迭代sstable檔案中乙個block內的資料。

該迭代器用於遍歷乙個sstable檔案中的資料、或多個level中的資料。以乙個sstable檔案為例,全部載入進記憶體勢必耗費過多空間,於是先將data index block載入到記憶體、然後遍歷完乙個data block再通過data index block讀取下乙個data block去遍歷;其實,遍歷多個level中的資料也是一樣的道理,先通過檔案號挨著挨著載入每乙個檔案再往下遍歷。

該迭代器主要是為了遍歷多個資料集合且他們有資料重複只用,由於資料是先按key公升序、再按sequencenumber降序,所以能保證同乙個key最新的資料是靠前的。特別地,mergingiterator不會處理資料的新老判斷。

該迭代器主要是提供給呼叫者遍歷資料庫中的所有資料只用。由於mergingiterator不會處理資料的新老判斷,所以dbiter基於mergingiterator之上加了對陳舊資料的過濾功能。

leveldb原始碼剖析 編碼

leveldb是乙個google出品的單機kv資料庫。用c 編寫,量很小,大概只有1 2萬行。寫的可以用優雅來形容,毫無疑問是我至今看到的最優雅的c 而且由於 量比較小,可以直接通讀整個原始碼,了解乙個完整的kv系統的構建流程。是乙個很好的學習材料。這也是我第一次讀資料庫方面的原始碼,嘗試用部落格記...

LevelDB原始碼剖析之Memtable 1

memtable是leveldb很重要的一塊,leveldb的核心之一。我們肯定關注kv資料在memtable中是如何組織的,秘密在skip list中。在leveldb中,所有記憶體中的kv資料都儲存在memtable中,物理disk則儲存在sstable中。在系統執行過程中,如果memtable...

leveldb原始碼剖析1 1 基礎概述之原始碼搭建

leveldb是乙個開源的單機kv儲存庫,其作者是谷歌工程師jeff dean和sanjay ghemawat。很多開源lsm儲存引擎都基於或使用leveldb,例如rocksdb。關鍵原始碼目錄介紹 其中,db和table是功能的核心,部分資料結構在util中。如果沒做過資料庫引擎的人,建議看 以...