读WiscKey: Separating Keys from Values in SSD-conscious Storage

news2025/7/19 7:14:01

在我看来本论文的主要贡献在于相对减轻了传统LSM compact所带来的写放大问题。其核心设计在于使key、value分离以及gc只保持有效数据

key、value分离

作者对于key、value分离策略的观察主要来自于排序是以往LSM性能消耗最大的地方,但是真正影响排序的与占用大储存的value没有什么关系,那么能不能将key和value分开储存,那么就可以仅仅只排序key了呢

具体作者是将key和value所在的地方储存到LSM tree,而value就储存到vlog文件中。那么每次搜索数据的时候就可以先搜索LSM tree找到value的地址,然后在vlog文件中找到对应的值。

当然这和传统LSM充分利用顺序读取不一样,这是作者基于SSD的随机读写性能已经比较强的情况下作出的适应性改进

此外作者为了防止key可能丢失,还在vlog中储存了value的key

gc保持有效数据

gc维护了一个有效数据的区间,无论是搜索还是释放空间都是在这个区间中进行的。这样就免去了合并、排序的大量消耗性能的过程,并且还不需要刻意取出所有有效的key,然后对比对应的value是不是在,不在就删除这种重量级的gc

大概过程是gc从区间找到有效的数据然后添加到空间尾部,最后更新区间范围,那么在这个区间之外的就是无效数据了。这样的过程也难怪叫做gc,确实和标记—整理十分类似

并且为了防止gc过程中突然crash,作者还确保新添加的有效值和更新的区间指针持久化后才真正释放空间

范围查找

范围查找我认为是这篇论文的弱点所在,作者虽然是通过充分利用SSD并行度来解决只能取key然后一次次查找value,最后得到一个范围结果

在这里插入图片描述

但是从图中仍然可知即使32线程在1kb请求大小的时候,性能仍然非常低。并且即使32线程取得了不弱于传统LSM范围读取的性能,那这样对于并行资源的消耗也是相当巨大的

写入

  1. 追加value到vlog
  2. 插入key以及value地址到LSM tree

作者还在这个写入过程做了一个优化,就是缓存要写入的数据直到到达阈值才一次写入

Ref

  1. https://www.usenix.org/system/files/conference/fast16/fast16-papers-lu.pdf

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

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

相关文章

推荐五款宝藏软件,身为宝藏男孩和宝藏女孩的你,不试一下吗?

今天带来五款宝藏软件,身为宝藏男孩和宝藏女孩的你们,不试一下吗? 1.EPUB阅读器——Starrea Starrea 是一款Windows平台的EPUB电子书阅读器,它虽然只支持一个平台,但是提供了很多额外的功能,其中包括 文…

Java之线程总结一

Java之线程总结一 线程实现方式 官方文档说的是实现线程的方式有两种;本质上只有一种,就是构造Thread类,而实现线程执行单元的方式有两种: 继承Thread类,重写run方法;实现Runnable接口的run方法&#xf…

RHEL8.5解决libgdiplus绘图问题

最近有客户服务器使用RHEL8.5了。由于之前测试和编译的dotnetcore在Linux下绘图包libgdiplus都是在centos7.6编译的。把CentOS7.6编译的二进制程序之前试CentOS7.9使用没问题,然后RHEL8.5无法正常绘图。由于之前搞统信那些系统发现了包得在对应系统源码编译才行。所…

Java web基于SSM的停车场管理系统的设计与实现

