触发

在下面这几种条件下RocksDB会flush memtable到磁盘.

  1. 当某一个memtable的大小超过write_buffer_size.
  2. 当总的memtable的大小超过db_write_buffer_size.
  3. 当WAL文件的大小超过max_total_wal_size之后 最后一个条件的原因是,当WAL文件大小太大之后,我们需要清理WAL,因此此时我们需要将此WAL对应的数据都刷新到磁盘,也是刷新Memtable.

流程:

flush memtable到磁盘,是由后台线程BGWorkFlush来做的;

MaybeScheduleFlushOrCompaction
->BGWorkFlush
->BackgroundCallFlush
->BackgroundFlush
->FlushMemTablesToOutputFiles
PickMemTable
->PickMemtablesToFlush
FlushJob::Run
->WriteLevel0Table
->调用BuildTable函数构造SSTable
另一为TryInstallMemtableFlushResults函数完成与manifest的交互,将flush的结果commit到manifest。InstallSuperVersionAndScheduleWork
//@@@因为flush完成后,会更改RocksDB的元信息,比如新增了SST文件/blob文件,
//释放了一些immutable等,所以此时需要将新的SuperVersion
//install到cfd中,FlushMemTableToOutputFile通过调用InstallSuperVersionAndScheduleWork完成这一步骤。
        传入参数是:SuperVersionContext
   

启动的时候原生会加载数据到memtable然后flush

,下面文章做了简单优化

Rocksdb Secondary Instance启发与实践 - 知乎前言最近在做rocksdb的集群化改造,期间遇到了很多问题,也有很多的思考与感悟,这里希望与大家分享一下。 简单介绍RocksdbLevelDB是由Google开源的,基于LSM Tree的单机KV数据库,其特点是高效,代码简洁而优美。…https://zhuanlan.zhihu.com/p/147527659

TryInstallMemtableFlushResults

RocksDB KV分离写操作实现分析 - 知乎Overview整体上官方的kv分离实现,key和value只有被刷到磁盘时才分离,因此kv分离的写逻辑主要嵌入到了flush memtable过程中。本文将对社区的integrated blobdb的实现做出分析,分析的版本为rocksdb-6.20.3。 Rock…https://zhuanlan.zhihu.com/p/385826245

Rocksdb Flush相关推荐

  1. rocksdb和leveldb性能比较——写性能

    前面学习了一下rocksdb,这个db是对leveldb的一个改进,是基于leveldb1.5的版本上的改进,而且leveldb1.5以后也在不断的优化,下面从写入性能对两者进行对比. 前言 比较的l ...

  2. Rocksdb 的 MergeOperator 简单使用记录

    本篇仅仅是一个记录 MergeOperator 的使用方式. Rocksdb 使用MergeOperator 来代替Update 场景中的读改写操作,即用户的一个Update 操作需要调用rocksd ...

  3. Rocksdb 的 BlobDB key-value 分离存储插件

    前言 还是回到传统的 LSM-tree 中,我们key-value 写入时以append形态存放到一个data-block中,多个data-block+metablock 之类的数据组织成一个sst. ...

  4. Rocksdb 通过ingestfile 来支持高效的离线数据导入

    文章目录 前言 使用方式 实现原理 总结 前言 很多时候,我们使用数据库时会有离线向数据库导入数据的需求.比如大量用户在本地的一些离线数据,想要将这一些数据导入到已有的数据库中:或者说NewSQL场景 ...

  5. Rocksdb 利用recycle_log_file_num 重用wal-log文件

    recycle_log_file_num 复用wal文件信息, 优化wal文件的空间分配,减少pagecache中文件元信息的更新开销. 为同事提供了一组rocksdb写优化参数之后有一个疑惑的现象被 ...

  6. Rocksdb 获取当前db内部的有效key个数 (估值)

    文章目录 1. 基本接口 2. Memtable key个数统计 3. Immutable Memtable key个数统计 4. Sstables key个数统计 5. 疑问 Rocksdb因为是A ...

  7. Rocksdb 写入数据后 GetApproximateSizes 获取的大小竟然为0?

    项目开发中需要从引擎 获取一定范围的数据大小,用作打点上报,测试过程中竟然发现写入了一部分数据之后通过GetApproximateSizes 获取写入的key的范围时取出来的数据大小竟然为0...难道 ...

  8. Rocksdb 的优秀代码(三)-- 工业级 线程池实现分享

    文章目录 前言 1. Rocksdb线程池概览 2. Rocksdb 线程池实现 2.1 基本数据结构 2.2 线程池创建 2.3 线程池 调度线程执行 2.4 线程池销毁线程 2.5 线程池优先级调 ...

  9. Rocksdb Iterator实现:从DBIter 到 TwoLevelIter 的漫长链路

    文章目录 1. 迭代器简单介绍 2. 迭代器用户态相关接口 3. 迭代器内部架构 4. 迭代器的入口实现 4.1 DBIter 4.2 MergingIterator 4.3 Memtable系列It ...

最新文章

  1. 加速、能耗与对抗攻击:5位顶会作者解析2020 AI系统关键挑战
  2. Solaris 常用命令
  3. 20145328《网络对抗》Web基础
  4. 手写html基础格式,手写服务器_HTML 简单入门知识
  5. Java中的关键字——final
  6. IBM X3650 WIN2003安装详细方法
  7. html 轮播图的鼠标事件,这是图片轮播的代码 html+css,怎么加上鼠标悬停移出继续功能?...
  8. 43个热门Flex和ActionScript 3.0 APIs,技巧和工具
  9. RabbitMQ 整合 Spring AMQP 实战
  10. core控制器属性注入的用处_asp.net-core – 如何使用Autofac和ASP.NET Core在控制器上启用属性注入?...
  11. Impala系列:Impala查询优化
  12. linux opendir路径_Linux opendir();readdir();chdir()使用要点
  13. 博世BMI160驱动程序 C语言编程,如何使用PSoC 6制作完整的测试系统来与BMI160进行通话...
  14. 合同在项目管理中的优势
  15. vue-router懒加载,用于多页面项目
  16. [IOS]Presenting modal in iOS 13 fullscreen
  17. HTML5期末大作业:订餐系统网站设计——绿色的网上订餐系统(23个页面) 网页作品 订餐系统网页设计作业模板 学生网页制作源代码下载
  18. 鸿蒙宴历史背景,鸿门宴的历史背景介绍
  19. 地图兴趣点搜索三(ES相关性得分参数调整)
  20. 安富莱V6供电问题,突然黑屏

热门文章

  1. 墨墨背单词mysql_[英语] 何凯文考研英语第271句
  2. 组装电脑购机指南和记录自己的装机过程
  3. android html 标签字体加粗
  4. 【数据结构】图—迪杰斯特拉(Dijkstra)算法
  5. Java中 Controller、Service 、Dao/Mapper层的区别
  6. 攻防演练防守方注意要点
  7. 10种排毒养颜家常食物
  8. 计算机专业父女超级对白,父女对白
  9. xilinx srio ip学习笔记之初识srio
  10. Neo4j 快速入门