早上过来,微博上无意中看到有人转LevelDB相关实现的文章,突然脑海里对这个k/v数据库记得曾经有个印象,因为记得淘宝tair是基于此实现的,(有时间记录下阅读tair对其架构的简单记录笔记),为此上网查了相关资料,简单记录下,以备以后有需要可以快速的查看。

以下为官网上介绍的简单翻译:

一.LevelDB是一个高效的key/value存储库,由google开源,提供了基本的Sring类型的key/value映射存储。(官网:http://code.google.com/p/leveldb/)

二.功能
1.key/value可以是任意长度的字节数组。
2.数据存储是key进行排序。
3.使用者可以提供一个自定义的比较函数覆盖key的排序顺序
4.基本操作支持put(key,value),get(key)以及delete(key).
5.支持批量的提交的原子操作。
6.支持数据快照功能
7.支持从前或者从尾部迭代数据。
8.Data支持自动压缩(使用google的Snappy压缩库,压缩性能很不错,有项目中使用过)
(相关官方档可参考:http://leveldb.googlecode.com/svn/trunk/doc/index.html)

三.局限性
1.不是sql数据库,没有关系数据库模型,不支持SQL查询,不支持索引。

2.单线程处理。

3.使用LevelDB需要基于lib实现对应的client-server.

从以上特性可以看出,LevelDB的特点在于其对key进行排序,支持指提交的原子操作,相比于redis的AOF,其性能是否有优势,不过从其实现的简单查看,也是基于单线程,两都不会相差太大。由于还需要 自己基于lib包实现相关的client,server,不便于测试。由于未使用,暂不进行相关测试了。(为什么没有-.-)

相关资料网上还是比较全,其中有人记录的比较详细,下面内容转自:http://hideto.iteye.com/blog/1328921

leveldb介绍 
http://code.google.com/p/leveldb/ 
http://en.wikipedia.org/wiki/LevelDB 
http://highscalability.com/blog/2011/8/10/leveldb-fast-and-lightweight-keyvalue-database-from-the-auth.html 
http://news.ycombinator.com/item?id=2526032 
http://basho.com/blog/technical/2011/07/01/Leveling-the-Field/ 
http://blog.yufeng.info/archives/1327 
http://www.slideshare.net/sunzhidong/google-leveldb-study-discuss

leveldb官方文档 
http://leveldb.googlecode.com/svn/trunk/doc/index.html 
http://leveldb.googlecode.com/svn/trunk/doc/benchmark.html 
http://leveldb.googlecode.com/svn/trunk/doc/impl.html 
http://leveldb.googlecode.com/svn/trunk/doc/table_format.txt 
http://leveldb.googlecode.com/svn/trunk/doc/log_format.txt

leveldb内部实现和源码解析 
http://blog.xiaoheshang.info/?cat=26 
http://rdc.taobao.com/blog/cs/?p=1378 
http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

bigtable/mapreduce/gfs/lsm-tree/skiplist论文 
http://blademaster.ixiezi.com/2010/03/27/bigtable:一个分布式的结构化数据存储系统中文版/ 
http://blademaster.ixiezi.com/2010/03/27/google-mapreduce中文版/ 
http://blademaster.ixiezi.com/2010/03/27/the-google-file-system中文版/ 
http://staff.ustc.edu.cn/~jpq/paper/flash/1996-The%20Log-Structured%20Merge-Tree%20%28LSM-Tree%29.pdf 
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.15.9072&rep=rep1&type=pdf

Tair ldb 
http://rdc.taobao.com/blog/cs/?p=1394 
http://code.taobao.org/p/tair/wiki/index/ 
http://code.taobao.org/p/tair/src/branches/ldb/src/storage/ldb/

相关资料 
http://www.quora.com/What-is-an-SSTable-in-Googles-internal-infrastructure 
http://www.ningoo.net/html/tag/dynamo 
http://wiki.apache.org/cassandra/MemtableSSTable 
http://wiki.apache.org/cassandra/ArchitectureSSTable 
http://en.wikipedia.org/wiki/Queuing_theory 
http://rdc.taobao.com/team/jm/archives/1344

Notes 
leveldb的Write/Delete: 
DB::Put/Delete(DB::Open时*dbptr = impl) => DBImpl::Write => (1) 写log: log_->AddRecord (2) 写memtable: WriteBatchInternal::InsertInto(updates, mem_)

leveldb的Get: 
DBImpl::Get => (1) 查memtable: mem->Get (2) 查immutable memtable: imm->Get (3) 查文件 versions_->current() => current->Get => Version::Get

leveldb的Compaction: 
leveldb在Open/Get/Write时都有可能做Compaction: DB::Open/DBImpl::Get/DBImpl::Write(DBImpl::MakeRoomForWrite) =>DBImpl::MaybeScheduleCompaction => env_->Schedule(&DBImpl::BGWork, this) => (1) 启后台线程 PosixEnv::Schedule (2) DBImpl::BGWork => DBImpl::BackgroundCall => DBImpl::BackgroundCompaction

leveldb的多线程写: 
DBImpl::Write的瓶颈在AcquireLoggingResponsibility,多线程写同一个db时互相竞争logger_,性能反而没有单写线程快. 所以为了scale,对leveldb做sharding,将key做hash后分到多个db,这样多线程读写不会相互竞争,经测试 num_threads : num_dbs为1:1时性能最好,充分利用多核

leveldb的性能调优: 
通过sharding/batch writes/increase block_size(size per data block, default 4KB)/increase block_cache(LRUCache, default 8MB)/increase write_buffer_size(memtable size, default 4MB)来提高性能,经过测试,单机24-core采用16 threads/16 shards/1000 batch_sizes/block_size 8K/write_buffer_size 32MB能达到70w+ ops/sec的写性能

LevelDB 介绍相关推荐

  1. leveldb资料整理

    转自:http://hideto.iteye.com/blog/1328921 最近一段时间在学习leveldb的源码,找到了一些相关的资源,用于后续查考和学习使用. leveldb介绍  http: ...

  2. Badger、Leveldb

    BadgerDB v2 介绍 2017年发行 来自DGraph实验室 开源 纯go语言编写 https://github.com/dgraph-io/badger https://godoc.org/ ...

  3. caffe学习之——CMakeList.txt内容详解

    在对Caffe使用cmake方式编译安装时产生了对这个文件的好奇,打算做个注释理解, 参考:https://blog.csdn.net/fuzi2012/article/details/7245453 ...

  4. Caffe移植(上)--ubuntu16.04+anaconda2+dlib+opencv2+caffe(CPU)+openblas+qt4.8+pycharm

    写在前面: (1):ARM开发板CPU:Exynos 4412,8GDRAM (2):官方交叉编译工具链:arm2009q3 (3):目标:移植Caffe的无CPU版本 (4):arm2009q3编译 ...

  5. LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新...

    转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 有时间再好好看下整个文章! 说起LevelDb也许您不清楚,但是如果作 ...

  6. LevelDB整体介绍

    参考:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 1. leveldb简单介绍 说起LevelDb也许您不清楚,但是如果 ...

  7. leveldb java_LevelDB:使用介绍

    LevelDB 提供的接口其实很简单,下面举例进行简单说明. 安装 cd leveldb mkdir -p build && cd build cmake -DCMAKE_BUILD_ ...

  8. Apache Samza流处理框架介绍——kafka+LevelDB的Key/Value数据库来存储历史消息+?

    转自:http://www.infoq.com/cn/news/2015/02/apache-samza-top-project Apache Samza是一个开源.分布式的流处理框架,它使用开源分布 ...

  9. Tair ldb(leveldb存储引擎)实现介绍

    简介 tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存 ...

最新文章

  1. Java初学者如何自学和自己定位解决问题
  2. Tomcat-上传文件路径填坑
  3. 模板实参推导 xx_cast的实现
  4. ADS错误(Fatal)L6002U解决方法
  5. mysql查询正在执行的存储过程,[转]ms sql server 存储过程,查看正在执行的sql语句...
  6. Maven精选系列--依赖范围、传递、排除
  7. python switch语句_几个Python里的骚操作
  8. NYOJ-58 最少步数
  9. 【编译原理笔记12】中间代码生成:简单赋值语句的翻译,数组引用的翻译
  10. 大数据平台常用组件_京东大数据平台进化之路
  11. java面试资料整理(高级必备)
  12. 客户端无法远程连接服务器的问题
  13. mib节点 snmp trap_snmp trap编写
  14. stm32 修改工作频率
  15. @Qualifier的作用和应用
  16. 如何在IPv6下观看网络电视直播
  17. Multi-Layered Gradient Boosting Decision Trees
  18. 红旗 Linux 5.0 正式版下载地址
  19. 我的小程序之个人所得税计算器
  20. PQ分区出错,由Ghost来补救的办法(转)

热门文章

  1. Centos7 文件查找配置项(FZF命令)
  2. PCL:多直线拟合(RANSAC)
  3. 搭建 Git 服务器
  4. 同一个法人可以注册几家公司?法人和股东有哪些区别?
  5. win10睡眠锁定计算机,win10如何设置电脑的固定时间之后自动睡眠呢?
  6. Python aiohttp异步请求
  7. 高效液相色谱在材料测试中的定性定量方法
  8. 【VBA编程】处理excel表格让满足条件的sheet页被隐藏或取消隐藏
  9. iapp腾讯QQ强制聊天代码
  10. 字符和字节详解、Java中字节串和字符串相互转换