rocksdb原理简介-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 265416
  • 博文数量: 619
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5320
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、cdn、云电脑、大数据及ai等全线产品和场景化凯发app官方网站的解决方案。

文章分类

全部博文(619)

文章存档

2024年(170)

2023年(247)

2022年(202)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: 服务器与存储

2023-05-26 14:19:45

本文分享自天翼云开发者社区《》,作者:l****n


rocksdb作为当下nosql中性能的代表被各个存储组件(mysql、tikv、pmdk、bluestore)作为存储引擎底座,其基于lsm tree的核心存储结构(将随机写通过数据结构转化为顺序写)来提供高性能的写吞吐时保证了读性能。同时大量的并发性配置来降低compaction的影响。

 

涉及到的几个核心文件:

wal

writeaheadlog,rocksdb的日志,保存memtable中的信息。当memtable转化为immutable memtable并且flush到l0层之后,之前wal的会被清理,即于删除db目录下的log文件。

rocksdb中每一次数据的更新都会涉及到两个结构,一个是内存中的memtable(后续会刷新到磁盘成为sst),第二个是wal。

wal主要的功能是当rocksdb异常退出后,能够恢复出错前的内存中(memtable)数据,因此rocksdb默认是每次用户写都会刷新数据到wal。每次当当前wal对应的内存数据(memtable)刷新到磁盘之后,都会新建一个wal。

所有的wal文件都是保存在wal目录(options.wal_dir),为了保证数据的状态,所有的wal文件的名字都是按照顺序的(log_number)。

manifest

rocksdb中manifest保存了存储引擎的内部的一些状态元数据,简单来说当系统异常重启,或者程序异常被退出之后,rocksdb需要有一种机制能够恢复到一个一致性的状态, 而这个一致性的状态就是靠manifest来保证的.

manifest在rocksdb中是一个单独的文件,而这个文件所保存的数据基本是来自于versionedit这个结构.

manifest包含了两个文件,一个log文件一个包含{banned}最佳新manifest文件名的文件,manifest的log文件名是这样 manifest-(seq number),这个seq会一直增长.只有当 超过了指定的大小之后,manifest会刷新一个新的文件,当新的文件刷新到磁盘(并且文件名更新)之后,老的文件会被删除掉。这里可以认为每一次manifest的更新都代表一次snapshot。

current

记录当前{banned}最佳新的manifest文件编号

memtable

常驻于内存中,在wal写之后,记录具体的key-value数据。在rocksdb中,每个columnfamily都有自己的memtable,column family之间互不影响。而在rocksdb中memtable有多种实现,skiplist/hashskiplist/hashlinklist/vector,默认的实现为skiplist(只有skiplist可以并发插入)。memtable大小以及个数可以由指定的参数进行控制:

write_buffer_size表示memtable的大小

max_write_buffer_number表示内存中{banned}最佳多可以同时存在多少个memtable的个数

immutable memtable

memtable被写满之后会生成一个新的memtable继续接受io,旧的memtable就会变成immutable memtable,为只读的状态,且开始由后台线程flush到磁盘的l0层sst。

sst

核心key-value的存储文件,比如db目录下的000023.sst文件。默认分为l0~l7层,当满足一定条件时(本层sst总大小超过配置大小、wal文件超过一定值)后台开启compaction任务,从当前层和下一层选取若干sst,做合并,并写入新的sst文件。

ccolumnfamily
rocksdb 3.0中加入了column family特性,加入这个特性之后,每一个kv对都会关联一个column family,其中默认的column family是 "default"。column family主要是提供给rocksdb一个逻辑的分区。从实现上来看不同的column family共享wal,而都有自己的memtable和sst,同时拥有自己的配置。这就意味着我们可以快速方便的设置不同的属性的column family以及快速删除对应的column family。但是因为column family共享wal,可能会咬住wal,让wal快速增长从而触发memtable的强制flush。

阅读(290) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图