leveldb性能调优

原创 2015年07月09日 15:57:39
许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎,例如tair,hbase,canssandra,因此理解并调优存储引擎可以大大的提高系统的性能。


前一篇大致介绍了原理,这一篇接下来讲解调优相关的内容。


leveldb中的写放大


一条记录写到leveldb,则会写一次到log,写一次到level 0,随着后面更多数据的写入,level n里面的记录会与level n+1的记录合并排序,按照level n+1的数据量是level n的10倍,预计每提升一级,需要11个写,因此如果是7级的话,大约为68个写,即写放大为68。leveldb存放在内存中的数据大小write_buffer_size默认为4M,level 1的大小默认为10M。因此一个1TB的数据库会有7层。通过加大内存中的数据以及level 1的大小,例如设置write_buffer_size=1G,level1大小为4G,那么总共的层级只有5级,写放大大约为46,性能可以提升大约30%


leveldb中的读放大


前一篇提到一次记录的读取需要多次文件读取,通过bloomfilter可以讲实际读取数据降到到接近1。我们来看看bloomfilter降低读取的原理。假设filter的bits为10,一个文件有1000个key,那么filter一共有1w个bit,对每个key计算hash值,把hash值模1w后对应的bit置为1,多计算几种hash值,都设置相应的bit为1。获取一个指定的key1时,按照前面的算法计算hash值检查bit值,如果这些bit值不是全1,那么可以肯定这个key1不在文件中。这样就可以通过不读取文件就判断key1是否在文件中。当然可能会出现全1但是key1又不在文件中,这样的情况就相当于是hash冲突了。通过查阅bloomfilter的资料,可以看到hash冲突的概率的情况为:
10 bits     0.0081
15 bits     0.0007
19 bits      0.0001
假设每次读取需要查找10个文件,那么10bits的hash冲突导致的多余读取为10 * 0.0081 = 0.081大约是8%
我在实际使用tair中,当写入较多时,导致level0的数据可能达到32,这种情况下10bits的多余夺取为35 * 0.0081 = 0.2835大约是28%,此时应当增加bits,例如15bits则额外读为2.45%


这两点是是实际使用中碰到的,可以提升实际的应用性能

相关文章推荐

LevelDB性能测试

最近工作需要找一个能使用磁盘存储数据,对写要求比较苛刻,需要每秒达100000TPS,读的时候需要能10000TPS左右,不能占用太多内存。单节点满足这个要求的常见有Redis、Memcached等,...
  • joeyon
  • joeyon
  • 2014年08月24日 12:41
  • 1475

[转]LevelDB性能分析和表现

【LevelDB介绍】 LevelDB是一个Google开发的速度飞快的数据库键值存储引擎,可按照字符串键值顺序映射。2011年7月30日Google宣布按照BSD许可开源LevelDB。 ...

leveldb使用时遇到的性能问题

我用leveldb+thrift做了个存储服务,实现了跨进程的数据读写。但随着数据量的增大,我发现数据更新越来越慢。经过排查发现为leveldb使用问题,有问题的逻辑是:服务端每收到一条更新操作,都先...

LevelDB读写流程(具体例子讲解SkipList+LSM)

有任何问题请联系我:zhangtiey@gmail.com LevelDB是LSM最有名的实现系统。网上介绍的文章不少, 本文主要用于我自己的理解和备忘录,我将用具体的实例来介绍LevelDB的读...

leveldb 性能、使用场景评估

http://www.cnblogs.com/lulu/p/4231810.html leveldb 性能、使用场景评估   最近有个业务写远远大于读,读也集中在最近写入,这不...

LevelDB使用指南

这篇文章是levelDB官方文档的译文,原文地址:LevelDB library documentation这篇文章主要讲leveldb接口使用和注意事项。 leveldb是一个持久型的key-va...
  • doc_sgl
  • doc_sgl
  • 2016年10月15日 18:20
  • 3179

leveldb原理和使用

LevelDB是一个基于本地文件的存储引擎,非分布式存储引擎,原理基于BigTable(LSM文件树),无索引机制,存储条目为Key-value。适用于保存数据缓存、日志存储、高速缓存等应用,主要是避...

leveldb为什么这么快

nosql数据库大多采用leveldb或者类似leveldb的存储引擎,我们来看看它为什么能够这么快。 levelDB则采用了一种全新的数据结构,叫做log structured merge tree...

LevelDB详解

LevelDB   一、LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,Level...

leveldb源码阅读分析笔记

这是本人在阅读leveldb源代码的基础上写的读书笔记,现贡献出来供大家交流之用。 内容主要来源于leveldb官网的文档和阅读leveldb的源码。 转载请注明出处,谢谢 ...
  • joeyon
  • joeyon
  • 2015年07月30日 18:21
  • 2656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leveldb性能调优
举报原因:
原因补充:

(最多只允许输入30个字)