原创 varint-levelDB源碼解析
【什麼是變長整型?】 大家知道,int整型一般是4個字節,那變長整型所需要的空間在1-5個字節之間,因爲長度是不固定的,所以稱之爲變長整型。其特點就是隻要數值小於2^21,那麼就會節省空間。 【編碼原理】 如圖所示爲300,編
原创 友元類、友元函數
#include <iostream> #include <vector> #include <assert.h> using namespace std; class A; class C { publi
原创 velocity使用經驗積累
html內容被轉義 場景 hello <br> world! 其實想要的效果是 hello world 解決方案 #noescape()$!{msg}#end 這樣就可以防止內容被轉義
原创 VersionSet-levelDB源碼解析
VersionSet的作用是記錄各個版本,這些版本的組織形式是一個環形的雙向鏈表。 【數據成員介紹】 compact_pointer_:記錄每層下次做compact的開始的key;string型數組,index-->level,
原创 Skip List
什麼是skip list? “Skip lists are a data structure that can be used in place ofbalanced trees. Skip lists use probabilist
原创 Status-levelDB源碼解析
//status封裝了操作結果,當出錯的時候,可以用來指明一個錯誤,還有對應的錯誤信息 //多線程下const方法可以在非外部同步的情況下調用,但是非const方法,一定要在外部同步的情況下調用 class Status {
原创 option-levelDB源碼解析
//控制數據庫的行爲 struct Options { //比較器 //默認:lexicographic byte-wise ordering const Comparator* comparator;
原创 memtable-levelDB源碼解析
當寫數據的時候,寫完log,再寫內存,內存指的就是這裏的MemTable,整個MemTable是一個skip list結構; 【數據成員介紹】 arena_:一個管理內存的對象; comparator_:比較器; refs_
原创 win7 自動重啓本地連接
將下面的代碼放在一個bat文件裏面 netsh interface set interface name="本地連接 2" admin=DISABLED netsh interface set interface name="本地連
原创 stat 獲取文件對應的屬性
#include <sys/stat.h> #include <iostream> int main() { using std::cout; using std::endl; struct sta
原创 log::Reader-levelDB源碼解析
要想理解reader,需要理解兩個概念,即邏輯記錄,物理記錄,這個log format有講 【數據成員介紹】 blocking_store_:read以block爲單位去從磁盤取數據,取完數據就是存在blocking_store
原创 log format-levelDB源碼解析
基本概念: 邏輯記錄:用戶輸入的key value,進行包裝後,可以形成一條記錄,我們把它稱爲邏輯記錄; 物理記錄:一條或多條物理記錄組成一個邏輯記錄。 block:一條邏輯記錄,包含了一個或多個block,kBlockSize
原创 VersionEdit-levelDB源碼解析
VersionEdit記錄的是版本變化的增量。 【數據成員介紹】 compact_pointers_:這是一個vector,裏面的每項是一個由level,internalkey組成的pair,也就是說裏面記錄的是,compact
原创 Version-levelDB源碼解析
【數據成員介紹】 compaction_level_:下一個需要做compact的層級; compaction_score_:比分,如果比分小於1,就代表沒有那麼緊急去需要做compact; 那麼比分的規則是什麼呢? voi
原创 Slice-levelDB源碼解析
//slice是level中很基礎的一個類型,是對key , value的封裝,裏面的數據成員很簡單,只有兩個,一個是const char* data_,size_t size_,所以它其實是key或value的一個引用,非常節省內存,