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. CAS 比较并交换

    简介 CAS 的全称为 Compare-And-Swap,他是一条 CPU 并发源语. 他的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的. CAS 并发原语体现在 J ...

  2. laravel7 百度智能云检测内容及图片

    1:百度智能云,获取AppID,API Key,Secret Key https://console.bce.baidu.com/ai/?_=1642339692640&exraInfo=ai ...

  3. Forbidden You don't have permission to access this resource. 解决办法!

    这两天在使用hmailserver+roundcubemail 搭建邮箱时遇到的一些坑和大家分享一下,避免少踩坑. 关用httpd.conf及httpd-vhosts.conf配置我贴出来供大家参考. ...

  4. Java8 中的流式数据处理

    java8的流式处理极大了简化我们对于集合.数组等结构的操作,让我们可以以函数式的思想去操作,本篇文章将探讨java8的流式数据处理的基本使用. 一. 流式处理简介 在我接触到java8流式处理的时候 ...

  5. 对 Kubernetes 部署进行故障排除的视觉指南

    链接:https://learnk8s.io/troubleshooting-deployments

  6. 女朋友问我深浅copy到底是什么?

    深浅拷贝 列表存放值的时候,是先申请一块内存空间,存放索引和内存地址的对应关系,其实通俗的来说列表内不存真正的值,是一种间接存放的对应关系: 列表内存不可变类型的数据 就比如说,如果现在将L列表索引0 ...

  7. WebGPU 计算管线、计算着色器(通用计算)入门案例:2D 物理模拟

    目录 1. WebGL 2. WebGPU 2.1. 适配器(Adapter)和设备(Device) 2.2. 着色器(Shaders) 2.3. 管线(Pipeline) 2.4. 并行(Paral ...

  8. DC-1

    靶机准备 导入虚拟机设置网络为NAT kali:192.168.164.137 扫描获得靶机ip:192.168.164.182 netdiscover -r 192.168.164.0/24 渗透测 ...

  9. zookeeper从小白到精通

    目录 1.介绍 1.1概念 1.2特点 1.3主要的集群步骤 1.4数据结构 1.5应用场景 2.本地安装 2.1安装jdk 2.2下载安装 2.3配置文件修改 2.4启动服务端 2.5启动客户端 2 ...

  10. kvm管理查看信息,添加,删除,暂停恢复,克隆等

    KVM virsh管理指令 virsh 查看帮助信息 查看命令帮助 [root@KVM ~]# virsh Welcome to virsh, the virtualization interacti ...