Leveldb是一个google实现的非常高效的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);
授权协议: BSD
开发语言: C/C++ C/C++
操作系统: Linux Linux
【简单说下leveldb】
作者:黄东旭@youdao
最近在公司内有人讨论到leveldb,之前正好也简单看了看文档,没仔细看实现,简单写个总结
1. leveldb的committer阵容很强大,几乎是google那篇经典的big table的原班人马。虽然有人说可能并不是完整的google的使用着的实现,但是还是很吸引人的
2. 它是一个k/v db library,提供持久化,看项目首页给出的performance很牛逼, 注意目前只是library, 严格来说和tc有点像,并没有dht,甚至没有server实现,不过我相信网上很多蛋疼的hacker会写的,如果有时间的话,我也蠢蠢欲动啊。和Redis之类没法比,因为没有cache。
3. 针对随机写做了优化,使用了传说中的LSMTree,google的那篇paper里写了,但是没仔细看,在这里暂时不评论。我想应该是目前开源的唯一的LSMTree的kv db的实现(流行的大多数b-tree,其实lsmtree貌似是b-tree的一个优化)
4. 实现了iterator, 对data可以前序甚至逆序遍历,这点很新鲜
5. 类似batch,atom这种就不说了,基本是目前的标配
6. 8g一下, chrome中的indexedDB就是用它实现的
7. 居然还提供了ObjC的port
简单归结一句话:这个东西是个k-v本地存储库,读性能一般(和TokyoCabinet 比),随机写不错,很小很清凉。没有memcache,没有server,什么都没有,就是个存储引擎而已。
【编辑推荐】