Leveldb是一個(gè)google實(shí)現(xiàn)的非常高效的kv數(shù)據(jù)庫,目前的版本1.2能夠支持billion級別的數(shù)據(jù)量了。 在這個(gè)數(shù)量級別下還有著非常高的性能,主要?dú)w功于它的良好的設(shè)計(jì)。特別是LSM算法。
LevelDB 是單進(jìn)程的服務(wù),性能非常之高,在一臺4個(gè)Q6600的CPU機(jī)器上,每秒鐘寫數(shù)據(jù)超過40w,而隨機(jī)讀的性能每秒鐘超過10w。
示例代碼:
#include
#include "leveldb/include/db.h"
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
assert(status.ok());
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
授權(quán)協(xié)議: BSD
開發(fā)語言: C/C++C/C++
操作系統(tǒng): Linux Linux
【簡單說下leveldb】
作者:黃東旭@youdao
最近在公司內(nèi)有人討論到leveldb,之前正好也簡單看了看文檔,沒仔細(xì)看實(shí)現(xiàn),簡單寫個(gè)總結(jié)
1. leveldb的committer陣容很強(qiáng)大,幾乎是google那篇經(jīng)典的big table的原班人馬。雖然有人說可能并不是完整的google的使用著的實(shí)現(xiàn),但是還是很吸引人的
2. 它是一個(gè)k/v db library,提供持久化,看項(xiàng)目首頁給出的performance很牛逼, 注意目前只是library, 嚴(yán)格來說和tc有點(diǎn)像,并沒有dht,甚至沒有server實(shí)現(xiàn),不過我相信網(wǎng)上很多蛋疼的hacker會寫的,如果有時(shí)間的話,我也蠢蠢欲動啊。和Redis之類沒法比,因?yàn)闆]有cache。
3. 針對隨機(jī)寫做了優(yōu)化,使用了傳說中的LSMTree,google的那篇paper里寫了,但是沒仔細(xì)看,在這里暫時(shí)不評論。我想應(yīng)該是目前開源的唯一的LSMTree的kv db的實(shí)現(xiàn)(流行的大多數(shù)b-tree,其實(shí)lsmtree貌似是b-tree的一個(gè)優(yōu)化)
4. 實(shí)現(xiàn)了iterator, 對data可以前序甚至逆序遍歷,這點(diǎn)很新鮮
5. 類似batch,atom這種就不說了,基本是目前的標(biāo)配
6. 8g一下, chrome中的indexedDB就是用它實(shí)現(xiàn)的
7. 居然還提供了ObjC的port
簡單歸結(jié)一句話:這個(gè)東西是個(gè)k-v本地存儲庫,讀性能一般(和TokyoCabinet 比),隨機(jī)寫不錯,很小很清涼。沒有memcache,沒有server,什么都沒有,就是個(gè)存儲引擎而已。