Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 论文解读(VLDB 2021)

  • 本篇博客是对发表在2021 VLDB上的# Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads的解读,原文链接为Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads (acm.org)
  • 本文介绍了一种不受查询负载倾斜和数据相关性影响的基于学习的索引结构。
  • 特点:
    • 介绍了传统的多维索引结构(K-D树)、最近提出的基于学习的多维索引(FLOOD)和本文提出的多维索引结构(Tsunami)。
    • 本文提出的索引结构可以基于数据和查询负载对索引结构进行调整,使之更加适用于当前的查询负载(传统的索引值是基于数据进行索引的构建)。
    • 解决了目前基于学习的索引对于倾斜的查询负载和数据相关性强情景下的实效问题。

过滤表达式与索引

基于谓词过滤是任何现代数据库最基本的操作之一,加速过滤器表达式的执行可以显著提高数据库查询优化器的效率。过去常用的提高过滤效率的方法包括:聚集索引、多维索引及二级索引(选择度较高时)。但这些传统索引方法都难以调节,而且表现极不稳定。后续会

基于学习的多维索引方法(FLOOD,后文介绍)可以根据数据集和工作负载自动优化索引结构。但是对查询倾斜和数据相关度高的数据效果不是很乐观。

传统多维索引

k-d树

  • 一种二叉空间分割树。在每个节点上基于不同维度的中值划分,直到每个叶子节点的点数少于一页的存储范围。每个叶子节点区域的点个数大致相等 如下图

  • k-d树缺点:只基于数据进行构建,没有考虑查询负载,有可能划分的大部分索引点都不会有查询经过造成大量空间的浪费。

二级索引

  • 二级索引:叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录。
  • 缺点:占据空间过大。适用于选择度比较大的属性,否则空间代价过大且无用。

传统多维索引缺点:

  • 索引结构难以调整,需要在创建索引时仔细选择需要用到的维度以及索引的顺序,每当数据或工作负载发生变化就要重新维护索引。
  • 没有一种索引模式可以概况所有情况的索引。

基于学习的索引

