RocksDB架构

news2024/11/26 8:29:58

1、rocksdb是什么?

RocksDB中文网 | 一个持久型的key-value存储

rocksdb是一种KV存储引擎,常用于数据库存储数据,无法直接使用,没有提供sql命令,通过调用rocksdb提供的api进行数据库的读写等操作。

rocksdb是以leveldb为基础开发的,都使用了LSM Tree来存储数据,

设计目标:满足使用需求的同时,提供高性能的存储,相比leveldb提供了很多额外的特性,优化性能

官网链接:Home · facebook/rocksdb Wiki · GitHub

2、LSM Tree是什么

存储架构|聊聊 LSM Tree 强悍的设计 - 墨天轮

rocksdb设计架构 - 知乎

LSM-Tree全称Log Structured Merge Tree,是一种分层、有序、面向磁盘的数据结构,其核心思想是充分利用磁盘的顺序写性能要远高于随机写性能这一特性,将批量的随机写转换为一次性的顺序写。

LSM-Tree的写入操作,类似于普通的日志写入方式,以Append的模式追加,删除操作Append一条删除的日志;修改操作Append一条新key-value。

LSM-Tree有内存组件和硬盘组件两部分。

内存组件:包含Memtable和Immutable MemTable,Memtable内部使用红黑树或者跳表来保证结构的有序性

  • Memtable:数据直接写入MemTable;
    • MemTable提供了k-v数据的写入、读取和删除接口。
      按key顺序存储,以便被合并到SSTable后仍然有序
  • Immutable MemTable: 不可写,被冻结的MemTable,待被合并到硬盘;
    • 当MemTable达到一定阈值后,将其冻结成Immutable MemTable,并生成新的MemTable

硬盘组件:包含不同Level的SSTable(sorted string table)

  • Level越低,数据越新,容量越少;反之Level越高,数据越旧,容量越大;
  • 低Level的SSTable被合并到高Level的SSTable,合并过程中会做删除操作(相同key删除旧值保留新值);
  • SSTable中除了数据块,还含有索引块,便于块内数据的快速查找;

WAL

WAL(Write-Ahead-Log)预写日志,用于保证宕机时数据不丢失。
写入数据时,同时写入MemTable和WAL;由于WAL是顺序写,速度很快。
当程序宕机时,可以从WAL恢复数据到MemTable

SSTable

SSTable(sorted string table)是Immutable MemTable在磁盘上的存储,内部按key顺序排列。
为了加快SSTable的查询速度,在SSTable中增加索引信息(如下图),可以快速定位key并查到其value

一个SSTable将由多个被称为Segment的排序文件组成

 LSM-Tree SSTable合并策略

磁盘中低Level的SSTable被合并到高Level中,合并过程中,可以做删除操作,降低磁盘使用。

  • Leveling Merge Policy:

    • 每个level仅有1个组件,L0和L1合并,合并到L1中;
    • 由于组件较少,查询性能较高,LevelDB和RocksDB使用该策略;
  • Tiering Merge Policy:

    • 每个Level有N个组件,合并后生成Level+1的一个新组件;
    • 由于可以降低合并的频率,写入性能较高;

LSM-Tree的读取效率并不高

  • 先查找内存Memtable和Immutable,找到即返回;
  • 然后分别查找磁盘L0 SSTable->L1 SSTable->...,找到即返回;

空间放大:space amplification
如果一项数据更新了多次,这项数据可能会存储在多个不同的SSTable中,甚至一项数据的不同部分的最新内容存储在不同的SSTable中。
这样一份数据在磁盘中存储了多份副本,而老的副本是过时的,数据实际占用的空间比有效数据大。
LSM Tree将这一现象称为空间方法(space amplification)。

读放大:read amplification
空间方法的现象导致LSM Tree查找时,从最老-->最新逐个level查询SSTable;如果目标数据不在最底层的level N中,那么我们就读取和查询了所有的SSTable.
LSM Tree将这种读取和查找了无关SSTable的现象称为读放大(read amplification)。

