Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记
Introduction
主流的基于LSM树的KV存储都在两方面进行权衡,一方面是写入更新的开销,另一方面是查询和存储空间的开销。但它们都不是最优的,问题在于这些存储系统在LSM树的每一个level上都采用相同且开销很大的合并策略。论文中提出了Lazy Leveling和Fluid LSM-tree来解决这个问题,同时提出了Dostoevsky模型。
问题的根源
- 写入更新:写入更新的开销主要来自于之后涉及写入的项的合并操作,虽然更大的level上合并操作的代价越大,但是更大的level上合并操作的发生频率更低,因此写入更新在每一个level上花费的代价均等。
- 点查找:可以最小化所有bloom过滤器的FPR之和,以此来减小点查找的代价,当然这也意味着对更小的level的访问频率可能会呈指数级别的下降,因此大多数点查询最终发生在最大的level上。
- 大范围查找:不同level的容量呈指数级别的放大,因此最大的level包含了大多数的数据,那么就更可能包含给定范围的数据,所以大多数大范围查询最终发生在最大的level上。
- 小范围查找:小范围查找只涉及每个run中的一个block,由于所有level上的run的最大个数是确定的,因此小范围查找在每一个level上花费的代价均等。
- 空间放大:最坏情况下,除了最大level外的所有level中的key在最大level中都有重复,因此空间放大主要来自于最大的level。
DESIGN SPACE AND PROBLEM ANALYSIS
tiering和leveling的开销对比如下图(图来自论文)所示:
写入更新
- tiering:一个项在一个level只涉及一次合并操作,花费O(1)时间,一共有L个level,一次合并操作中一次I/O读取一个block涉及B个项,均摊到每个项的开销为O(L/B)。
- leveling:上一个level的每一个run移动到当前level都会触发一次合并操作,因此一个项在一个level上平均会涉及T/2次合并操作,其他分析同tiering,开销为O(L·T/B)。
点查询
最坏情况为零结果点查询。
- tiering:对于零结果点查询,开销来自于当一个run上的bloom过滤器有误报时产生的一次I/O(读取这个run),每个level中最多可能有T个run,一共有L个level,bloom过滤器的FPR是e^(-M/N),因此开销为O(e^(-M/N)·L·T)。
- leveling分析同tiering,开销为O(e^(-M/N)·L)。
当然Monkey模型在不同的level上设置不同的bloom过滤器,可以将点查询的开销优化为上图中的开销。
空间放大
1到L-1的level包含了LSM树1/T的容量,第L个level包含了LSM树(T-1)/T的容量。
- tiering:最坏情况为第L个level中的每个run都包含相同的key,1到L-1的level中的key在第L个level中的每个run中都有重复,因此空间放大为O(T)。
- leveling:最坏情况为1到L-1的level中的key在第L个level中都有重复的key,因此空间放大为O(1/T)。
优化的空间:减少不必要的合并操作,点查询、范围查询和空间放大的开销主要取决于最大的level,而写入更新在每一个level上的开销均等。因此较小的level上的合并操作显著增大写入更新的开销,而对于减少点查询、范围查询和空间放大的开销却没有特别多的帮助。
Lazy Leveling
主要结构:在最大的level采用leveling的合并策略,在其余level采用tiering的合并策略。
与leveling的对比:
- 提升了更新写入的性能
- 点查询、大范围查询和空间放大的复杂度相同
- 小范围查询的性能相似
tiering、leveling、lazy leveling三者开销对比如下图(图来自论文)所示:
- 点查询的分析涉及bloom过滤器的设置,就是个数学问题,详见论文附录。
- 写入更新:1到L-1的level的写入更新开销分析同tiering,第L个level的写入更新开销分析同leveling。
- 空间放大:分析同leveling。
Fluid LSM-Tree
最大的level最多有Z个run,其余level最多有K个run,每一个level有个active run用于合并来自上一个level的run,且这个active run有容量限制,最大的level限制为T/Z,其余level限制为T/K。当一个level中的所有run的容量总和超过了当前level的限制,这些run合并入下一个level。
开销如下图(图来自论文)所示:
- 点查询的分析涉及bloom过滤器的设置,就是个数学问题,详见论文附录。
- 写入更新:分析同tiering。
- 空间放大:最坏情况是1到L-1的level的key均在第L个level有重复,第L个level中有Z-1个run包含的全部都是重复的key。
Dostoevsky模型
写入更新的开销为W,零结果点查询的开销为R,有结果点查询的开销为V,范围查询的开销为Q,通过统计以上四种操作在工作负载中的比例,赋予这四种开销权重系数w、r、v、q,另外计从存储中读取一个block的时间为Ω。我们可以得到吞吐τ的计算公式为:
τ = Ω^-1 · (w · W + r · R + v · V + q · Q)^-1
在实际运行时可以通过对K、Z、T三个参数的动态调整来使得吞吐达到最优。
389 Love u
Dostoevsky: Better Space-Time Trade-Offs for LSM-Tree Based Key-Value Stores via Adaptive Removal of Superfluous Merging 阅读笔记的更多相关文章
- LSM Tree存储组织结构介绍
LSM Tree(Log Structured Merge Trees)数据组织方式被应用于多种数据库,如LevelDB.HBase.Cassandra等,下面我们从为什么使用LSM tree.LSM ...
- LSM Tree解析
引言 众所周知传统磁盘I/O是比较耗性能的,优化系统性能往往需要和磁盘I/O打交道,而磁盘I/O产生的时延主要由下面3个因素决定: 寻道时间(将磁盘臂移动到适当的柱面上所需要的时间,寻道时移动到相邻柱 ...
- LSM Tree 学习笔记——本质是将随机的写放在内存里形成有序的小memtable,然后定期合并成大的table flush到磁盘
The Sorted String Table (SSTable) is one of the most popular outputs for storing, processing, and ex ...
- LSM Tree 学习笔记——MemTable通常用 SkipList 来实现
最近发现很多数据库都使用了 LSM Tree 的存储模型,包括 LevelDB,HBase,Google BigTable,Cassandra,InfluxDB 等.之前还没有留意这么设计的原因,最近 ...
- Log-Structured Merge Tree (LSM Tree)
一种树,适合于写多读少的场景.主要是利用了延迟更新.批量写.顺序写磁盘(磁盘sequence access比random access快). 背景 回顾数据存储的两个“极端”发展方向 加快读:加索引( ...
- 数据映射-LSM Tree和SSTable
Coming from http://blog.sina.com.cn/s/blog_693f08470101njc7.html 今天来聊聊lsm tree,它的全称是log structured m ...
- 【万字长文】使用 LSM Tree 思想实现一个 KV 数据库
目录 设计思路 何为 LSM-Treee 参考资料 整体结构 内存表 WAL SSTable 的结构 SSTable 元素和索引的结构 SSTable Tree 内存中的 SSTable 数据查找过程 ...
- 目标提取深度神经网络分析权衡 trade offs
RCNN: 直接使用object proposal 方法得到image crops 送入神经网络中,但是crops 的大小不一样,因此使用 ROI Pooling,这个网络层可以把不同大小的输入映射到 ...
- L2M-GAN: Learning to Manipulate Latent Space Semantics for Facial Attribute Editing阅读笔记
L2M-GAN: Learning to Manipulate Latent Space Semantics for Facial Attribute Editing 2021 CVPR L2M-GA ...
随机推荐
- c# AutoMapper 使用方式和再封装
安装方式:使用vs自带的nuget管理工具,搜索AutoMapper ,选择第一个安装到你的项目即可. 我从网上找了一些资料, 参考网址:http://blog.csdn.net/csethcrm/a ...
- R-shiny服务器安装及配置
R的shiny 服务器管理-入门http://www.bio-info-trainee.com/1683.html sudo systemctl start shiny-serversudo syst ...
- kafka connect 使用说明
KAFKA CONNECT 使用说明 一.概述 kafka connect 是一个可扩展的.可靠的在kafka和其他系统之间流传输的数据工具.简而言之就是他可以通过Connector(连接器)简单.快 ...
- 18.14 构建Linux根文件系统
18.14.1 Busybox1.7.0之init程序分析 1.读取配置文件 2.解析配置文件 3.执行用户程序(根据配置文件中指定的内容) 配置文件: 1.指定应用程序 2.何时执行 busybox ...
- MVC object htmlAttributes,IDictionary<string, object> htmlAttributes 写法
MVC object htmlAttributes:new {style="color:red",width="12px",height="10px& ...
- 招聘IT图书兼职作者(长期兼职)
招聘图书兼职作者(长期兼职),本公司有十多年的计算机图书出版经验,每年出版上百本编程类图书, 和清华大学出版社 电子工业出版社 机械工业出版社都有很好的合作.你可以不用按时上线,不用天天被boss盯着 ...
- 在linux中输出每个group的用户成员
先提供使用文件一步一步获取相关信息: 1. 获取所有的用户: awk -F: '{print $1 > "1.txt"}' /etc/passwd 2. 获取每个用户, 及其 ...
- JeeCMS v7 SSRF导致任意文件写入
前言: 学习大佬的思路. from先知社区:https://xz.aliyun.com/t/4809 00X1: 是/ueditor/getRemoteImage.jspx 接口 通过构造upfile ...
- FuzzScanner 信息收集小工具
前言: 该工具集成了各种大牛的工具,比如子域名发现,目录扫描,nmap端口扫描,c段地址查询,端口指纹,以及waf查询 00X1: 安装不推荐git安装,首先直接githup脱下来:git clone ...
- ES timeout 的一些笔记
首先解释下Timeout的作用: 比如,一个search,可能要10分钟才能搜完,那么,es就会等10分钟,直到结果出来.然而,在某些场景下,客户是等不了10分钟的.比如,淘宝搜东西的时候,客户宁可等 ...