当前位置: 首页 > news >正文

RocksDb 是什么?levelDB、LSM 树、SSTable又分别是什么?区别呢?

Git高速下载
程序员面试资料大全|各种技术书籍等资料-1000G


1. LSM 树 (Log-Structured Merge-Tree)

  • 核心思想:用顺序写(高效)代替随机写(低效),通过后台合并操作处理数据更新和删除。
  • 工作流程
    1. 写入:先写入内存中的MemTable(有序数据结构,如跳表)。
    2. MemTable写满:转为只读的Immutable MemTable,并刷盘生成SSTable文件。
    3. 合并(Compaction):分层合并SSTable文件,丢弃旧数据/重复数据,生成新文件。
  • 优势:高写入吞吐(尤其HDD/SSD)、适合写多读少场景。
  • 代价:读操作可能需要查多层(需优化),写放大(Compaction带来额外I/O)。

2. SSTable (Sorted String Table)

  • 定义:LSM树在磁盘上的数据存储格式。核心特点:
    • 不可变(Immutable):文件生成后不再修改。
    • 按键有序:数据按Key排序存储,支持高效范围查询。
    • 分块索引:含索引块(快速定位Key)、布隆过滤器(加速Key不存在判断)。
  • 合并机制:多个SSTable通过归并排序合并成更大的新文件,删除旧数据。

3. LevelDB

  • 背景:Google开源的单机KV存储引擎(2011年),LSM树的经典实现
  • 设计特点
    • 分层存储(Leveled Compaction)
      • Level 0:MemTable刷盘后的SSTable(文件间Key可能重叠)。
      • Level 1+:每层内SSTable全局有序,文件间Key不重叠。
    • 简单轻量:C++实现,无分布式功能,适合嵌入式场景。
  • 局限
    • 单线程Compaction可能阻塞写入。
    • 功能较基础(如不支持多线程合并、压缩算法单一)。

4. RocksDB

  • 背景:Facebook基于LevelDB深度优化的开源引擎(2013年),工业级增强版
  • 核心改进
    特性LevelDBRocksDB
    Compaction单线程多线程并行
    写入优化单一MemTable支持多MemTable(Pipeline写入)
    压缩算法仅SnappyZlib, ZSTD, LZ4, BZip2等
    事务支持悲观/乐观锁、WriteBatch增强
    增量备份支持
    布隆过滤器单层多层、格式可定制
    SSD优化基础精细控制I/O、限速
  • 应用场景
    • 数据库底层存储(MySQL的MyRocks、MongoDB、TiKV)。
    • 消息队列(Apache Pulsar)、图数据库(Dgraph)。

关键关联总结

设计思想
磁盘存储格式
优化实现
工业级特性
分层合并
LSM 树
LevelDB/RocksDB
SSTable
RocksDB
多线程Compaction
事务支持
丰富API
Leveled Compaction

常见问题

Q: LSM树为何写快读慢?
A:写入只需顺序写MemTable;读取可能需要查MemTable + 多层SSTable(需BloomFilter/索引优化)。

Q: Compaction为何必要?
A:清理过期数据、合并碎片文件、减少读放大,但会引发写放大(I/O与CPU消耗)。

Q: LevelDB vs RocksDB如何选?
A:

  • LevelDB:轻量级、代码易读、适合学习或简单场景。
  • RocksDB:生产环境首选,高并发、SSD优化、企业级功能完备。

程序员面试资料大全|各种技术书籍等资料-1000G
Git高速下载

在这里插入图片描述

http://www.dtcms.com/a/313047.html

相关文章:

  • Linux 内存调优之如何限制进程、系统级别内存资源
  • 第二章 矩阵
  • 剥离petalinux设备树,使用 dtc 单独编译
  • 主流身份认证协议都有哪些?应用场景有何区别?
  • BRL贝叶斯规则列表
  • 《C++》stack容器详解
  • 块三角掩码(Block-Triangular Masking)
  • Remix框架:高性能React全栈开发实战
  • 安卓加固脱壳
  • js--2048小游戏
  • C++23 Concepts:用类型约束重构泛型编程的终极方案
  • 构造类型--结构体,共同体联合体,枚举
  • 【AI论文】Rep-MTL:释放表征级任务显著性在多任务学习中的潜力
  • 影响人类发音的疾病类型种类和数据集
  • CMake 命令行参数完全指南(2)
  • 界面规范4-按钮
  • All the Mods 9 - To the Sky - atm9sky 局域网联机报错可能解决方法
  • spring batch处理数据模板(Reader-Processor-Writer模式)
  • 【Mysql】日志--错误日志、二进制日志、查询日志、慢查询日志
  • Timer实现定时调度的原理是什么?
  • Python开发环境PyCharm下载与安装
  • RSA 解密逻辑
  • Spring lookup-method实现原理深度解析
  • 悬挂的绳子,它的函数方程是什么样子的?
  • 嵌入式学习日志——数据结构(一)
  • RAG与智能体技术全景解析:架构革新、场景落地与未来趋势
  • 【前端:Html】--1.2.基础语法
  • Redis面试精讲 Day 10:Redis数据结构底层实现原理
  • RK3568 AB分区+OTA升级(Linux)
  • 在微信小程序中使用本地存储的方法