SpanDB: A Fast, Cost-Effective LSM-tree Based KV Store on Hybrid Storage——论文泛读

FAST 2021 Paper 论文阅读笔记整理

问题

键值(KV)存储支持许多关键的应用和服务。它们在内存中执行快速处理,但通常受到I/O性能的限制。最近出现的高速NVMe SSD推动了新KV系统设计,以利用其低延迟和高带宽。

挑战

当前基于LSM树的KV存储未能充分发挥NVMe SSD的全部潜力。例如,在Optane P4800X上部署RocksDB,相对于SATA SSD,对于50%写入的工作负载,吞吐量仅提高了23.58%。

  • 常见KV存储设计的I/O路径,未充分利用超低延迟的NVMe SSD,特别是对于小写入。例如,通过ext4进行操作的延迟比通过Intel SPDK接口[37]高6.8-12.4倍。这特别影响预写式日志(WAL)[52],WAL对数据耐久性和事务的原子性至关重要,它位于写入的关键路径上,容易成为瓶颈[31]。

  • 现有的KV请求处理假定设备速度较慢,工作流设计嵌入了高软件开销,如果切换到基于轮询的快速I/O,则浪费CPU周期。

  • 新的NVMe接口带有访问限制(例如需要将整个设备绑定为SPDK访问,或者将线程绑定在核心上)。这使得KV设计在利用高端SSD进行不同类型的KV I/O时变得更加复杂,并使同步请求处理变得低效。

  • 像Optane这样的顶级SSD对于大规模部署来说成本较高。由于大规模、写入密集型的KV存储不可避免地包含大量的冷数据,将所有数据托管在这些相对较小且昂贵的设备上,可能超出预算。

本文方法

我们提出了SpanDB,一种基于LSM树的KV存储,将流行的RocksDB系统调整为利用高速SSD的选择性部署。

  • 通过整合一个相对较小但速度较快的磁盘(SD),扩展了对最新数据的写入和读取的处理,同时在一个或多个更大更便宜的容量磁盘(CD)上扩展数据存储。将大部分数据托管在更便宜且更大的SSD上,将LSM树的顶层移到更小更快的NVMe SSD上。

  • 通过SPDK实现快速且并行的访问,以更好地利用SD,绕过Linux I/O堆栈,优化高速的WAL写入。将预写式日志(WAL)移到更小更快的NVMe SSD上。

  • 设计了基于轮询I/O的异步请求处理流水线,去除了不必要的同步,将I/O等待与内存处理重叠,并自适应地协调前台/后台的I/O。

  • 根据实际的KV工作负载战略性地和自适应地对数据进行分区,积极地利用CD的I/O资源,特别是带宽,以缓解写放大。

开源代码:https://github.com/SpanDB/SpanDB

评估显示,SpanDB同时提高了RocksDB的吞吐量高达8.8倍,并将其延迟降低了9.5-58.3%。与为高端SSD设计的KVell相比,SpanDB在更便宜的存储配置下实现了96-140%的吞吐量,延迟降低了2.3-21.6倍。

实验

实验环境:2个20核Xeon Gold 6248处理器,256GB DRAM,CentOS 7.7

数据集:YCSB[16]、LinkBench[6]

实验对比:吞吐量、平均延迟、尾延迟、CPU利用率

总结

针对NVMe SSD和SATA SSD结合的异构存储系统,优化基于LSM-tree的KV存储。作者提出将大部分数据存储在SATA SSD上,将LSM树的顶层和预写式日志(WAL)存储在NVMe SSD上;通过SPDK实现快速且并行的访问,绕过Linux I/O堆栈,优化WAL写入;设计基于轮询I/O的异步请求处理流水线,去除了不必要的同步,将I/O等待与内存处理重叠,并自适应地协调前台/后台的I/O;根据KV工作负载自适应地对数据分区,利用SATA SSD的带宽缓解写放大。

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

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

相关文章

gorm+mysql查询/修改json列相关操作汇总

目录 具体操作 1,查询JSON段落指定key的值是否有等于value的 或 指定keyvalue的数据记录 2,查询JSON段落中price>19的记录 3,查询JSON段中key为k0的记录 4、JSON段落中提取指定键值对到指定结构 5,查询JSON数组是否包含…

ANN(MLP) 三种预测

目录 介绍: 一、Mlp for binary classification 数据: 模型: 预测: 二、Mlp for Multiclass Classification 数据: 模型: 预测: 三、MLP for Regression 数据: 模型&a…

中科大计网学习记录笔记(五):协议层次和服务模型

前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…

《最新出炉》系列入门篇-Python+Playwright自动化测试-10-标签页操作(tab)

