本篇是leveldb最後一篇,這裡主要把技術核心點,效能提公升點或者面試可能會被問到進行總結。
1、leveldb key-value記憶體,記憶體中儲存的是所有key-value嗎?
答:不是 搜尋順序,memtable immtable ldb檔案
2、布隆過濾器 在leveldb中的應用是什麼?
答:布隆過濾器主要應用查詢方面,如果查詢乙個key在過濾器中返回false,那麼一定不存在檔案中。leveldb預設沒有開啟布隆過濾器功能。
3、有乙個比較舊的資料key-value,假設在第6層,現在對其進行刪除,然後執行流程是什麼?
答:直接建立一條標記為delete的記錄,插入到db即可。在查詢的時候,level級別越低資料新鮮程度越高,從低層層次開始查詢,如果查到了並且標記是刪除,那麼就返回給使用者記錄被刪除。後面合併資料時例如:合併level5, level6時才會把資料真正從物理磁碟中刪除掉。
4、leveldb sequencenumber 達到最值之後
答:assert
5、為什麼level0中檔案不應該太多?
答:因為level0中檔案包含的key是可以重疊的,檔案太多不方便查詢,而level1~level6 檔案中key不重複
6、versionset中包含多個version? 每個version都是幹嘛的?
物件作用
versionset
version集合,所有的version都掛在versionset物件下面,乙個db只有乙個versionset
version
乙個db可能存在多個version,version之間採用鍊錶方式管理,鍊錶最後節點為當前最新version資訊
versionedit
該物件用於生成最新的version。versionedit + 當前使用的version 生成 新的version存放到鍊錶尾部,只在需要生成新的version時才會建立
7、leveldb中skiplist為什麼沒有提供刪除介面?
答:leveldb對於刪除操作也是插入流程,只不過是將插入資料標記為刪除,存到skiplist中. 既然刪除操作也是插入流程,那麼leveldb是如何判斷當前節點是否刪除呢? 判斷標記
8、當memtable占用記憶體達到門限值後,就會將memtable寫入到檔案,那麼這個 檔案一定屬於level0嗎?
答:不一定,要看memtable中最小值和最大值與level0中是否有重疊,如果沒有重疊則可能將新生成檔案放到更高的level中,具體函式實現可參考picklevelformemtableoutput
1、table cache 使用lru演算法,該cache預設儲存62條資料,當達到62條時就會把lrucache中資料刪除,可以擴大。
2、memtable預設大小是4m,我們可以擴大。
3、leveldb預設沒有開啟布隆過濾器,我們可以在建立options物件的時候指定開啟過濾器。
memtable:預設大小為4m,當memtable占用4m大小時,就將memtable寫入到檔案中.
level0:level0檔案資料不應該過多,預設是4個檔案,每個檔案大小位xxm,
level1:每個檔案大小為10m
level2:每個檔案大小為100m
leveldb中幾個數字:
nextfilenumber -- 控制 .log manifest .ldb 檔案名字中數字
lastsequence -- 用於設定writebatch的sequence number.。不是遞增而是根據這個批任務中有多個key-value對進行設定的,具體參考函式dbimpl::write
lognumber -- 表示當前version中使用的 .log檔案
prevlognumber -- 表示當前version中儲存的上乙個.log檔案 #該引數目前版本沒有意義,只是為了向前相容leveldb版本
VNC配置,以及常見問題
兩天搭安全試驗的環境,在vmware上安裝了ubuntu 10.10 以前用過,最早用的好像是6系列吧 安裝好後想用遠端桌面控制,畢竟在vmware上看到的介面比較小,不太方便。在安裝上vnc,做了一些配置 vnc使用gnome seeion啟動 後,使用時出了兩個問題 1.從遠端使用vncview...
XAMPP安裝常見問題以及解決?
問題難題 tag1.安裝路徑出錯導致軟體xampp無法開啟?解決辦法 檢視安裝路徑是否有錯,檢視軟體安裝包是否有破損,檢視是否是電腦管家的安全軟體限制,然後重新安裝 tag2.安裝成功,但是軟體xampp還是無法開啟?tag3.作業系統太老導致無法正常安裝或者與安裝程式不相容?解決辦法 土豪可以花錢...
HIVE架構以及HIVE常見問題
hive是執行在yarn上的,資料儲存在hdfs上。將sql語句轉換為mapreduce,當然hive本身做了一些優化,有些任務不會走mapreduce。hive其實就是把結構化的資料檔案對映到表中,hive表的元資料資訊儲存在關係型資料庫中,具體可以參見我的另一篇部落格,配置了mysql資料庫。s...