RocksDB架构

这篇具有很好参考价值的文章主要介绍了RocksDB架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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的排序文件组成

RocksDB架构,数据库

RocksDB架构,数据库

 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->...,找到即返回;

RocksDB架构,数据库

空间放大: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 概念解析文章来源地址https://www.toymoban.com/news/detail-602459.html

2、rocksdb是什么

到了这里,关于RocksDB架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库架构演变过程

    🚀 ShardingSphere 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股

    2024年02月14日
    浏览(41)
  • MySQL数据库架构

    MySQL架构自顶向下大致可以分为 连接层 , SQL层 , 存储引擎层 , 物理文件层 。架构如下 客户端连接器,MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序:客户端是与MySQL系统进行交互的组件,它可以是命令行工具、图形用户界面 (GUI) 或各种编程语言中的数据库

    2024年02月13日
    浏览(45)
  • 01-三层架构之查询数据库数据

       

    2024年02月03日
    浏览(41)
  • 分布式数据库架构

    对于mysql架构,一定会使用到读写分离,在此基础上有五种常见架构设计:一主一从或多从、主主复制、级联复制、主主与级联复制结合。 1.1、主从复制 这种架构设计是使用的最多的。在读写分离的基础上,会存在一台master作为写机,一个或多个slave作为读机。因为在实际的

    2024年02月10日
    浏览(50)
  • 数据库简史:多主数据库架构的由来和华为参天引擎的机遇

    注:本文发表后,收到了很多后台反馈,其中关于大型机的早期成就不容省略。微调重发本文,纯属个人观点,错谬之处,仍然期待指正。 2023年10月13日,在北京举办的“ 2023金融业数据库技术大会 \\\"上,有一个非常重要的计划低调地发起了。这就是 \\\"北京金融信息化研究所

    2024年02月08日
    浏览(57)
  • 云计算基础架构(一) 数据库

    官网: https://github.com/yoshinorim/mha4mysql-manager/wiki 前提:     1) 所有节点之间, 相互之间免密认证     2) 所有节点yum源配置正常     3) gw服务器有相关的安装包     4) 系统时间要正确     5) /etc/hosts要统一(本实验通过dns解析已经实现) 环境拓扑: node01  10.15.200.101  Primary_Maste

    2023年04月25日
    浏览(30)
  • 第四单元 管理数据库架构

    EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步。至于我们应该选用哪个方法,请确定你是希望以 EF Core 模型为准还是以数据库为准。 如果希望以 EF Core 模型为准,请使用 迁移 。 对 EF Core 模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以

    2024年02月05日
    浏览(61)
  • Java架构师内功数据库

    2023年10月31日
    浏览(51)
  • 系统架构12 - 数据库基础(下)

    数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间联系和约束的抽象,是数据内在的性质,是语义的体现。函数依赖则是一种最重要、最基本的数据依赖。 给定一个X,能唯一确定一个Y,就称X决定(确定)Y,或者说Y依赖于X。 例如

    2024年01月22日
    浏览(47)
  • 系统架构11 - 数据库基础(上)

    数据 :是数据库中存储的基本对象,是描述事物的符号记录。 数据的分类 :文本、图形、图像、音频、视频等。 数据库 (DataBase,DB):是统一管理的、长期储存在计算机内的,有组织的相关数据的集合。其特点是 数据间联系密切、冗余度小、独立性较高、易扩展,并且可

    2024年01月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包