文章目录

  • LSM 问题背景
  • MatrixKV 设计细节
    • 整体架构介绍
    • Matrix Container介绍
      • Receiver
      • RowTable
      • Compactor
      • Space management
    • Column Compaction介绍
    • 对于Column Compaction的总结
    • 读加速 Cross-row Hint Search
    • MatrixKv 写入完整流程
    • MatrixKV 读取完整流程
  • MatrixKV 性能
  • 总结

这篇论文大家可能不了解,但是"华为天才少女 年薪150w" 那个热搜女孩大家应该听过。这里分享的这一篇论文是ATC’20 存储技术相关的顶会今年收录的一篇,她是一作;去年她的一篇GearDB: A GC-free Key-Value Store on HM-SMR Drives with Gear Compaction 被FAST’19 收录,她也是一作。

她之前的相关论文并没有再搜,但从这两篇顶会以一作的身份来看,她本身的实力不言而喻。存储技术的顶会大家可以看看相关的官网数据,国内被录入的基本都是顶级互联网公司级的团队产出 以及 知名教授带领的C9 top学校团队。她以一作 贡献最大的身份被录入,这样的年薪是实至名归的(国内还是需要留住优秀人才的)。

当然,她所做的技术是数据库/存储相关的,同样是TOP级公司极为看重的核心技术,也才会有这样的优质待遇。

回到今天要讨论的论文 : MatrixKV:Reducing Write Stalls and Write Amplification 上。

ps:本篇并非论文翻译,下文的组织形态是比较简化的,感觉可能会有信息缺失的同学可以直接看论文。
该论文是基于 rocksdb 5.18.3 版本实现的,源代码MatrixKV-github

关于rocksdb compaction的一些基础知识可以参考这两篇。这是详解,会涉及到源码层级的分析。
1. SST文件详细格式源码解析
2. Compaction 完整实现过程 概览

LSM 问题背景

本篇论文关注的问题背景是LSM-tree 带来的 write-stall 以及 写放大问题。
都是针对LSM的老生常谈的问题,关于write-stall 直接参考SILK- Preventing Latency Spikes in Log-Structured Merge Key-Value Stores 中的Latency Spike 在LSM-tree中的体现即可。

其中Write-Stall的主体原因还是I/O资源的竞争,Higher-level compaction 与更高优先级的Flush和L0->L1 compaction的I/O资源进行竞争,导致更高优先级的internal 操作无法及时完成,最终体现在客户端的操作就是Write-stall或者高长尾延时。 而造成write-stall 的主体compaction就是 L0->L1 的compaction过程,这个过程L0重复的key最多,但却只有一个compaction 线程来做(传统LSM 在更高层中 sst文件之间以及之内不允许又重叠key),所以效率也很低,这就在大压力的场景下很大概率造成write-stall。

写放大问题简要概述一下,在PebblesDB Building Key-Value Stores using FLSM-Tree(Fragmented) 中的背景描述也有说。
如下图

L1->L2 compaction的过程中,选择一部分L1的sst文件,一部分L2的sst文件,compaction之后又写入到了L2;这样下一次 又调用的 L1->L2 的compaction 可能又会将之前的写入的sst文件的key-value读出来,重新合并排序,再次写入到L2。这样,很多key-value不断的被读写,而自己本身并没有发生变化。随着LSM 层数的增加,读写放大的比例会越来越大 WAM = AF *n(wam 是写放大的倍数,AF是写放大的系数,n是LSM的层数)。

这就是在Level compaction过程中出现的读写放大,带宽资源有限的情况下用户态吞吐会被严重限制。

MatrixKV 的出现背景 就是想要在Write stall 和 写放大上 进行一些优化,重心需要放在L0->L1的compaction速度慢问题之上。直接办法是变更存储介质(NVM-PMEM),只变更存储介质,仍然会有write-stall的问题,毕竟L0->L1 compaction速度提升不上来。这里我比较好奇的是论文中并没有提到subcompaction机制,rocksdb的subcompaction机制本身也是在L0->L1 compaction速度慢的情况下按照sst文件粒度拆分成多个compaction线程并发来做。

