来给博客除草了:Learned Indexes for a Google-scale Disk-based Database

news/2023/5/28 8:11:59


1. 引言

这是一篇业界发表在NeurlIPS 2020的Wip论文《Google规模的基于磁盘的数据库的学习索引》。自从学习索引祖师爷Tim Kraska@MIT在SIGMOD 2018发表了第一篇learned index的工作之后,有关学习索引的paper呈现 increasing trend。目前,较多的工作focus在in-memory的层面,直到最近才出现一些工作,研究将学习索引从内存拓展到更远的存储(NVM、SSD、RDMA等)。在内存外学习索引的研究工作中,LSM-tree存储结构是一个令人excited的方向。得益于LSM-tree的设计哲学,LSM-tree中的SSTable组件是read-only的,这种读写特性与学习索引相当契合(学习索引最初也是为了优化读性能而生,原始学习索引并不支持写插入、写更新)。LSM-tree是Google三驾马车之一——BigTable的原型,BigTable是Google研发的分布式海量数据存储系统。Google将学习索引和BigTable进行结合,提升了BigTable的读性能。

2. 问题

作者介绍了目前BigTable中使用索引的现状:

  • 使用B-Tree来确定key存储在哪个data block中
  • 不能使用哈希索引,因为BigTable要支持范围查询,哈希索引无法满足这一需求
  • B-Tree在读取数据时存在一定程度的读放大(为了查找一个key,可能需要几次读取index block,最后再读取data block到内存)

问题:

  • BigTable实例的size很大,所以index没法fit into memory
  • 一台机器上有多个BigTable实例,进一步减少了可用的内存空间
  • 在大数据量面前,可用的cache也会告急
  • 并不是所有BigTable实例都会经常被用到(冷热BigTable)

作者认为,learned index天生的存储优势(smaller index space)有助于缓解cache压力,减少index从外存fetch的次数(尤其有利于减少tail latency),从而减少存储资源的占用,提升BigTable的吞吐量。

祖师爷最早提出的内存学习索引并不适用于BigTable。为此,作者们训练了一种将key映射到BigTable中对应的data block的学习索引结构。

3. 背景

LSM-tree   LSM-tree是一种非常经典、流行的键值存储结构,具有极其高效的写入效率,和较高的读取效率。其介绍参见:

https://blog.51cto.com/u_15127582/2749141

LSM-tree的开源实现:LevelDB

BigTable   BigTable是PB级别的分布式存储系统,支持低延迟、高吞吐。BigTable的结构原型为LSM-tree,谷歌大牛Jeff Dean在十年前将LSM-tree/BigTable的实现开源为LevelDB。

SSTable   SSTable是LSM-tree持久化存储的组件。SSTable存储众多键值对,按key进行排序。为了支持对数据集进行有效的操作,SSTable将数据分割成data block,并保留索引,说明哪些键位于哪些数据块中。读取时可以使用SSTable索引,来找到一个key所在的数据块。

SSTable索引被存储在index block中。索引条目包含了每一数据块的位置和大小。利用这些信息,数据块可以被有效地加载到内存中。索引块被keep in memory,这意味着读取,特别是连续读取,可以通过查询索引块来完成,并且只对请求的数据进行磁盘读取。

SSTable索引是在构建SSTables的同时创建的。在构建过程中,一旦一个数据块被填满,该数据块的代表性item(通常会是该数据块的首个item或者最后一个item)就被添加到索引中。之后,该数据块连同其索引被持久化到文件。

随着SSTable大小的增加,索引块的大小也会增加。为了提高索引效率,SSTable使用两级索引,包括一个0级索引和一个1级索引。0级索引跨越多个索引块,并且总是驻留在内存中,指向1级索引块。第1级索引是一个1级索引块的序列,它指向数据块。当1级索引块所指向的数据块被访问时,一级索引块被加载到内存中。

4. Learned Index for Disk-based Databases

设计   SSTable原本的索引,能够确定所给key存储在哪个data block中。而学习索引根据key预测到其存储的location。作者认为,预测到具体的location对BigTable没用,因为即便预测到了location,还是要把这个location所在的data block加载到内存。因此,作者设计的学习索引。将key映射到data block这个粒度。

但即便是预测到data block,作者认为预测错误的代价大,因为要重新读取周围的data block,这将带来更大的开销(存疑:不可以增加元信息来辅助判断么?)

于是,本文学习索引任务表示为:

训练学习索引f(*),接受key作为输入,以key所在的data block number作为输出。作者在此用了一个trick:在SSTable构建的过程中动态确定学习索引预测的误差值e,以确保<k,v>能够落在f(k)预测的data block内。因此,这就确保了后续访问SSTable时,学习索引总是能给出确切的key所在的data block。

