Benchmarking Learned Indexes(VLDB2021)

article/2025/10/29 10:53:36

最近学习索引结构的进步建议用近似学习模型来替代现有的索引结构,比如b树。在这项工作中,我们提出了一个统一的基准,它将三种已经学习过的索引结构的优化实现与几种最先进的传统基准进行比较。通过使用四个真实的数据集,我们证明了在内存中只读工作负载下,学习索引结构在密集数组上的性能确实优于非学习索引。我们研究了缓存、流水线、数据集大小和密钥大小的影响。我们研究了学习的索引结构的性能,并建立了一个解释为什么学习的模型能取得如此好的性能。最后,我们研究了学习索引结构的其他重要特性,例如它们在多线程系统中的性能和构建时间。

1.

虽然索引结构是数据库管理系统中研究最充分的组成部分之一,但最近的工作[11,18]为这个几十年前的话题提供了一个新的视角,展示了如何使用机器学习技术来开发所谓的学习索引结构。与传统的索引结构(如[9,14,15,19,30,32])不同,学习索引结构构建底层数据的显式模型来提供有效的索引

更糟糕的是,缺乏开源实现迫使研究人员重新实现[18]技术,或使用封底计算,以与学习的索引结构进行比较。虽然这本身不是一件坏事,但我们很容易不优化基线,或做出其他不现实的假设,即使是出于最好的意图,这可能会使主要内容变得空洞。

在本文中,我们试图从三个方面解决这些问题:(1)我们提供了一个RMIs的第一个开源实现,供研究人员进行比较和改进;(2)我们创建了一个包含多个真实数据集和工作负载的存储库,用于测试;(3)我们创建了一个基准测试套件,它可以方便地与已知的和传统的索引结构进行比较。为了避免与弱基线进行比较,我们的开源基准测试套件[4]包含了广泛使用的索引结构实现,这些索引结构由原始作者进行了调整,或者两者兼有。

Understanding learned indexes  除了提供一个用于未来研究的开源基准测试外,我们还试图更深入地理解已学习的索引结构,扩展[16]的工作。首先,我们提出了三种最近学习的索引结构(RMIs [18], PGM[12]和RS[17])的帕累托分析。几种传统的索引结构,包括树、tries和哈希表。我们表明,在热缓存、紧密循环设置中,所有三种学习索引结构变体都可以提供比几种传统索引结构更好的性能/大小权衡。我们将这种分析扩展到多个数据集大小,32和64位整数,以及不同的搜索技术(即二进制、线性、插值)。

其次,我们分析了为什么学习的索引结构能取得如此好的性能。虽然我们无法找到一个完全解释索引结构性能的指标(直观地看,这样的指标似乎不存在),但我们提供了性能计数器和其他属性的统计分析。最重要的解释变量是缓存丢失,尽管缓存丢失本身不足以对统计意义重大的解释。令人惊讶的是,我们发现分支缺失并不能解释为什么学习的索引结构比传统结构性能更好,就像[18]中最初宣称的那样。事实上,我们发现学习索引结构和传统索引结构都能有效地使用分支

第三,我们分析索引结构在存在内存围栏、冷缓存和多线程环境下的性能,以测试更真实设置下的行为。在所有情况下,我们发现学习的方法都表现良好。 

FORMULATION & DEFINITIONS

我们在一个零索引的排序数组𝐷上定义了一个索引结构𝐼,作为一个整数查找键𝑥∈Z之间的映射

 

Approximating the CDF

学习索引结构使用机器学习技术,从深度神经网络到简单回归,以建模一个排序数组[18]的累积分布函数,或CDF。这里,我们使用术语CDF表示函数将键映射到它们在数组中的相对位置 

 

 给定数据集的CDF,用CDF𝐶𝐷𝐹𝐷在数据集𝐷中找到查找键𝑥的下界很简单:只需计算𝐶𝐷𝐹𝐷(𝑥)× |𝐷|。通过使用学习的模型(例如,线性回归)逼近数据集的CDF来学习索引结构函数。当然,这样的学习模型并不完全准确

 LEARNED INDEX STRUCTURES

