LevelDB简述
轉(zhuǎn)自:http://www.cnblogs.com/melons/p/5791855.html
既然開始了,哪有停下的道理,先了解一下Levedb的關(guān)榮歷史、完美現(xiàn)在和光輝的未來:
Leveldb:
1.Leveldb是一個(gè)google實(shí)現(xiàn)的非常高效的kv數(shù)據(jù)庫,目前能夠支持billion級(jí)別的數(shù)據(jù)量了。?
在這個(gè)數(shù)量級(jí)別下還有著非常高的性能,主要?dú)w功于它的良好的設(shè)計(jì),特別是LMS算法。
2.LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺(tái)4核Q6600的CPU機(jī)器上,
每秒鐘寫數(shù)據(jù)超過40w,而隨機(jī)讀的性能每秒鐘超過10w。
3.LevelDB 只是一個(gè) C/C++ 編程語言的庫(有沒有超級(jí)感動(dòng),哈)
4.Leveldb只是一個(gè)語言庫,不包含網(wǎng)絡(luò)服務(wù)封裝, 所以無法像一般意義的存儲(chǔ)服務(wù)器(如 MySQL)那樣, 用客戶端來連接它.
LevelDB 自己也聲明, 使用者應(yīng)該封裝自己的網(wǎng)絡(luò)服務(wù)器(這得等我學(xué)網(wǎng)絡(luò)啦)
5.LevelDB具有很高的隨機(jī)寫,順序讀/寫性能,但是隨機(jī)讀的性能很一般,
也就是說,LevelDB很適合應(yīng)用在查詢較少,而寫很多的場景。
LevelDB應(yīng)用了LSM?(不懂吧,點(diǎn)這里)策略,lsm_tree(不懂吧,點(diǎn)這里)對(duì)索引變更進(jìn)行延遲及批量處理,
并通過一種類似于歸并排序的方式高效地將更新遷移到磁盤,降低索引插入開銷。
6.key和value都是任意長度的字節(jié)數(shù)組;
7.entry(即一條K-V記錄)默認(rèn)是按照key的字典順序存儲(chǔ)的,當(dāng)然開發(fā)者也可以重載這個(gè)排序函數(shù);
8.提供的基本操作接口:Put()、Delete()、Get()、Batch();
9.支持批量操作以原子操作進(jìn)行;
10.可以創(chuàng)建數(shù)據(jù)全景的snapshot(快照),并允許在快照中查找數(shù)據(jù);
11.可以通過前向(或后向)迭代器遍歷數(shù)據(jù)(迭代器會(huì)隱含的創(chuàng)建一個(gè)snapshot);
12.自動(dòng)使用Snappy壓縮數(shù)據(jù);
13.可移植性;
以下是百度來的資料加一整理:如果了解,可以略過:
Jeff Dean其人:http://research.google.com/people/jeff/index.html
?? Google大規(guī)模分布式平臺(tái)Bigtable和MapReduce主要設(shè)計(jì)和實(shí)現(xiàn)者。
Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html
? ?Google大規(guī)模分布式平臺(tái)GFS,Bigtable和MapReduce主要設(shè)計(jì)和實(shí)現(xiàn)工程師。
? ?LevelDb就是這兩位大神級(jí)別的工程師發(fā)起的開源項(xiàng)目,簡而言之,LevelDb是能夠處理十億級(jí)別規(guī)模Key-Value型數(shù)據(jù)持久性存儲(chǔ)的C++程序庫。正像上面介紹的,這二位是Bigtable的設(shè)計(jì)和實(shí)現(xiàn)者,如果了解Bigtable的話,應(yīng)該知道在這個(gè)影響深遠(yuǎn)的分布式存儲(chǔ)系統(tǒng)中有兩個(gè)核心的部分:Master Server和Tablet Server。其中Master Server做一些管理數(shù)據(jù)的存儲(chǔ)以及分布式調(diào)度工作,實(shí)際的分布式數(shù)據(jù)存儲(chǔ)以及讀寫操作是由Tablet Server完成的,而LevelDb則可以理解為一個(gè)簡化版的Tablet Server。
LevelDb有如下一些特點(diǎn):
? ? 首先,LevelDb是一個(gè)持久化存儲(chǔ)的KV系統(tǒng),和Redis這種內(nèi)存型的KV系統(tǒng)不同,LevelDb不會(huì)像Redis一樣狂吃內(nèi)存,而是將大部分?jǐn)?shù)據(jù)存儲(chǔ)到磁盤上。
? ? 其次,LevleDb在存儲(chǔ)數(shù)據(jù)時(shí),是根據(jù)記錄的key值有序存儲(chǔ)的,就是說相鄰的key值在存儲(chǔ)文件中是依次順序存儲(chǔ)的,而應(yīng)用可以自定義key大小比較函數(shù),LevleDb會(huì)按照用戶定義的比較函數(shù)依序存儲(chǔ)這些記錄。
? ? 再次,像大多數(shù)KV系統(tǒng)一樣,LevelDb的操作接口很簡單,基本操作包括寫記錄,讀記錄以及刪除記錄。也支持針對(duì)多條操作的原子批量操作。
? ? 另外,LevelDb支持?jǐn)?shù)據(jù)快照(snapshot)功能,使得讀取操作不受寫操作影響,可以在讀操作過程中始終看到一致的數(shù)據(jù)。
? ? 除此外,LevelDb還支持?jǐn)?shù)據(jù)壓縮等操作,這對(duì)于減小存儲(chǔ)空間以及增快IO效率都有直接的幫助。
? ? LevelDb性能非常突出,官方網(wǎng)站報(bào)道其隨機(jī)寫性能達(dá)到40萬條記錄每秒,而隨機(jī)讀性能達(dá)到6萬條記錄每秒。總體來說,LevelDb的寫操作要大大快于讀操作,而順序讀寫操作則大大快于隨機(jī)讀寫操作。
總結(jié)
- 上一篇: 多重纹理和纹理组合器
- 下一篇: 陈硕知乎专栏