Time of Update: 2018-12-04
作者:王姍姍,華清遠見嵌入式學院講師。在標準IO中,對於檔案的讀寫無非三種方式:(1) 每次一個字元的I / O。 (2) 每次一行的I / O。 (3) 直接I / O。似乎這些函數看起來很簡單,但只有理解了這些函數,你才知道該如何使用,例如怎樣來判斷讀取的檔案是否結束,怎樣來統計檔案的行數,等等。下面先來回顧下讀取檔案的三種方式,然後再舉例看下怎樣使用。一次讀或寫一個字元,使用getc、fgetc或getchar。如果流是帶緩衝的,則標準I /
Time of Update: 2018-12-04
文章目錄 10.1 Version介面10.2 Version::AddIterators()10.3 Version::LevelFileNumIterator類10.4 Version::Get() 10
Time of Update: 2018-12-04
文章目錄 3.1 Decode3.2 Decode 3 Int Coding輕鬆一刻,前面約定中講過Leveldb使用了很多VarInt型編碼,典型的如後面將涉及到的各種key。其中的編碼、解碼函數分為VarInt和FixedInt兩種。int32和int64操作都是類似的。3.1 Decode首先是FixedInt編碼,直接上代碼,很簡單明了。void EncodeFixed32(char* buf, uint32_t value) {
Time of Update: 2018-12-04
作為程式開發人員,具備學習新知識的能力非常非常重要。這是由IT領域的特殊性決定的。我們所面臨的新知識不僅包括新語言、新技能、新工具,也可能會是一個全新的項目,甚至是全新的開發環境。最近,我身邊的一位同事就遇到了一個這樣的難題:由於組織架構調整,一個20人年的項目需要2個星期內交接到他手上。這是一個純粹的商業項目,前邊有customers不斷提出問題,後邊有公司領導不斷“關心”狀態更新,其壓力可想而知。讓我們設想一下,如果你處於這樣的環境,你會怎麼做?如何才能快速上手一個陌生系統呢?關於這個問題,
Time of Update: 2018-12-04
4 Memtable之1Memtable是leveldb很重要的一塊,leveldb的核心之一。我們肯定關注KV資料在Memtable中是如何組織的,秘密在Skip list中。4.1
Time of Update: 2018-12-04
Thinking about joining a startup, or working at one already? That's great! If you play your cards right, it will be one of the best decisions you've ever made in your professional career.Based on conversations with hundreds of entrepreneurs and the
Time of Update: 2018-12-04
文章目錄 6.5 讀取sstable檔案 6 SSTable之36.5 讀取sstable檔案6.5.1 類層次Sstable檔案的讀取邏輯在類Table中,其中涉及到的類還是比較多的,6.5-1所示。圖6.5-1Table類匯出的函數只有3個,先從這三個匯出函數開始分析。其中涉及到的類(包括中為畫出的)都會一一遇到,然後再一一拆解。本節分析sstable的開啟邏輯,後面再分析key的尋找與資料遍曆。6.5.2
Time of Update: 2018-12-04
匯入SQLLite
Time of Update: 2018-12-04
4 Memtable之24.6 Comparator弄清楚了key,接下來就要看看key的使用了,先從Comparator開始分析。首先Comparator是一個抽象類別,匯出了幾個介面。其中Name()和Compare()介面都很明了,另外的兩個Find xxx介面都有什麼功能呢,直接看程式注釋: // Advanced functions: these are used to reduce the space requirements // for internal data
Time of Update: 2018-12-04
上一篇介紹的sqlite3_exec 是使用回調來執行對select結果的操作,你得聲明一個函數,如果這個函數是類成員函數,你還不得不把它聲明成static的(要問為什嗎?這又是C++基礎了。C++成員函數實際上隱藏了一個參數:this,C++調用類的成員函數的時候,隱含把類指標當成函數的第一個參數傳遞進去。結果,這造成跟前面說的sqlite 回呼函數的參數不相符。只有當把成員函式宣告成static 時,它才沒有多餘的隱含的this參數)。有時候你還是想要非回調的select
Time of Update: 2018-12-04
文章目錄 5.1 格式5.2 寫日誌 5 操作Log 1分析完KV在記憶體中的儲存,接下來就是動作記錄。所有的寫操作都必須先成功的append到動作記錄中,然後再更新記憶體memtable。這樣做有兩個有點:1可以將隨機的寫IO變成append,極大的提高寫磁碟速度;2防止在節點down機導致記憶體資料丟失,造成資料丟失,這對系統來說是個災難。在各種高效的儲存系統中,這已經是口水技術了。5.1
Time of Update: 2018-12-04
文章目錄 6.6 遍曆Table6.7 定位key6.8 擷取Key—InternalGet() 6 SSTable之46.6 遍曆Table6.6.1 遍曆介面Table匯出了一個返回Iterator的介面,通過Iterator對象,調用者就可以遍曆Table的內容,它簡單的返回了一個TwoLevelIterator對象。見函數實現:Iterator* NewIterator(const ReadOptions&options)
Time of Update: 2018-12-04
如果既不想寫回呼函數,又想避免sqlite3_get_table之後麻煩的一維數組遍曆,那麼利用sqlite3_prepare_v2執行sql select語句,讓後sqlite3_step遍曆select執行的返回結果是一個非常方便的solution. 當然,你必須要明白sqlite3_prepare_v2不僅僅能夠執行table的query selection,也能方便地進行sql Delete, Insert,
Time of Update: 2018-12-04
Open one project/solution in Visual Studio (Premium) and use the "Analyze > Calculate Code Metrics for Solution" menu item to generate the code metrics report.Once calculated, the data can be exported to a data sheet for further analysis (e.g.
Time of Update: 2018-12-04
文章目錄 7.1 TableCache簡介7.2 TableCache::Get()7.3 TableCache遍曆7.4 TableCache::FindTable()7.5 輔助函數 7 TableCache這章的內容比較簡單,篇幅也不長。7.1 TableCache簡介TableCache緩衝的是Table對象,每個DB一個,它內部使用一個LRUCache緩衝所有的table對象,實際上其內容是檔案編號{file number,
Time of Update: 2018-12-04
文章目錄 8.1 FilterPolicy8.2InternalFilterPolicy8.3 BloomFilter8.4 Filter Block格式 8 FilterPolicy&Bloom之18.1 FilterPolicy因名知意,FilterPolicy是用於key過濾的,可以快速的排除不存在的key。前面介紹Table的時候,在Table::InternalGet函數中有過一面之緣。FilterPolicy有3個介面:
Time of Update: 2018-12-04
文章目錄 5.3 讀日誌 5 操作Log 2 5.3 讀日誌日誌讀取顯然比寫入要複雜,要檢查checksum,檢查是否有損壞等等,處理各種錯誤。5.3.1 類層次先來看看讀取涉及到的類圖,5.3-1。Reader主要用到了兩個介面,一個是彙報錯誤的Reporter,另一個是log檔案讀取類SequentialFile。> Reporter的介面只有一個:void Corruption(size_t bytes,const
Time of Update: 2018-12-04
文章目錄 6.1 SSTable的檔案組織6.2 Block儲存格式6.3 Block的構建與讀取 6 SSTable之1SSTable是Leveldb的核心之一,是表資料最終在磁碟上的實體儲存體。也是體量比較大的模組。6.1 SSTable的檔案組織作者在文檔doc/table_format.txt中描述了表的邏輯結構,6.1-1所示。邏輯上可分為兩大塊,資料存放區區Data
Time of Update: 2018-12-04
文章目錄 9.4 版本控制9.5 DB介面9.6 DBImpl類 9 LevelDB架構之29.4
Time of Update: 2018-12-04
文章目錄 6.4 建立sstable檔案 6 SSTable之26.4 建立sstable檔案瞭解了sstable檔案的儲存格式,以及Data Block的組織,下面就可以分析如何建立sstable檔案了。相關代碼在table_builder.h/.cc以及block_builder.h/.cc(構建Block)中。6.4.1