FLOOD

  • workflow:输入一个n维数据->CDF->divide into n partitions->n dimension grid->storage

  • CDF:概率密度函数;根据CDF将每个维度分割成等量的k个部分(k是学习来的);n维数据,每个维度分成\(k_i\)个部分,互相交叉形成包括\(\prod_{k_i}\)个单元格的网格,每个单元格中包括满足各个属性范围的数据点。每个网格中的数据点都是连续存储的。

  • FLOOD优点:

    • 可以根据查询负载动态的调整网格大小
    • CDF模型对存储空间的消耗远远小于树形结构
  • FLOOD不足:

    • FLOOD只参考平均查询频率来调整网格大小,当查询负载倾斜或查询不一致时,效率会大大降低。
    • 当数据相关密切时,会导致各个单元格中的数据量差异较大,会降低索引的性能和存储空间使用率。

    TSUNAMI

    Tsunami的提出主要是为了解决FLOOD中对倾斜查询负载和处理相关数据时的效率下降问题。

    • 针对FLOOD对倾斜负载查询的不稳定性,Tsunami采用网格树的模式进行解决。

      • 当查询特征在数据空间的不同部分有所不同,查询工作负载就会发生倾斜。解决方案:利用网格树将一个维度按查询分成多个不重合的部分
    • 针对FLOOD对相关数据的不稳定性,Tsunami采用了增强网格进行解决。
      • 基本想法与FLOOD基本一致。不同的是划分网格的依据。

        (1)将当前属性视为独立属性,根据CDF(x)均匀分割

        (2)如果X,Y存在单调映射,可以利用Y的过滤结果代替X的过滤结果

        (3)用CDF(x|y)做均匀分割

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        (#^.^#)

        觉得有帮助的话给笔者点个赞吧!O(∩_∩)O

Tsunami: A Learned Multi-dimensional Index for Correlated Data and Skewed Workloads 论文解读(VLDB 2021)的更多相关文章

  1. 论文解读 - Composition Based Multi Relational Graph Convolutional Networks

    1 简介 随着图卷积神经网络在近年来的不断发展,其对于图结构数据的建模能力愈发强大.然而现阶段的工作大多针对简单无向图或者异质图的表示学习,对图中边存在方向和类型的特殊图----多关系图(Multi- ...

  2. MySQL: Building the best INDEX for a given SELECT

    Table of Contents The ProblemAlgorithmDigressionFirst, some examplesAlgorithm, Step 1 (WHERE "c ...

  3. 1229【MySQL】性能优化之 Index Condition Pushdown

    转自http://blog.itpub.net/22664653/viewspace-1210844/  [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...

  4. T-SQL Recipes之Index Defragmentation

    The Problem 索引一直是优化查询性能的不二法门.其中一个最直接的问题便是当审查一个低性能查询语句时,检查索引是否在正确的地方或者加索引没有.运行一个batchjob查看索引碎片,必要时采取步 ...

  5. Index on DB2 for z/OS: DB2 for z/OS 的索引

    可以创建在任何表上的索引: Unique Index:An index that ensures that the value in a particular column or set of col ...

  6. Unable to handle 'index' format version '2', please update rosdistro的解决办法

    之前安装的ROS是Fuerte版本的,好久没有更新,不知不觉又出来了好几个新的版本,今天删除了Fuerte,计划安装Hydro版本的尝尝新,按照官网的安装流程,很快就可以把新版本安装上去了,但是在&q ...

  7. elementui el-upload 在v-for里使用时 如何获取index

    <div v-for = 'item in list'> <div @click="getImageTypeIndex(index)"> <el-up ...

  8. MySQL 执行计划中Extra(Using where,Using index,Using index condition,Using index,Using where)的浅析

      关于如何理解MySQL执行计划中Extra列的Using where.Using Index.Using index condition,Using index,Using where这四者的区别 ...

  9. MySQL ICP(Index Condition Pushdown)特性

    一.SQL的where条件提取规则 在ICP(Index Condition Pushdown,索引条件下推)特性之前,必须先搞明白根据何登成大神总结出一套放置于所有SQL语句而皆准的where查询条 ...

随机推荐

  1. Wordpress Calendar Event Multi View < 1.4.01 反射型xss漏洞(CVE-2021-24498)

    简介 WordPress是Wordpress基金会的一套使用PHP语言开发的博客平台.该平台支持在PHP和MySQL的服务器上架设个人博客网站.WordPress 插件是WordPress开源的一个应 ...

  2. table表格的td行利用css显示...

      默认超过指定长度以...显示, 鼠标放到文本上显示全 代码如下 .fh{ max-width:220px; word-wrap:break-word; text-overflow:ellipsis ...

  3. 微信小程序搜索并高亮关键字

    更多解读可使用博客: https://www.jianshu.com/p/86d73745e01c 实现流程:1.在文本框中输入关键字key,如"比赛",检索出比赛相关的列表key ...

  4. 构造方法__construct()与析构方法__destruct() 构造方法:刚出生时婴儿的啼哭 析构方法:老人临终时的遗言

    <?phpclass person{ var $name; var $sex; var $age;//构造方法 function __construct($name, $sex, $age) { ...

  5. tp 5 三级联动查询(自写)

    思路: 1.定义路由 2.查询顶级分类(pid=0)发送至制图 3.循环展示 4.给顶级分类下拉框绑定内容改变事件(JS:onchange.JQ:change) 5.获取到选中的option的valu ...

  6. 在线O(1)求逆元

    怎么还有厉害的在线O(1)求逆元,不过常数确实有点儿太大了 本文大部分搬运于这里 相信大家都做过 POJ2478 这道题吧,这道题的 Farey 序列 \(F_n\) 包含了分子分母不大于 \(n\) ...

  7. 使用http-server 模拟接口数据 mock data

    首先创建文件夹 mkdir mockData&&cd mockData 安装http-server npm i http-server 创建数据文件 touch index.json ...

  8. 在/etc/docker/下 创建daemon.json重新加载后docker无法启动问题 /etc/docker/daemon.json编辑不了 找不到

    可能产生这个问题的原因至少有以下几个: 编辑daemon.json步骤不对:想要创建并编辑daemon.json,应该是先启动docker服务,此时系统自动产生/etc/docker目录,此时cat生 ...

  9. Java案例——猫与狗(接口版)

    一.需求:对猫跟狗进行训练,加入跳高功能,采用抽象类和接口实现,并创建测试类测试 二.分析: 1.定义接口(Jummping) 成员方法 跳高(): /*定义跳高接口 * */public inter ...

  10. 一个故事看懂CPU的SIMD技术

    好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴. 我所在的一号车间,除了负责执行指令的我,还有 ...