可以說是不知天高地厚。。
可以說是班門弄斧。。
但是,我今天還就這樣走了,我喜歡!!!!!!
注:后續文章,限於篇幅,不懂名詞都有 紫色+下划線 超鏈接,有興趣,可以查閱;
網上關於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的寫操作要大大快於讀操作,而順序讀寫操作則大大快於隨機讀寫操作。