总之,只变更存储介质为更高性能的(NVM-PMEM)是不够的,论文中有Novel-LSM 的数据可以看到还是有大量write-stall。所以还需要变更L0->L1的数据结构,实现算法层的加速。至于,降低写放大,通过这个公式 WAM = AF *n,论文中直接将 Level层数减少,比如原来的6层,减少为4层,并增大每一层的容量(这个优化略显尴尬

LSM 优化系列(六)-- 【ATC‘20】MatrixKV : NVM 的PMEM 在 LSM-tree的write stall和写放大上的优化相关推荐

  1. STM32G0系列将内部FLASH作为EEPROM使用,巧妙编程,可延长Flash擦写寿命上百倍,已用于量产产品。

    STM32内部flash可以用作EEPROM,用于保存用户数据. 1.一般来说,stm32的flash擦写寿命只有10万次,如果在同一位置擦写过于频繁,在产品质保期内FLASH就会达到寿命极限,保存数 ...

  2. 对于LSM Tree写放大问题的一些浅薄学习

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权. 文章目录 引言 性能评估 优化方案 ...

  3. LSM 优化系列(四) -- Rocksdb和Lethe 对Delete问题的优化

    文章目录 前言 1. 问题背景 2. 问题复现 3. Rocksdb 的 Delete-Aware 优化 3.1 可配置的 Delete-Aware调度 3.2 Compaction 逻辑对 dele ...

  4. LSM 优化系列(二)-- dCompaction: Speeding up Compaction of the LSM-Tree via Delayed Compaction

    文章目录 背景描述 dCompaction设计 触发条件 VCT 触发VT 合并的条件 VSMT 测试数据 优化的重心集中在减少写放大上,同时将读性能维持在和rocksdb 原生读性能接近,优化思想是 ...

  5. LSM优化系列(五) -- 【SIGMOD‘19】X-engine 在电商场景下针对大规模事务处理的优化-- 强者恒强啊

    文章目录 1. 前言 2. 论文结构 2.1 海啸 问题 2.2 泄洪 问题 2.3 洋流 问题 3. X-engine架构 3.1 读路径优化 概览 3.2 写路径优化概览 3.3 Flush和Co ...

  6. SSE图像算法优化系列十四:局部均方差及局部平方差算法的优化。

    关于局部均方差有着较为广泛的应用,在我博客的基于局部均方差相关信息的图像去噪及其在实时磨皮美容算法中的应用及使用局部标准差实现图像的局部对比度增强算法中都有谈及,即可以用于去噪也可以用来增强图像,但是 ...

  7. 赵强老师:Oracle数据库系列课程(20)优化数据库-赵强老师-专题视频课程

    赵强老师:Oracle数据库系列课程(20)优化数据库-99人已学习 课程介绍         从零开始学习Oracle数据库,让学员读整个Oracle数据库有个全面清除的认识和学习. 课程收益    ...

  8. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  9. 百度App网络深度优化系列(一):DNS优化

    一.前言 网络优化是客户端几大技术方向中公认的一个深度领域,所以百度App给大家带来网络深度优化系列文章,其中包含系列<一>DNS优化,系列<二>连接优化,系列<三> ...

最新文章

  1. Struts2和SpringMVC简单配置以及区别总结
  2. 值得推荐!安利8个小众好用的宝藏工具,解决各种需求
  3. 阿里云配置服务器报:bind: cannot assign requested address
  4. 交互设计师到底是干嘛的
  5. 刘志明 | 知识图谱及金融相关
  6. IllegalStateException: Error reading delta file hdfs://xxx/spark/xx/state/0/11/1.delta
  7. 有关CentOS的常见问题
  8. 多线程依次接收信息并发送
  9. pwm 正弦波_正弦波逆变器和修正波逆变器的区别
  10. 李宏毅机器学习——无监督学习(四)
  11. 将Web项目War包部署到Tomcat服务器基本步骤
  12. 从零学光学设计 zemax中的三种优化
  13. 微服务下蓝绿发布、滚动发布、灰度发布等方案
  14. 电脑桌面计算机图标在哪,电脑计算机图标在哪
  15. 西农大 Java 实验四 第三题
  16. java迷宫鼠_C++ 迷宫算法(迷宫老鼠)
  17. 基于华为巴龙MH5000-31 5G工业/商业模组开发(二)
  18. SAP-ABAP-小计收起/折叠明细项目-只显示小计内容
  19. Linux 网络协议栈开发—— 二层桥实现原理
  20. linux 解锁用户被锁

热门文章

  1. L1-009. N个数求和
  2. 计算机艺术未来发展趋势,计算机技术对现代艺术设计的影响
  3. 24点c语言程序,C语言解24点游戏程序
  4. python拟合求参_机器学习作业(四)神经网络参数的拟合——Python(numpy)实现
  5. 记录值上调10_「阴阳师」10月16日维护更新公告,海国迷踪,迷影重重
  6. 高精度运算(C++实现)
  7. Windows10下python-pcl的安装步骤说明,亲测ok
  8. Python,OpenCV使用KNN来构建手写数字及字母识别OCR
  9. opencvmediapipe 人脸检测+摄像头实时
  10. 网络流24题(2) P4014 分配问题