训练   上文提到,学习索引最后预测到的是data block number,但是现在的情况是压根不知道哪个key对应哪个data block number。

因此,换一种方式,先将key映射到字节偏移量。引入下面的记号:

因此,f(k)预测出byte offset之后,就可以得到其存储的data block number为:

(存疑:除以平均block size就能得到准确的block number了么?这里应该有更多的说明或论证)

在预测到block number之后,通过取B[block number],可得到数据在磁盘上存储的位置,进一步将data block读取进内存中。这里B是作者预先处理好的磁盘位置数组。

模型   LR模型(线性回归)。

5. 实验

  • Baseline:two-level index(BigTable’s Default)
  • HW Config:5 tablet servers, each with 4G RAM
  • Trace:256百万行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jm7mXCua-1674032217741)(https://files.mdnice.com/user/10629/f19ab7be-893d-44b7-bc53-58f85473c5ec.png)]

6. 相关工作

  • Bourbon:Bourbon是威斯康星麦迪逊分校Remzi组的工作,发表于2020年的OSDI。Bourbon在WiscKey键值分离的基础上,设计了一种简单而行之有效的学习索引,加速了LSM-tree的查询性能。

    Dai Y, Xu Y, Ganesan A, et al. From {WiscKey} to Bourbon: A Learned Index for {Log-Structured} Merge Trees[C]//14th USENIX Symposium on Operating Systems Design and Implementation (OSDI 20). 2020: 155-171.

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

[双语阅读]奥巴马和女儿同读少年历险小说

Obama reads prize-winning Life of Pi to daughter President Barack Obama answers questions during an interview with Reuters in the Oval Office at the White House in Washington, November 9, 2009. President Barack Obama may be in for a nasty surprise when h

人生,还没困难到非死不可

最近半个月&#xff0c;美国著名的Facebook公司&#xff0c;出了好几件大事。 第一件事&#xff0c;2019年9月19日&#xff0c;一名陈姓中国软件工程师在Facebook加州总部跳楼自杀。 第二件事&#xff0c;2019年10月4日&#xff0c;一名软件工程师在座位上猝死。 第三件事&a…

人性深处的探究与还原-《少年派的奇幻漂流》的四个故事

我找不到一个好的故事&#xff0c;去讲述人性的深处&#xff0c;不是怕肤浅就是怕无深意。又看了一边《少年派的奇幻漂流》&#xff0c;我觉得我找的到了最好的故事&#xff0c;一个227天海上漂流的故事。它能让你体会人性的最深处&#xff0c;并且历久弥新。《少年派的奇幻漂流…

Python如何解决“快手滑块验证码”(4)

前言 本文是该专栏的第32篇,后面会持续分享python的干货知识,记得关注。 很多时候,我们打开一个页面还没开始进行浏览,就跳出一个滑块验证的图片,需要拖到滑块至缺口处,才可以正常浏览。这对于我们正常人浏览页面来说,几乎没什么难度,但是当我们需要用到脚本去实现的时…

机器学习之Adaboost(机器学习技法)

逐步增强法&#xff08;AdaptiveBoosting&#xff09;引例 逐步增强法的主要思想就是拿着一堆很弱的模型可以合成一个非常强大的模型&#xff08;这一点与Bagging十分相似&#xff09;。 一个案例对算法的直观描述 在课堂上老师让小孩去辨识图中那些是苹果&#xff0c;由于小孩…

机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)

不贴图都没人看系列。。。。 线性回归推导&#xff1a; 上图求导部分有误,少些一个转置符号&#xff0c;更正为&#xff1a; 逻辑回归推导&#xff1a; &#xff08;公式中“ln”和“log”表示一个意思&#xff0c;都是以“e”为低的自然对数&#xff09;&#xff1a; 公式…

林轩田机器学习技法第八讲-Adaptive Boosting

上一讲学习了如何使用blending将很多的g结合起来&#xff0c;从而提升模型的整体的效果&#xff0c;已经如何使用boosting来从一个数据集中产生多个不同的新数据集。这一讲来看一下提升算法&#xff0c;主要看Adaptive Boosting这个算法。 我们有一个简单的例子引入&#xff1a…

C语言基于GTK+Libvlc实现的简易视频播放器

小编心语&#xff1a;现下&#xff0c;各种视频播放软件层出不穷&#xff0c;竞争也越演越烈&#xff0c;不知道大家有木有这个想法&#xff0c;小编有时在想能不能做一款属于自己的视频播放器呢~小编特意去实验楼&#xff0c;整理出了这篇关于如何实现简易视频播放器的博文。简…