LSM-Tree读取的优化

从查找过程可以看出,LSM-Tree的读取速度要比其他结构慢,若遇到“读放大”,则查询速度则是灾难性的。
故需要使用一些索引技巧进行优化:

LevelDB Manifest文件

manifest文件记录所有的SSTable信息,比如Level、最小key、最大key等,可以用于快读定位目标SSTable。

这样在查找时,先将SSTable的manifest读到内存中再进行判断,不用整个SSTable读入。

SSTable的索引块

每个SSTable文件中加入索引块,索引块中记录key及其offset,key按顺序排列。

这样在查找时,先在索引中二分查找key和offset,然后再到SSTable中读取key-value。

SSTable的布隆过滤器

对SSTable指定布隆过滤器,判定一个SSTable是否包含特定的建,以减少访问磁盘次数。

这样在查找时,根据BloomFilter可以快速确定某个key是否在当前SSTable中。

SSTable compaction

将多个SSTable合并为一个SStable,删除旧数据或标记为已删除的数据,降低空间放大;
同时,减少SSTable,降低读放大。

B+树的特点:插入和搜索的性能很高,算法的时间复杂度是O(logn)

学大数据必懂系列之LSM-Tree-腾讯云开发者社区-腾讯云

LSM-Tree 概念解析

2、rocksdb是什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WinCE OSDesign项目创建模拟器

vs2005创建OSDesign项目,WinCE6 1.解决方案管理器,项目鼠标右键属性 默认语言设置 编译选项 2.主菜单:Target->Connectivity Options Add Device/Remove Device不用管 Kernel Service Map Core Service Settings默认 Service Status默…

网络安全(黑客)自学路线笔记

一、什么是黑客? 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手,现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术? 其实,网络信息空间安全已经成为海陆空之外的第四大战场,除了国与国之间的博弈&am…

企业微信在ios机型无法吊起打开个人信息页接口(openUserProfile)