本文评估了三种不同的学习索引结构:递归模型索引(RMI)、基样条索引(RS)和分段几何模型索引(PGM)的性能。虽然这三种技术都近似于底层数据的CDF,但构建这些近似的方式各不相同。接下来,我们将对每种技术进行高层次的概述,然后讨论它们的差异。

1)Recursive model indexes (RMI)

RMIs使用多阶段模型,将更简单的机器学习模型组合在一起。例如,如图3所示,一个有两个阶段的RMI,一个线性阶段和一个立方阶段,首先使用一个线性模型对特定密钥的CDF进行初始预测(阶段1)。然后,基于该预测,RMI将从几个立方模型中选择一个来细化这个初始预测(阶段2)。

 Structure. 

 

为两个阶段选择正确的模型(𝑓1和𝑓2),并为特定数据集选择最佳的分支因子,这取决于RMI所需的内存占用以及底层数据。在本工作中,我们设计了CDFShop RMI自调优器[21]。 

 2)Radix spline indexes (RS)

 RS索引[17]由近似于数据的CDF的线性样条[24]和索引样条点的基数表(图4)组成。RS以自底向上的方式构建。独特的是,RS可以在单次传递中构建,每个元素的最坏情况代价是恒定的(PGM提供恒定的平摊代价)。

3) Piecewise geometric model indexes (PGM)

PGM索引是一个多层次的结构,其中每一层代表一个误差有界的分段线性回归[12]。图5描述了一个示例PGM索引。在第一级,数据被分成三个部分,每个部分用一个简单的线性模型表示(𝑓1,𝑓2,𝑓3)。通过构建这些线性模型,每个线性模型都可以在预设的误差范围内预测对应段中键的CDF。然后将第一级的划分边界作为它们自己的排序数据集,计算另一个误差有界的分段线性回归。这样重复,直到PGM的顶层足够小。 

 Structure. 分段线性回归将数据划分为𝑛+1段,其中包含一组点𝑝0,𝑝1,…,𝑝𝑛。将整个分段线性回归表示为分段函数:

 PGM指数中的每一个回归都是用一个固定的错误界限𝜖构造的。这样的回归可以很容易地用作近似指标。PGM指数递归地应用这个技巧,首先在底层数据上构建一个错误有界的分段回归模型,然后在第一次回归的分区点上构建另一个错误有界的分段回归模型。通过搜索每个索引层执行键查找,直到对底层数据进行回归。

4)Discussion

RMIs、RS索引和PGM索引都近似于底层数据的CDF。然而,具体情况各不相同:

Model types. RS指数和PGM指数仅使用单一类型的模型(分别为样条回归和分段线性回归),RMIs可以使用多种模型类型。这为RMI提供了更大程度的灵活性,但也增加了调优RMI的复杂性。虽然可以通过调节两个旋钮来调整PGM索引和RS索引,但自动优化RMI需要更复杂的方法,比如[21]。PGM指数的作者和RS指数的作者都提到集成其他模型类型是未来的工作[12,17]。

Top-down vs. bottom-up   RMIs进行自上而下的训练,首先拟合最顶层的模型,然后训练随后的层来纠正错误PGM和RS指数自底向上训练,首先将最底层拟合到固定精度,然后建立后续层,快速在最底层搜索相应的模型。因为PGM和RS索引都需要搜索这个最底层(PGM可能需要搜索几个中间层),所以它们可能需要比RMI更多的分支或缓存丢失。虽然RMI使用其最顶层模型直接索引到下一层,完全避免搜索,但RMI的最底层没有固定的错误界限;任何底层模型都可能存在较大的最大误差

RS索引和PGM索引在搜索最底层的方式上也有所不同。PGM索引递归地分解问题,本质上是在最底层的顶部构建第二个PGM索引。因此,PGM索引可能有许多层,在推断期间必须对每一层进行搜索(在固定的范围内)。另一方面,RS索引使用基数表来缩小搜索范围,但不能保证搜索范围的大小。如果radix表提供了与PGM索引的上层相当的搜索范围,然后RS索引通过相对便宜的操作(位移和数组查找)定位适当的最终模型。如果基数表提供的搜索范围不窄,则可能会花费大量时间搜索适当的底层模型

EXPERIMENTS

Experiments are conducted on a machine with 256 GB of RAM and an Intel(R) Xeon(R) Gold 6230 CPU @ 2.10GHz.

Index。在本节中,我们将描述我们评估的索引结构,以及如何调整它们的大小/性能折衷。表1列出了每种技术及其功能。

Learned indexes. 我们比较了RMIs、PGM索引和RadixSpline索引(RS),

Tree structures 

 Hashing. 

 

 Datasets:

We use four real-world datasets for our evaluation. Each dataset consists of 200 million unsigned 64-bit integer keys. We generate random 8-byte payloads for each key

 

 

 

 


http://chatgpt.dhexx.cn/article/kvX2Bnuf.shtml

相关文章

阿里云数据库再获学术顶会认可,一文全览VLDB最新亮点

一年一度的数据库领域顶级会议VLDB 2019于当地时间8月26日-8月30日在洛杉矶圆满落幕。在本届大会上,阿里云数据库产品团队浓墨登场,不仅有多篇论文入选Research Track和Industrial Track,为了进一步加深产学研学术交流,阿里云还在…

2019计算机研究生暑期学校,2019年度VLDB暑期学校

由CCF数据库专业委员会、VLDB中国数据库学院主办,中国人民大学信息学院与数据工程与知识工程教育部重点实验室承办的2019年度VLDB暑期学校(VLDB Summer School 2019)于2019年7月22日在中国人民大学信息楼报告厅隆重举行开班仪式。出席开班仪式的嘉宾有:中…

13 种高维向量检索算法全解析!数据库顶会 VLDB 2021 论文作者干货分享

编者按: 以图搜图、商品推荐、社交推荐等社会场景中潜藏了大量非结构化数据,这些数据被工程师们表达为具有隐式语义的高维向量。为了更好应对高维向量检索这一关键问题,杭州电子科技大学计算机专业硕士王梦召等人探索并实现了「效率和精度最…

Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)

Deep Upsupervised Cardinality Estimation 解读(2019 VLDB) Deep Upsupervised Cardinality Estimation选择度(基数)估计问题定义选择度和数据联合分布的关系深度自回归模型如何计算joint distribution编码解码策略具体执行属性的…

VLDB 2021 COCO 论文阅读

Epoch-based Commit and Replication in Distributed OLTP Databases 记录一篇之前读过的论文。。。 整篇论文的核心在于Epoch,将传统数据库以事务为粒度提交和恢复变成了以Epoch为粒度来提交和恢复,这样做的好处就是可以减少2PC和同步复制的时间开销。…

【区块链论文整理】VLDB篇

VLDB (Very Large Data Base)是数据库三大顶会之一,近几年也发表了不少水平很高的文章。本文主要针对VLDB 会议中区块链相关的论文进行简单整理。 2021 SlimChain: Scaling Blockchain Transactions through Off-Chain Storage and Parallel Processing…

入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?

