原创 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的一個引用,非常節省內存,