wx.qy.openUserProfile({type: 1,//1表示该userid是企业成员,2表示该userid是外部联系人userid: "wmEQlEGwAAHxbWYDOK5u3Af13xlYAAAA", //可以是企业成员,也可以是外部联系人success: function(res) {// 回调} });遇到的问题:调用打…

flutter开发实战-实现推送功能Push Notification

flutter开发实战-实现推送功能Push Notification 推送服务现在可以说是所有 App 的标配了,最近在Flutter工程项目上实现推送功能。flutter上实现推送功能需要依赖原生的功能,需要插件实现,这里使用的是极光推送的服务。 一、效果图 效果图…

整车总线系列——FlexRay 七

整车总线系列——FlexRay 七 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能…

swagger对json数据的处理

在实习中遇到了一个不寻常的事情,今天和同事讨论一个小问题,同事使用swagger,想要调用一个接口,这个接口要传递一个json对象,对应java的一个实体类,但是有一个属性同事不想看到它,就用JsonIgnor…

主从复制 [学习笔记] MaterSlave

文章目录 前言MySQL主从复制的实战案例1、环境搭建2、主库配置,进入vim /etc/my.cnf3、重启数据库4、建立同步账号5、锁表设置只读6、设置主库状态7、备份数据库资料8、解锁9、主库备份数据上传到从库10、slave从库设置11、还原数据的备份12、设定从主库同步 前言 …

物流智能搬运机器人|HEGERLS四向穿梭车在复杂生产场景下的智能化作业应用

一般而言,物流有三个基本环节:存取、输送和分拣。在存取环节,常用方式有两种:托盘存取和料箱存取。以前托盘存取应用得多一些,但随着电商、新零售的兴起,B2b、B2C业务快速增长,订单碎片化趋势明…

ripv2小实验

子网划分 192.168.1.0/24: 192.168.1.0/26 192.168.1.64/26 192.168.1.128/26 192.168.1.192/26 192.168.1.0/26划分为 192.168.1.0/26 192.168.1.4/26 192.168.1.8/26 192.168.1.12/26 192.168.1.16/26 192.168.1.20/26 192.168.…

IDEA如何打包springboot成jar包,并运行、停止、重启,本地依赖不能打包怎么办

1、将springboot项目打包成jar 第一步 这里要注意依赖的包的导入&#xff0c;有pom.xml中网络依赖导入&#xff0c;有的包是本地依赖导入&#xff0c;本地依赖的包只需在pom.xml加入一下代码即可&#xff01; <dependency><groupId>jacob</groupId>//名称…

idea设置git 忽略的文件

1、FIle-->setting 打开设置对话框。 2、 找到如图所示的FileType。 3、添加需要忽略的文件&#xff0c;比如idea&#xff0c;classes&#xff0c;添加完后&#xff0c;点击apply、OK 保存。 注&#xff1a;本设置基于idea 2023.1.3版本

【FPGA】串口通信讲解-状态机判断数据值

&#x1f389;欢迎来到FPGA专栏~串口通信讲解 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正&…

【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现粒子场_ParticleField】

Shader"ShaderToy/ParticleField" {Properties{_iMouse("iMouse", Vector) = (0,0,0,0)}SubSha

怎么把PDF转为word?1分钟解决难题

PDF文件在我们的电脑上应用非常广泛&#xff0c;由于其较高的安全性和兼容性&#xff0c;得到了广泛的认可。然而&#xff0c;对于一些人来说&#xff0c;PDF文件不能直接进行编辑和修改可能是一个问题。因此&#xff0c;通常我们需要将其转换为Word格式&#xff0c;以便在Word…

uniapp 微信小程序 input详解 带小数点的input、可查看密码的输入框input

官网文档地址 1、template <!-- 本示例未包含完整css&#xff0c;获取外链css请参考上文&#xff0c;在hello uni-app项目中查看 --> <template><view><view class"uni-common-mt"><view class"uni-form-item uni-column"&g…

Mysql 主从复制、读写分离

目录 前言 一、主从复制原理 1.1 MySQL的复制类型 1.2 mysql主从复制的工作原理 1.3 MySQL主从复制延迟 1.4 MySQL四种同步方式 1.5 MySQL支持的复制类型 二、 MySQL应用场景 三、主从复制实验 3.1 MySQL主从服务器时间同步 3.1.1 安装ntp、修改配置文件 3.1.2 两台…

如何查看小程序的APPID和AppSecret

小程序APPID可以在手机上打开小程序后&#xff0c;点击右上角三点&#xff1a; 然后点击中间位置的小程序名称&#xff0c;进入小程序介绍页面&#xff1a; 点击“更多资料”后&#xff0c;进入页面就可以看到上方有APPID&#xff1a; 另一种方法&#xff1a; 在微信公众平台登…

安装:【vue】npm install -g @vue/cli出现错误

安装Vue脚手架&#xff0c;cli就是Command Line Interface 命令行接口 工具 进行到npm install -g vue/cli这一步出现错误&#xff0c;操作步骤如下&#xff1a; 1.通过 wins打开开始栏的搜索框&#xff0c;输入cmd&#xff0c;管理员身份运行 2.先下载node.js 不知道有没有…

数据库应用:Mycat+HAProxy+Keepalived实现高可用

目录 一、理论 1.高可用 2.部署高可用 二、实验 1.MycatHAProxyKeepalived实现高可用 三、问题 1.开启HA-Proxy失败 2. VMware 克隆linux 网卡UUID重复问题 3.keepalived状态报错 四、总结 一、理论 1.高可用 &#xff08;1&#xff09;概述 ①Mycat 在实际项目中…

蓝桥杯专题-真题版含答案-【加法变乘法】【三羊献瑞】【交换瓶子】【卡片换位】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…