玩轉Leveldb原理及源碼--拙見1


可以說是不知天高地厚。。

可以說是班門弄斧。。

但是,我今天還就這樣走了,我喜歡!!!!!!


注:后續文章,限於篇幅,不懂名詞都有 紫色+下划線 超鏈接,有興趣,可以查閱;


網上關於Leveldb 的源碼剖析啊,解析啊什么的有好多,差不多都是大神級別的在搞,如果我們水平相當,那不如湊一對唄:

既然開始了,哪有停下的道理,先了解一下Levedb的關榮歷史、完美現在和光輝的未來:

Leveldb:

1.Leveldb是一個google實現的非常高效的kv數據庫,目前能夠支持billion級別的數據量了。 

在這個數量級別下還有着非常高的性能,主要歸功於它的良好的設計,特別是LMS算法。

2.LevelDB 是單進程的服務,性能非常之高,在一台4核Q6600的CPU機器上,

每秒鍾寫數據超過40w,而隨機讀的性能每秒鍾超過10w。

3.LevelDB 只是一個 C/C++ 編程語言的庫(有沒有超級感動,哈)

4.Leveldb只是一個語言庫,不包含網絡服務封裝, 所以無法像一般意義的存儲服務器(如 MySQL)那樣, 用客戶端來連接它.

LevelDB 自己也聲明, 使用者應該封裝自己的網絡服務器(這得等我學網絡啦)

5.LevelDB具有很高的隨機寫,順序讀/寫性能,但是隨機讀的性能很一般,

也就是說LevelDB很適合應用在查詢較少,而寫很多的場景。

LevelDB應用了LSM (不懂吧,點這里)策略,lsm_tree不懂吧,點這里對索引變更進行延遲及批量處理,

並通過一種類似於歸並排序的方式高效地將更新遷移到磁盤,降低索引插入開銷。

6.key和value都是任意長度的字節數組;
7.entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;
8.提供的基本操作接口:Put()、Delete()、Get()、Batch();
9.支持批量操作以原子操作進行;
10.可以創建數據全景的snapshot(快照),並允許在快照中查找數據;
11.可以通過前向(或后向)迭代器遍歷數據(迭代器會隱含的創建一個snapshot);
12.自動使用Snappy壓縮數據;
13.可移植性;

以下是百度來的資料加一整理:如果了解,可以略過:

Jeff Dean其人:http://research.google.com/people/jeff/index.html

   Google大規模分布式平台Bigtable和MapReduce主要設計和實現者。

Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html

   Google大規模分布式平台GFS,Bigtable和MapReduce主要設計和實現工程師。


   LevelDb就是這兩位大神級別的工程師發起的開源項目,簡而言之,LevelDb是能夠處理十億級別規模Key-Value型數據持久性存儲的C++程序庫。正像上面介紹的,這二位是Bigtable的設計和實現者,如果了解Bigtable的話,應該知道在這個影響深遠的分布式存儲系統中有兩個核心的部分:Master Server和Tablet Server。其中Master Server做一些管理數據的存儲以及分布式調度工作,實際的分布式數據存儲以及讀寫操作是由Tablet Server完成的,而LevelDb則可以理解為一個簡化版的Tablet Server。

LevelDb有如下一些特點:

    首先,LevelDb是一個持久化存儲的KV系統,和Redis這種內存型的KV系統不同,LevelDb不會像Redis一樣狂吃內存,而是將大部分數據存儲到磁盤上。

    其次,LevleDb在存儲數據時,是根據記錄的key值有序存儲的,就是說相鄰的key值在存儲文件中是依次順序存儲的,而應用可以自定義key大小比較函數,LevleDb會按照用戶定義的比較函數依序存儲這些記錄。

    再次,像大多數KV系統一樣,LevelDb的操作接口很簡單,基本操作包括寫記錄,讀記錄以及刪除記錄。也支持針對多條操作的原子批量操作。

    另外,LevelDb支持數據快照(snapshot)功能,使得讀取操作不受寫操作影響,可以在讀操作過程中始終看到一致的數據。

    除此外,LevelDb還支持數據壓縮等操作,這對於減小存儲空間以及增快IO效率都有直接的幫助。

    LevelDb性能非常突出,官方網站報道其隨機寫性能達到40萬條記錄每秒,而隨機讀性能達到6萬條記錄每秒。總體來說,LevelDb的寫操作要大大快於讀操作,而順序讀寫操作則大大快於隨機讀寫操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM