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