1.简介 标签操作其实也是基于浏览器上下文(BrowserContext)进行操作的,而且宏哥在之前的BrowserContext也有提到过,但是有的童鞋或者小伙伴还是不清楚怎么操作,或者思路有点模糊,因此今天单独来对其进行讲…

苹果的ipad可能会缓存vue项目的数据或者pinia数据

如果你发现开发的vue项目在ipad上出现了异常,比如数据出现NaN的情况,或者computed计算属性没生效,或者pinia里面的数据没生效,可能就是ipad浏览器safari缓存了数据导致的,只需要清空safari里面缓存的数据就可以了&…

开始学习第三十天

最近天气有点不太好 都是雨雪 今天也就正式学了第一个月咯 希望以后接着加油 今天是小年 大家小年快乐呀 明天要去奶奶家 在那边就没办法学习了 等年三十之后回来接着学习!

RT-Thread线程管理(使用篇)

layout: post title: “RT-Thread线程管理” date: 2024-1-26 15:39:08 0800 tags: RT-Thread 线程管理(使用篇) 之后会做源码分析 线程是任务的载体,是RTT中最基本的调度单位。 线程执行时的运行环境称为上下文,具体来说就是各个变量和数据&#xff0c…

Kotlin-集成SpringBoot+MyBatis+代码生成器

目录 一、相关版本 二、Maven因引入相关依赖 三、SpringBoot配置文件 四、代码生成工具 五、实现用户服务模块案例 1、Controller 2、Service 3、Entity 4、Mapper 5、接口测试 一、相关版本 工具版本Idea2022.3.2Springboot2.7.12MyBatis3.5.3.1MySQL8.0.28JDK1.8 …

Python详细教程

一、Python简历 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 Python 是一种解…

20240203进程间通信的7种方式

内核提供的原始通信方式有三种: ①无名管道:没有名字的管道,是一个特殊的文件,并且存储在内存上,不在文件系统中展示,无名管道打开后,会返回两个文件描述符,一个是读端,…

MySQL原理(五)事务

一、介绍: 1、介绍: 在计算机术语中,事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。 2、事务的4大特性 原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性…

LaTeX表格:合并单元格、文字旋转90度并居中

在LaTeX表格中,如何使用\multirow合并单元格,并将单元格中的文字旋转九十度,并且居中呢? 首先引入graphicx、multirow和array包: \usepackage{graphicx} \usepackage{multirow} \usepackage{booktabs}然后定义一种新…

类银河恶魔城学习记录1-4 PlayerJumpState基本源代码 P31

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; u…

DoubleEnsemble:基于样本重加权和特征选择的金融数据分析方法

现代机器学习模型(如深度神经网络和梯度提升决策树)由于其提取复杂非线性模式的优越能力,在金融市场预测中越来越受欢迎。然而,由于金融数据集的信噪比非常低,并且是非平稳的,复杂的模型往往很容易过拟合。…

「递归算法」:Pow(x,n)

一、题目 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000示例 2: 输入:x 2.10000, n 3 输出:9…

使用Arcgis对欧洲雷达高分辨率降水数据重投影

当前需要使用欧洲高分辨雷达降水数据,但是这个数据的投影问题非常头疼。实际的投影应该长这样(https://gist.github.com/kmuehlbauer/645e42a53b30752230c08c20a9c964f9?permalink_comment_id2954366https://gist.github.com/kmuehlbauer/645e42a53b307…

个人建站前端篇(三)环境变量配置

在项目根目录下新建.env.development和.env.production文件,里面配置环境变量 .env.development内容如下 # 页面标题 VITE_APP_TITLE 云风网 # 开发环境配置 VITE_APP_ENV development # 开发环境 VITE_APP_BASE_API /api # 是否启用代理 VITE_HTTP_PROXY tru…

深入了解 Ansible:全面掌握自动化 IT 环境的利器

本文以详尽的篇幅介绍了 Ansible 的方方面面,旨在帮助读者从入门到精通。无论您是初学者还是有一定经验的 Ansible 用户,都可以在本文中找到对应的内容,加深对 Ansible 的理解和应用。愿本文能成为您在 Ansible 自动化旅程中的良师益友&#…

故障诊断 | 一文解决,LSTM长短期记忆神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现LSTM长短期记忆神经网络故障诊断 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

Skywalking 学习之ByteBuddy 方法执行时间监控

Skywalking git: GitHub - apache/skywalking: APM, Application Performance Monitoring System 集成入门: 10分钟3个步骤集成使用SkyWalking - 知乎 下面自己学习了一下ByteBuddy的用法,实战了一下: 入门教程: B…