编辑推荐:

本文来自于oschina,本文主要介绍RocksDB的写入的流程、读取的层次等相关内容。

它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。

下图为写入的流程:

可以看到主要的三个组成部分,内存结构memtable,类似事务日志角色的WAL文件,持久化的SST文件。

数据会放到内存结构memtable,一定条件下触发写到到SST文件。写入WAL文件是可选的,用来恢复未写入到磁盘的memtable。

下图展示了读取的层次:

memtable和SST文件组成数据的全集。之上是缓存层,缓存为提升查询性能做了分片,底层都采用hash查询,不同缓存结构的区别在于热点数据的替换逻辑。访问数据库时,都是访问的打开时间点的view(我猜测一个key有不同时间戳的多条记录)。除了直接查询db,还提供了查询快照的机制。直接访问db时,会持有文件句柄,这样多个SST文件合并时,已经被合并但被访问的文件就不能被删除。而快照机制保证了访问过程中文件能被删除(我并未想明白如何做到的),不过打开期间被删除的key的记录还会在新合并的文件里存在。

memtable的结构有几种可选,本质都是排序的结构(为了支持范围查询)

其中之一是上图的跳跃表,不了解跳跃表机制的读者可以简单理解为有序支持近似二分查找的时间复杂度为log2(N)的结构

另外一种是hash结合跳跃表,是按照key的前缀做hash,单独访问一个key时性能更好,范围查询性能会差些

WAL文件结构如下图,按照写入的顺序来存储变长的K-V,按照固定长度来分组存储(可能一个K-V跨多个分组)的目的是便于读取

支持几种SST文件结构

上图为按照多块来存储的结构。每块的K-V都是有序的,而多块也是有序的。文件中包含元数据相关的信息,包括数据压缩字典、过滤器等。会按照数据块所属的K-V范围来创建索引,为提升查询性能会给索引分片。

另外一种结构是每个K-V来存储。它的索引比较特殊,由hash结构和二进制查找缓存两部分组成。依然按照key的前缀做hash,如果桶对应的K-V记录很少,则直接指向第一个key(有多个key属于该桶)的记录位置。如果属于桶的K-V记录多于16条,或者包含多于一个前缀的记录,则先指向二进制查找缓存(先二分查找),而后指向第一个key的记录位置。

随着K-V的写入,会生成很多的SST文件,这部分文件需要被合并到一起。从而降低打开文件数量,并且移除已经不存在的记录。通常可以配置两种方式,通用合并(下图左侧)与level合并(右侧)。

其中一个概念是level,可以简单理解成越老的数据在越高的level(也就是数据最初写入到最低的level,level0就是memtable)。

我将通用合并简单理解为一种简单粗暴的合并,可以尽量降低写磁盘的压力,会增大读取的压力,临时空间占用大。

一般多采用level合并的方式。每个level都有max大小,超出后会触发本level与下一level的文件合并到一起。不同level的合并是可以并发执行的。

对rocksdb做个总结。所有记录在业务上是有序的,对key的查询其实会执行类似二分查找。持久化是通过写入有序文件来实现的。高性能的写入是通过先写入内存结构来保证的(写满的内存结构刷到持久化文件)。提供了level机制对数据做分层,优先查询最新写入的level来优化查询性能。