1,项目介绍 Java web基于SSM的停车场管理系统拥有三种角色,分别为用户,管理员,超级管理员。 停车位管理(管理员,超级管理员)停车卡管理(用户,管理员,超级管…

Vue3视频播放器组件Vue3-video-play入门教程

Vue3-video-play适用于 Vue3 的 hls.js 播放器组件 | 并且支持MP4/WebM/Ogg格式。 1、支持快捷键操作 2、支持倍速播放设置 3、支持镜像画面设置 4、支持关灯模式设置 5、支持画中画模式播放 6、支持全屏/网页全屏播放 7、支持从固定时间开始播放 8、支持移动端,移动…

pyqt5环境搭建

1、打开Terminal ,用命令pip install pyqt5-tools 或者 pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple安装PyQt5安装成功后就可看到PyQt5版本2、同上方法,继续安装pyqt5-tools扩展工具,里面包括了QtDesigner等很好用的工具。3、…

二进制哈希码快速搜索:Multi-Index Hashing

前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 哈希方法通常包含两个部分: 【编码】将元素通过「data-dependent」或「data-independent」的方式映射为二进制…

C变量区域

C语言中有五大内存分区,分别是栈区、堆区、全局区/静态区、常量区和代码区。1.栈区:由编译器自动分配释放,存放函数的参数值、局部变量的值等。当调用函数的时候函数中定义的变量会被加到栈中,当函数离开的时候,被添加…

HTML看这一篇就够啦,HTML基础大全,可用于快速回顾知识,面试首选

HTML 1 基础 1.1 DOCTYPE <!DOCTYPE> 文档类型声明&#xff0c;作用就是告诉浏览器使用哪种HTML版本来显示网页。 <!DOCTYPE html> 这句代码的意思是: 当前页面采取的是 HTML5 版本来显示网页. 注意: 声明位于文档中的最前面的位置&#xff0c;处于 标签之前。 …

互联网新理念,对于WEB 3.0 你怎么看?

WEB 3.0 这个名词走进大众视野已经有一段时间了&#xff0c;也曾在各个圈子里火热一时&#xff0c;至今各大互联网企业任旧在 WEB 3.0 上不断探索。但关于 WEB 3.0 是什么这个问题&#xff0c;其实大部分人都没有一个比较明确的认知&#xff0c;包括区块链和元宇宙等相关行业的…

【设计模式】备忘录模式和迭代器模式

备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式&#xff0c;也叫快照&#xff08;Snapshot&#xff09;模式。 在 GoF的《设计模式》⼀书中&#xff0c;备忘录模式是这么定义的&#xff1a;…

【Spring6】面向切面:AOP

5.1、场景模拟 搭建子模块&#xff1a;spring6-aop 5.1.1、声明接口 声明计算器接口Calculator&#xff0c;包含加减乘除的抽象方法 public interface Calculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}5.1.2、创建…

计算机视觉与深度学习 | Visual ChatGPT:微软开源视觉(图文)聊天系统——图像生成、迁移学习、边缘检测、颜色渲染等多功能(附代码下载链接)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== Visual ChatGPT: Talking, Drawing and Editing with V

LeetCode 134. 加油站(函数图像法 / 贪心)

题目&#xff1a; 链接&#xff1a;LeetCode 134. 加油站 难度&#xff1a;中等 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中…

CentOS系统变化看开源演进

CentOS社区还存不存在&#xff1f;CentOS项目还存不存在&#xff1f;众多CentOS用户将何去何从&#xff1f;伴随CentOS停更&#xff0c;大家可能会有这样那样的疑问&#xff0c;今天针对以上问题&#xff0c;我来进行一一解答。CentOS实际上有两个变种&#xff0c;一个叫做Cent…

C#和.net框架之第二弹

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、什么是标示符&#xff1f;二、标示符命名规则三、c#命名规范是什么&#xff1f;四、c#命名规范内容五、关键字的用处注意&#xff1a;六、Main方法是干什么的…

12 | 架构案例:基于OAuth 2.0/JWT的微服务参考架构

12 | 架构案例&#xff1a;基于OAuth 2.0/JWT的微服务参考架构 架构图 令牌的校验和转换&#xff0c;将前端传递过来的 OAuth 2.0 访问令牌&#xff0c;通过调用 IDP 进行校验&#xff0c;并转换为包含用户和权限信息的 JWT 令牌&#xff0c;再将 JWT 令牌向后台微服务传递。…

New Bing乘上ChatGPT的东风,日活突破1亿

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 注&#xff1a;本文由松松杰哥缮写&#xff0c;ChatGPT进行了补充和润色&#xff0c;你们可以看看本文和其他文有什么区别&#xff1f; 微软今天宣布&#xff0c;New Bing乘上ChatGPT的东风&#xf…

【设计模式】中介者模式和观察者模式

中介者模式 中介模式的英⽂翻译是 Mediator Design Pattern。 在 GoF 中的《设计模式》⼀书中&#xff0c;它是这样定义的&#xff1a; Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects …

C#:Krypton控件使用方法详解(第十五讲) ——kryptonBorderEdge

今天介绍的Krypton控件中的kryptonBorderEdge。下面介绍控件的外观属性如下图所示&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;UseWaitCursor属性&#xff1a;表示鼠标在控件中等待时&#xff0c;以…