阿里云操作系统团队、阿里云数据库团队以及上海交通大学新兴并行计算研究中心一起合作的论文 “Async-fork: Mitigating Query Latency Spikes Incurred by the Fork-based Snapshot Mechanism from the OS Level” 被数据库系统领域顶会 Very Large Data Bases Conferences (V…

VLDB 2023 | 基于擦除的浮点无损压缩(附论文和源码)

大量浮点时间序列数据正以前所未有的高速率生成。一种高效、紧凑、无损的时间序列数据压缩方法对海量数据的应用场景至关重要。现有的大多数浮点无损压缩方法是基于异或操作,但它们没有充分利用尾随零,这通常会导致压缩率不尽如人意。本次为大家带来重庆…

运算符—逻辑运算符

目录 5.逻辑运算符 5.1逻辑运算符概述 5.2短路逻辑运算符 5.逻辑运算符 (学完之后要求能够使用逻辑运算符完成逻辑运算) 5.1逻辑运算符概述 在数学中,一个数据x,大于3,小于6,我们可以写为这样来表示&am…

C语言关系运算和逻辑运算

一、关系运算 1.关系运算符 每个关系运算符对它左侧值和右侧值进行比较大小的运算 2.关系表达式 用关系运算符连接起来的式子。 若关系为真,关系表达式的值为1; 若关系为假,关系表达式的值为0; 3.优先级 关系运算符优先级低于算术…

C语言复习--逻辑运算符|| 和,!

&& 只有两个条件都为真时,才为真。||只要一个为真,就为真。 逻辑运算符很重要的法则是短路法则。 逻辑运算符的运算顺序都是从左到右计算。 && 当左侧条件为假时,就不计算右侧。 || 都左侧条件为真时,就不计…

C语言:关系运算符逻辑运算符

本节的所讲解的符号,大家在生活中应该都有用过,像我们去商场买东西,都会比较一下价格,是不是相等啊,哪家的贵,哪家的便宜啊。 在C语言中程序中也存在这样的比较,这个时候就需要用到关系运算符了…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C 语言 逻辑运算符

文章目录 介绍逻辑运算符一览案例演示 介绍 用于连接多个条件&#xff08;一般来讲就是关系表达式&#xff09;&#xff0c;最终的结果要么是真(非 0 表示)&#xff0c;要么是 假(0 表示) 。 逻辑运算符一览 下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 的值为 1&am…

☀️光天化日学C语言☀️(11)- 逻辑运算符 | 我是一个有逻辑的人

&#x1f649;饭不食&#xff0c;水不饮&#xff0c;题必须刷&#x1f649; C语言免费动漫教程&#xff0c;和我一起打卡&#xff01; &#x1f31e;《光天化日学C语言》&#x1f31e; LeetCode 太难&#xff1f;先看简单题&#xff01; &#x1f9e1;《C语言入门100例》&#…

C语言逻辑运算符介绍和示例

文章目录 1、逻辑运算符介绍2、逻辑表达式的书写3、不得不说的逻辑非4、获取视频教程5、版权声明 1、逻辑运算符介绍 在日常生活中&#xff0c;要做出某个决定&#xff0c;需要判断的条件往往不止一个&#xff0c;需要判断多个条件&#xff0c;例如超女选秀&#xff0c;参与选…

C语言按位逻辑运算符总结-与、或、非、异或

点击上方蓝字关注我&#xff0c;了解更多咨询 C中有按位逻辑运算符&#xff1a;按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型&#xff0c;包括char类型。按位操作针对每一个位进行操作&#xff0c;不影响左右两边的位。4个运算符的作用总结如下&#xff1a; 一…

C语言逻辑运算符和||,一篇文章带你读懂逻辑表达式!

目录 逻辑运算符有哪些&#xff1f; 逻辑运算符的短路特性 逻辑运算符在表达式求值中的问题 逻辑运算符&&、||混合的不同情况 逻辑运算符有哪些&#xff1f; C 语言提供了以下三种逻辑运算符。 一元&#xff1a;&#xff01;&#xff08;逻辑非&#xff09;。 二…

勒让德符号判断二次剩余-C语言

近日备考学习二次剩余理论&#xff0c;其中了解到勒让德符号这个相比欧拉定理更加方便判断一个正整数在一个模数下是否为二次剩余&#xff1b; 基于勒让德符号理论的学习&#xff0c;本文旨在通过程序来实现基于勒让德符号的二次剩余判断方法&#xff1b; 本文着重点在于运算…

二次剩余入门

昨天训练的时候遇到一道题怎么也不会做&#xff0c;在网上搜了题解之后第一次听说了二次剩余&#xff0c;看了一天各种dalao的博客&#xff0c;在这里总结一下自己所理解的二次剩余及其用法。 1&#xff0c;什么是二次剩余&#xff1f; 2&#xff0c;二次剩余有什么用&#xff…