rocksdb原理_看图了解RocksDB相关推荐

  1. rocksdb原理_基于RocksDB实现精准的TTL过期淘汰机制

    本文来自OPPO互联网技术团队,如需要转载,请注明出处及作者. Parker 是 OPPO 互联网自研的一个基于 RocksDB 的分布式 KV 存储系统,它是一款类 Redis 的存储系统,主要解决 ...

  2. 钉钉日志范文100篇_看图写话范文328:暑假旅行(4篇)

    范文01:暑假旅行400字 暑假,我们一家去了嘉兴游玩.嘉兴南湖因红船而成为革命圣地.老爸对于中国近代革命史可谓是如数家珍:"星星之火可以燎原!你们看,当初共产党就是在这么小的一艘船里点燃了 ...

  3. 机器人摘果子看图写话_看图写话——聪明的小白兔

    荷叶伞 一天早上,小白兔提着篮子高高兴兴地来到了美丽的大森林.她采啊采,采了满满一篮子的大蘑菇. 突然,乌云密布,电闪雷鸣,下起了倾盆大雨.小白兔没有雨伞,怎么办呢?她看见池塘边有许多绿油油的荷叶.她 ...

  4. 小白兔写话_看图写话小白兔

    <看图写话小白兔>由会员分享,可在线阅读,更多相关<看图写话小白兔(2页珍藏版)>请在人人文库网上搜索. 1.小白兔作文教案一(1) 吴鸿[学习目标]1. 学会如何去观察动物. ...

  5. python看图猜成语_看图猜成语200个图答案 看图猜成语图片答案大全

    看图猜成语2游戏v1.40苹果版 类型:ios休闲益智大小:100M语言:中文 评分:10.0 标签: 立即下载 看图猜成语200个图答案 看图猜成语图片答案大全.看图猜成语是一款很受欢迎的休闲猜谜类 ...

  6. Android的识花软件推荐,识花app哪个好_鲜花app哪个好用_看图识花的软件哪个好

    核心提示:识花的软件有很多,哪些识花软件是我们想要的呢,下面多特小编就跟您推荐几款比较合适的软件或者app给您参考 识花的软件有很多,哪些识花软件是我们想要的呢,下面多特小编就跟您推荐几款比较合适的软 ...

  7. rocksdb原理_手摸手学习 RocksDB 的 Write Buffer Manager

    本文翻译自 RocksDB 官方 Wiki<Write Buffer Manager>: https://github.com/facebook/rocksdb/wiki/Write-Bu ...

  8. rocksdb原理_[转]Rocksdb Compaction原理

    概述 compaction主要包括两类:将内存中imutable 转储到磁盘上sst的过程称之为flush或者minor compaction:磁盘上的sst文件从低层向高层转储的过程称之为compa ...

  9. rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇

    0. Intro 在facebook的MySQL版本(以下称为MyRocks)中,RocksDB是可选的存储引擎.相比于InnoDB引擎,RocksDB的一个重要的优势是它使用更少的磁盘空间.在生产系 ...

最新文章

  1. python dict批量选择_Python 中有 3 个不可思议的返回功能
  2. 零基础学python 明日科技-明日科技 - 课程
  3. python怎么安装第三方库-vs2017怎么安装python第三方包
  4. javascript实现正整数分数约分
  5. linux下的geany源码安装,linux 下php开发工具geany-0.16的安装。
  6. Industry AI Live | BERT在美团搜索业务中的应用
  7. 【转】开始iOS 7中自动布局教程(一)
  8. Matlab从入门到精通 Chapter5 数据可视化
  9. php使用webservivce_JWS服务开发使用指南
  10. 【elasticsearch】Elasticsearch : alias数据类型
  11. 【转载】Deferred Shading
  12. ftp多线程上传、下载以及断点续传
  13. Linux下安装jre
  14. openwrt安装aliddns使用阿里云ddns
  15. 抖音看不到好友动态显示服务器,抖音好友动态怎么突然看不到了
  16. 录屏软件哪个好?快来试试这几款吧!
  17. 什么是做空 什么是做空期权波动率?
  18. python常用数学公式
  19. 什么是庖丁解牛的思维?
  20. QQ(微信)一次性发送多条信息(连续发520遍我爱你)

热门文章

  1. 【论文写作】之LaTeX中插入Visio图文件
  2. 水星宽带拨号上网服务器无响应,宽带连接时错误678问题怎么解决【解决方法】...
  3. Debian5安装过程(转)
  4. java基础----网络编程
  5. Redis生成全局唯一ID
  6. Android 如何屏蔽联通服务信息WAP通知信息http://g.iuni.com.cn, 百度无耻不让发贴批拼联通
  7. admui 框架源码 入口文件
  8. linux-2.6.38.2移植到mini2440开发板上
  9. ubuntu18.04安装bazel
  10. vue+element 创建Cron表达式生成器组件 [带最近五次执行时间]