leveldb性能调优

2023-05-16

许多的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%


这两点是是实际使用中碰到的,可以提升实际的应用性能
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leveldb性能调优 的相关文章

  • LevelDb 资料整理

    z 2014 08 29 09 46 17 L 124 39 51223 BG57IV3 64 XCL T161676003 K F4029401865 T6 L94 R5 V74 leveldb介绍 http code google co
  • 【数据库】Redis和RocksDB、levelDB的区别

    区别 Redis 是一个服务 xff0c 独立的进程 xff0c 用户的程序需要与它建立连接才能向它发请求 xff0c 读写数据 RocksDB 和LevelDB 是一个库 xff0c 嵌入在用户的程序中 xff0c 用户程序直接调用接口读
  • leveldb源码分析--SSTable之Compaction 详解

    http www cnblogs com KevinT p 3819134 html leveldb源码分析 SSTable之Compaction 对于compaction是leveldb中体量最大的一部分 也应该是最为复杂的部分 为了便于
  • CPU占用高解决方案

    TOP 首先查看系统资源占用信息 TOP看一下 发现正在运行的JAVA项目CPU占用率很高 百分之200左右了 那么问题一定出在这个程序中 Ps mp pid o THREAD tid time 再通过ps命令查看这个程序的线程信息 tid
  • leveldb官方手册摘录

    本文内容摘自leveldb官方手册 版权归其所有 CHAPTER 1 基本概念 leveldb是一个写性能十分优秀的存储引擎 是典型的LSM树 Log Structured Merge Tree 实现 LSM树的核心思想就是放弃部分读的性能
  • LSM树(Log-Structured Merge Tree)存储引擎

    LSM树 Log Structured Merge Tree 存储引擎 代表数据库 nessDB leveldb Hbase等 核心思想的核心就是放弃部分读能力 换取写入的最大化能力 LSM Tree 这个概念就是结构化合并树的意思 它的核
  • 定位排查Java线上内存溢出问题(服务重启,没有捕获到日志)

    一 场景 线上项目device服务模块内存不断上涨导致CPU较高 导致触发脚本执行重启 接口自动化测试平台不断的报500拒绝连接等错误提示 排查 通过服务器日志查询并没有异常错误信息打印 查看docker容器的日志发现错误是打印控制台 无法
  • LevelDb之七:根据Key读取记录

    LevelDb之七 根据Key读取记录 2012 09 08 17 54 41 分类 云计算 LevelDb是针对大规模Key Value数据的单机存储库 从应用的角度来看 LevelDb就是一个存储工具 而作为称职的存储工具 常见的调用接
  • LevelDB使用指南

    这篇文章是levelDB官方文档的译文 原文地址 LevelDB library documentation 这篇文章主要讲leveldb接口使用和注意事项 leveldb是一个持久型的key value数据库 key value可以是任意
  • leveldb之Compaction操作下之具体实现

    leveldb之Compaction操作下之具体实现 2015 05 17 19 40 438人阅读 评论 0 收藏 举报 分类 leveldb 13 版权声明 本文为博主原创文章 未经博主允许不得转载 目录 由上文可知 合并主要分为三种
  • Oceanbase列传

    Oceanbase列传 分布式与存储技术 跳至内容 首页 关于郁白 文章列表 文章预告 正在追越狱第五季 两阶段提交的工程实践 两阶段提交 2 Phase Commit简称2PC 协议是用于在多个节点之间达成一致的通信协议 它是实现 有状态
  • SpringBoot 性能优化

    1 服务监控 在开始对SpringBoot服务进行性能优化之前 我们需要做一些准备 把SpringBoot服务的一些数据暴露出来 比如 你的服务用到了缓存 就需要把缓存命中率这些数据进行收集 用到了数据库连接池 就需要把连接池的参数给暴露出
  • vcpkg编译第三方库leveldb

    vcpkg编译leveldb 1 安装vcpkg 使用git命令直接pull vcpkg源码 git clone https github com microsoft vcpkg 2 在vcpkg目录执行bootstrap vcpkg ba
  • 性能优化——设计更优的分布式锁?

    那什么是分布式锁呢 它又是用来解决哪些问题的呢 在 JVM 中 在多线程并发的情况下 我们可以使用同步锁或 Lock 锁 保证在同一时间内 只能有一个线程修改共享变量或执行代码块 但现在我们的服务基本都是基于分布式集群来实现部署的 对于一些
  • IndexedDB 性能和 IndexedDB 与 WebSQL 性能比较

    WebSQL 和 IndexedDB 都是用于在 Web 浏览器中访问 CRUD 底层嵌入式数据库的 DB API 如果我没猜错的话 这就像用于访问 CRUD 任何客户端服务器数据库 如 Oracle 等 的 SQL 在许多情况下 同一浏览
  • 从 Bash 或 Python 获取 google Chrome IndexedDB 中的数据

    我的 Google Chrome 中有 LevelDB IndexedDB 文件 该文件位于此文件夹中 home
  • 无法构建 Objective-C 模块“CoreGraphics”

    当我尝试运行任何单元或 UI 测试时 出现以下错误 运行应用程序本身时不会发生 错误信息如下所示 Applications Xcode app Contents Developer Platforms iPhoneSimulator pla
  • LevelDB 与 std::map

    在我们的应用程序中我们使用std map存储 键 值 数据并使用序列化将该数据存储在磁盘上 通过这种方法 我们发现磁盘 I O 是性能瓶颈 并且使用 key 查找值并不是很快 我遇到过 LevelDB 并考虑使用它 但我有一些问题 Leve
  • LMDB 是否支持多个键到相同值的映射?

    是否可以将多个键映射到同一个值 如果没有 是否有解决此功能的方法 这是不可能的 我使用的一种解决方法是让第二个键上的值成为指向主键的指针 也就是第二个键的值is主键 特别是 我制作了一个辅助键表 或 lmdb 中的 命名数据库 其中所有va
  • g++ 找不到标头,但我确实包含了它们

    我开始使用 c 并且已经出错了 我正在尝试编译 levelDB 的一个小测试 include