如何使用亚马逊天气预报做出更好的预测

From resource planning and inventory control to financial management and budgeting, forecasting is used widely across different industries. Businesses invest heavily in hope of ascertaining future trends. The need for accurate and simple forecasting tools

基础计算机算法函数,算法基础入门概述

著名计算机科学家沃思(NiklausWirth)提出一个公式&#xff1a;算法 数据结构 程序&#xff0c;其中算法是程序的灵魂。01算法的定义及特性在数学和计算机科学/算学之中&#xff0c;算法/演算法/算则法(algorithm)为一个计算的具体步骤&#xff0c;常用于计算、数据处理和自动…

神经网络参数量和计算量,神经网络是参数模型吗

神经网络参数如何确定 神经网络各个网络参数设定原则&#xff1a;①、网络节点 网络输入层神经元节点数就是系统的特征因子(自变量)个数&#xff0c;输出层神经元节点数就是系统目标个数。隐层节点选按经验选取&#xff0c;一般设为输入层节点数的75%。 如果输入层有7个节点&…

不容易系列之(3)―― LELE的RPG难题

描述&#xff1a; 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉&#xff0c;这可急坏了众多“Cole”&#xff08;LELE的 粉丝,即"可乐"&#xff09;,经过多方打探&#xff0c;某资深Cole终于知道了原因&#xff0c;原来&#xff0c;LELE最近研究起了…

点亮 LED

1.在 Linux 系统下&#xff0c;一切皆文件&#xff01;应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现。设备文件通常在/dev/目录下&#xff0c;我们也把/dev 目录下的文件称为设备节点。设备节点并不是操控硬件设备的唯一途径&#xff0c;除此之外&…

什么是算法?读完这篇文章你就知道了

算法是指完成一个任务所需要的具体步骤和方法。也就是说给定初始状态或输入数据&#xff0c;经过计算机程序的有限次运算&#xff0c;能够得出所要求或期望的终止状态或输出数据。 编程界的“Pascal之父”Nicklaus Wirth有一句人尽皆知的名言&#xff1a;“算法数据结构程序”…

一次性掌握机器学习基础知识脉络 | 百万人学AI

我们这次分享的题目叫做《机器学习第二次入门》。我先简单自我介绍一下&#xff0c;我现在在做算法工作&#xff0c;在阿里做高级算法专家&#xff0c;主要关注的领域是在推荐系统、机器学习、金融风控这些方面。 本次分享包括三个内容&#xff0c;先讲一下机器学习的知识脉络&…

用手机远程连接阿里云腾讯云服务器的方法

用手机连接云服务器&#xff0c;需要用到ssh远程连接工具&#xff0c;而阿里云app里面就有这个功能。连接起来还是比较方便的。 下面说说如何用ssh工具来连接阿里云服务器和腾讯云服务器。 详细过程也可以查看视频教程&#xff1a; 用手机远程连接云服务器的方法打开阿里云AP…

手撕Pytorch源码#2.Dataset类 part2

写在前面手撕Pytorch源码系列目的&#xff1a;通过手撕源码复习了解高级python语法熟悉对pytorch框架的掌握在每一类完成源码分析后&#xff0c;会与常规深度学习训练脚本进行对照本系列预计先手撕python层源码&#xff0c;再进一步手撕c源码版本信息python&#xff1a;3.6.13p…

2023跳槽最新面试题整理——JVM系列

今天是农历2022年腊月二十七了&#xff0c;和往常的春节假期、五一假期和十一假期一样都是团队中坚持到最后的一个。没几天也要快过年了&#xff0c;我先提前向大家拜个早年——祝大家兔年大吉&#xff0c;新春快乐&#xff0c;财源滚滚&#xff0c;万事如意。 今年从十一…

主动变被动9个例句_学会9个机柜布线小技巧,老板主动涨工资

在整个网络布线工程中&#xff0c;机柜布线是一项非常讲究的工作。如何把机柜布线做得规整美观&#xff0c;是对我们弱电新手职业技能的一大考验。机柜规范布线的重要性机柜系统性地解决了计算机应用中的高密度散热、大量线缆附设和管理、大容量配电及全面兼容不同厂商机架式设…

要点分析:用SQL+Excel监控数据库性能

点击蓝色“有关SQL”关注我哟加个“星标”&#xff0c;天天与8000人一起快乐成长人人都会写SQL&#xff0c;但某些人的SQL&#xff0c;执行起来就是慢。要让运营等你20分钟出报表&#xff0c;今年你的KPI可就难了。可&#xff0c;谁没傻过呢&#xff1f;我刚毕业写代码那会&…