它是一个高性能的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相关推荐

  1. rocksdb原理_看图了解RocksDB

    编辑推荐: 本文来自于oschina,本文主要介绍RocksDB的写入的流程.读取的层次等相关内容. 它是一个高性能的Key-Value数据库.设计了完善的持久化机制,同时保证性能和安全性.能够良好的 ...

  2. 谷歌发布最新看图说话模型,可实现零样本学习,多类型任务也能直接上手

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 兴坤 发自 凹非寺 量子位 报道 | 公众号 QbitAI 谷歌新推 ...

  3. 小白兔写话_聪明的小白兔看图写话

    内容简介:有一只孤独又美丽的小白兔住在一个大山坡,小白兔每天往自己的身上撒好香的香水,有一只狡猾的狐狸就住.. 本文<聪明的小白兔看图写话>由小学生作文大全整理,仅供参考.如果觉得很不错, ...

  4. 自然语言处理NLP之自然语言生成、文本相似性、看图说话、说话生图、语音合成、自然语言可视化

    自然语言处理NLP之自然语言生成.文本相似性.看图说话.说话生图.语音合成.自然语言可视化 目录

  5. 《预训练周刊》第27期:谷歌发布最新看图说话模型、GitHub:平台上30%的新代码受益于AI助手Copilot...

    No.27 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 本期周刊,我们选择了9篇预训练相关的论文,涉及少样本理解.图像检测.决策图.大模型微调.对话微调.分子建模.蛋白质结构预测 ...

  6. 教你用PyTorch实现“看图说话”(附代码、学习资源)

    作者:FAIZAN SHAIKH 翻译:和中华 校对:白静 本文共2200字,建议阅读10分钟. 本文用浅显易懂的方式解释了什么是"看图说话"(Image Captioning), ...

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

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

  8. android ui秘笈,看图说话 – Android UI 设计秘笈 :Part I

    Android 的官方开发者博客发了一份幻灯片,介绍了一些 Android UI 设计的小贴士,Roger 在这里以看图说话的形式发出来,有兴趣的读者就继续往下翻吧.整个 PPT 共分5个部分,Par ...

  9. airtestide 下载后打不开_微信收到CAD图纸打不开怎么办?2种方法教你手机CAD快速看图...

    现在很多人习惯于移动办公,可以在任意时间使用手机工作既方便,又快捷,但是如果我们的微信接收到CAD图纸打不开怎么办呢?如何在手机上看建筑图纸,或是进行手机CAD看图要如何做呢?微信收到CAD图纸打不开 ...

最新文章

  1. 如何自动校正服务器时间,几个常用校正服务器时间
  2. 【Clickhouse】Dockerfile 文件,加入 mysql
  3. ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)
  4. python tkinter Listbox用法
  5. asp.net 报表页面模板_Stimulsoft ASP.NET MVC报表教程:在设计器中保存报表模板
  6. linux系统c语言编译icpc,ACM-ICPC 比赛环境的使用
  7. oracle常用函数详解(详细)
  8. 波形和函数发生器(Waveform and Function Generator)
  9. 关于Google Play这个应用市场app signing的坑
  10. ps2改usb接口_如何将PS2接口键盘、鼠标改成USB接口
  11. 小猫盘onespace x3p系统常见操作
  12. 推动操作系统发展的主要动力是什么?
  13. 公司会议如何保证高效
  14. TP5之微信小程序推送模板消息
  15. Android 360全景开发(PanoramaGL)
  16. 280049_CAN 模块
  17. Hive beeline常用操作
  18. GitHub Pages部署vuepress报错:JavaScript heap out of memory
  19. 应用签名不一致,该应用可能被篡改的问题
  20. cad重新加载php命令,cad无限缩小的命令是什么

热门文章

  1. 伪类如何动态在html设置样式,用js实现before和after伪类的样式修改的示例代码
  2. signature=8405d26e250ad07c44560263cb1d4fc0,Systems for analyzing microtissue arrays
  3. linux内核深度解析_十年磨一剑,第一本龙芯平台的Linux内核书来了
  4. python3如何安装selenium_Mac-Firefox浏览器+selenium+Python3环境安装
  5. pdf在线翻译_如何免费快速地翻译pdf英文文档,并保留很好的格式?
  6. 汇编为什么分段执行总是执行不了_为什么我的计划总是执行不了?这里有你要的答案...
  7. python count函数用法 comm_python3:MySQL 8.0学习笔记(第五部分:单表查询操作)
  8. 一会404一会500_没网络就是404?这锅可不能乱背!
  9. 华为荣耀20和x10比较_荣耀X10和华为畅享20plus,到底哪个更值得入手?
  10. 用注水实验法验证勾股定理