rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager
本文翻译自 RocksDB 官方 Wiki《Write Buffer Manager》:
https://github.com/facebook/rocksdb/wiki/Write-Buffer-Manager
翻译者:fanrui
Write buffer manager 帮助用户控制多个 column family 和 DB 实例的 MemTable 内存消耗。通过 Write Buffer Manager,用户可以实现:
- 尝试将多个 Column Family 和 DB 的 MemTable 总内存限制在一个阈值以下。
- 允许 MemTable 使用 Block Cache 的内存
Write buffer manager 的使用与 rate_limiter 和 sst_file_manager 类似。用户可以创建一个 write buffer manager 对象,并将其传递给你希望由该对象控制 MemTable 大小的 Column Family 或 DB 选项。看 write_buffer_manager.h
的代码注释可以看到如何使用。
限制 MemTable 的总内存
创建 write buffer manager 对象时可以给出内存限制。RocksDB 将会尽量控制总的使用内存在限制以下。
在 5.6 及其之后的版本,如果可变的 MemTable 的总大小超过了内存限制的 90%,那么 RocksDB 的相应 Column Family 就会触发 flush。如果实际的内存使用超过了限制,即使可变的 MemTable 使用的内存低于 90%,也会非常积极地触发 flush。在 5.6 版本之前,如果可变的 MemTable 大小超过了限制,则会触发 flush。
在 5.6 及其之后的版本,所有被 write buffer manager 管理的内存都会被计算在内,不仅仅是 MemTable 的内存使用。5.6 之前的版本,内存的计算仅仅按照 MemTable 的实际使用来计算的。
MemTable 使用 Block Cache 的内存
从 5.6 版本之后,用户可以配置 MemTable 使用 Block Cache 的内存。这个配置不管是否开启了 MemTable 内存的限制。
大多数情况,Block Cache 中 MemTable 相比 data block 仅仅占比较小的比例。所以当用户开启这个功能,Block Cache 的容量将会包含所有 Block Cache 和 MemTable 的内存使用。如果用户启用 cache_index_and_filter_blocks
,那么 RocksDB 中三个主要的内存使用都会被单个上限进行限制。
下面是实现原理:每次分配给 MemTable 1MB 的内存,WriteBufferManager 将会放 1MB 的虚拟项到 Block Cache 中,这样 Block Cache 就可以知道实际的使用大小,从而淘汰 Block 来获取内存空间。对于 MemTable 内存使用减少的情况,WriteBufferManager 并不会立即删除这些虚拟项,而是在内存使用量显著降低时再缓慢地删除这些虚拟项。这是因为 MemTable 的内存总是在自然地上下浮动,因此我们尝试减少对 Block Cache 的干扰。
通过以下方式开启这个功能:
- 将 Block Cache 传递给即将使用的 WriteBufferManager
- 将 MemTable 期望使用的最大内存传递给 WriteBufferManager
- 设置 Block Cache 的容量为 data block 缓存和 MemTable 的总大小
rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager相关推荐
- 招聘行业颠覆者【伯小乐】| 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 作者微信:weihe2416 "伯小乐" 是 ...
- 短视频Gif快手-有点意思 | 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. ...
- IN-我的生活in记 | 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 引言 IN是一款基于女性和品牌的时尚品位分享移动端社区,以图片社 ...
- 玩美自由行体验报告 | 手摸手产品研究院
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 个人微信:Hm_VS_Zyf 玩美自由行app是一款在线境外旅行 ...
- 手摸手产品研究院 | 玲珑沙龙-一个可以“撕逼”的女性文化社区
手摸手产品研究院是由PMCAFF发起的深度研究产品的产品经理精华小分队,旨在每天一起研究一款产品,并且由阿德老师手摸手指导写分析报告. 1-玲珑沙龙? 什么是玲珑沙龙,那些人在玩玲珑沙龙,为什么会玩? ...
- 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金
完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...
- 带你手摸手搭建vuepress站点
vuePress是什么? VuePress 俺简单介绍下,是国内有名大神的尤雨溪发布的全新基于 vue 静态网站的生成器,内置的有 webpack组件,可以拿来写文档,主要是md格式.做出的感觉就是简 ...
- 手摸手带你学移动端WEB开发
HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP ...
- 微信小程序开发❤手摸手撸小程序一篇就够!
手摸手撸小程序!!超简单,一篇就够! 微信小程序介绍 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用 ...
- 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?
在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...
最新文章
- Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
- 【深度学习】深度学习之对抗样本问题和知识蒸馏技术
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- word排版案例报告_停工不停学丨项目部开展Word办公软件使用技能培训
- P1975 [国家集训队]排队(三维偏序)
- php 检测网址是否有效
- net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.console.demo.web.model.XXX
- AngularJS 后台交互
- 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
- 【经验总结—2】:深度学习数据集下载网站总结
- 无线蓝牙耳机选购小知识,2020新款上市五大高人气蓝牙耳机推荐
- word论文封面下划线对齐
- WGCLOUD部署对服务器硬件配置的一些建议
- Halcon 识别DataMatrix二维码
- Docker入门详解
- 很真实的语音转文字,微软厉害
- 如何优雅的抄袭代码?天下代码一大抄,这才是正确的姿势
- 防孤岛保护装置在光伏行业的应用
- Arnold折射中使用LPE单独提取某个材质的渲染结果
- 几乎必问,Spring 面试题开胃菜