随机推荐

  • 如何在 Ubuntu 20.04 上安装 Yarn

    本文最先发布在 xff1a https www itcoder tech posts how to install yarn on ubuntu 20 04 Yarn 是一个 JavaScript 包管理器 xff0c 它兼容于 npm x
  • 如何在 Ubuntu 20.04 上安装和使用 Docker Compose

    本文最先发布在 xff1a https www itcoder tech posts how to install and use docker compose on ubuntu 20 04 Docker Compose 是一个命令行工具
  • 如何在 Ubuntu 20.04 上安装 VirtualBox

    本文最先发布在 xff1a https www itcoder tech posts how to install virtualbox on ubuntu 20 04 VirtualBox 是一个开源的 xff0c 跨平台的虚拟化软件 x
  • 如何在 Ubuntu 20.04 启用 SSH

    本文最先发布在 xff1a https www itcoder tech posts how to enable ssh on ubuntu 20 04 Secure Shell SSH 是一个网络协议 xff0c 它主要被用来加密客户端和
  • 如何在 Ubuntu 20.04 上安装 Vagrant

    本文最先发布在 xff1a https www itcoder tech posts how to install vagrant on ubuntu 20 04 Vagrant是一个命令行工具 xff0c 用于构建和管理虚拟开发环境 默认
  • 如何在 Ubuntu 20.04 上安装 GCC(build-essential)

    本文最先发布在 xff1a https www itcoder tech posts how to install gcc on ubuntu 20 04 GNU 编译器集合是一系列用于语言开发的编译器和库的集合 xff0c 包括 C C
  • 如何在 Ubuntu 20.04 上安装和配置 Redis

    本文最先发布在 xff1a https www itcoder tech posts how to install and configure redis on ubuntu 20 04 Redis 是一个开源的在内存存储键值对数据的存储程
  • 如何在 Ubuntu 20.04 上安装 PHP

    本文最先发布在 xff1a https www itcoder tech posts how to install php on ubuntu 20 04 PHP 是世界上使用广泛的服务端编程语言之一 很多著名的 CMS 和框架 xff0c
  • 用python轻松完成一个分布式事务TCC,保姆级教程

    什么是分布式事务 xff1f 银行跨行转账业务是一个典型分布式事务场景 xff0c 假设A需要跨行转账给B xff0c 那么就涉及两个银行的数据 xff0c 无法通过一个数据库的本地事务保证转账的ACID xff0c 只能够通过分布式事务来
  • 如何在 Ubuntu 20.04 上安装 Spotify

    本文最先发布在 xff1a https www itcoder tech posts how to install spotify on ubuntu 20 04 Spotify是一个音乐流媒体服务商 xff0c 它可以让你和无数的歌曲亲密
  • SSH 操作实践指南

    本文最先发布在 xff1a https www itcoder tech posts ssh practice SSH 是我们经常要和远程服务器交互使用的工具 下面是一些实践中总结的 SSH 操作经验 xff1a 一 如何选择 SSH ke
  • 如何在 Ubuntu 20.04 上安装 R

    本文最先发布在 xff1a https www itcoder tech posts how to install r on ubuntu 20 04 R 是一门开源编程语言和自由的环境 xff0c 主要用于统计分析 绘图 它由 R 基金会
  • 如何在 Ubuntu 20.04 上安装 Mono

    本文最先发布在 xff1a https www itcoder tech posts how to install mono on ubuntu 20 04 Mono 是一个平台 xff0c 基于 ECMA ISO 标准 xff0c 用于开
  • 如何在 Ubuntu 20.04 上安装和使用 Composer

    本文最先发布在 xff1a https www itcoder tech posts how to install and use composer on ubuntu 20 04 Composer 是一个 PHP 依赖管理器 xff08
  • 3分钟在线开通优惠费率的微信支付商户号(商户收款码)

    1 问 xff1a 为什么要开通微信商户号 xff1f 答 xff1a 因为微信个人收款 xff0c 不支持信用卡支付 xff0c 无法提供经营报表 xff0c 无法支持线上支付等 关于微信个人收款码与商家码区别 xff0c 参考 xff1
  • 设置git使用vimdiff比较差异

    原文 xff1a http hi baidu com drdr blog item 57de1e95665a81047af48062 html 修改git的如下2条配置 xff1a git config global diff tool v
  • YUV图像格式

    原文 xff1a http blog csdn net zhongnanjun 3 article details 3934938 YUV xff08 亦称YCrCb xff09 是被欧洲电视系统所采用的一种颜色编码方法 xff08 属于P
  • mime types 大全--来自ubuntu /etc/mime.types

    MIME TYPES and the extensions that represent them The format of this file is a MIME type on the left and zero or more fi
  • VUE3中运用axios处理后端数据

    xff08 1 xff09 在src下新建一个http文件夹 xff0c 文件夹下新建一个index js xff08 2 xff09 在index js文件中引入axios xff08 3 xff09 在index js里面写axios实
  • leveldb性能调优

    许多的nosql都使用leveldb或者类似leveldb的系统作为存储引擎 xff0c 例如tair xff0c hbase xff0c canssandra xff0c 因此理解并调优存储引擎可以大大的提高系统的性能 前一篇大致介绍了原