zoukankan      html  css  js  c++  java
  • Fine-grained Partitioning for Aggressive Data Skipping

    AMP Lab的论文

    对于数据库的核心问题,如何让查询变的更快,当需要查询的数据越来越多的时候

    这段写的还是很清晰的,两个思路

    读的更快,比如cache,并行化,数据压缩

    读的更少, 比如列存,sampling获取近似,还有本文的主题data skipping

    传统的data skipping,基于partition pruning,这样粒度比较粗;

    最近的系统支持,基于block的skipping,block要小的多,

    DB2的BLU的block,只有1000 tuple;PowerDrill的Block有50000 tuples;Shark基于HDFS block,128M;

    但是之前的block都是依赖range partition来划分block,这是很直觉的方式

    本文说range partition有一些问题,

    会有数据和负载的skew;无法给不同的column不同的划分;无法capture column之间的相关性

    本文提出一种基于负载统计的,细粒度的,平衡size的blocks

    实际看个例子是如何做partition的,对象就是图中的日志表,

    首先从真实的查询负载中,提取出一组features,这里的feature指的是filter

     第二步,根据选择的features把tuple进行向量化

    第三步,很关键,如何去partition,

    这里说,尽量把不满足相同features的tuple划分进同一个block,

    因为你要skip,所以如果某个block中的所有tuples都不满足某个feature,那么查询如果包含改feature,就可以简单的skip掉

    下面就是一些实现细节,

    首先如何根据负载提取Filter,

    关键是下面两个指标,

    同时这也是对于场景的假设,如果不满足,那么这个方法就是无效的

    这里具体的抽取算法就不说了,感兴趣的看原文

    然后就是Blocking Partition的流程,比较容易理解

    具体的划分算法,这里也不展开了,具体参考原文

    然后这篇论文的Related Work写的不错,

    首先,之前的数据库partition,都是基于Range或hash,而本文提出的一种独特的细粒度划分方式,虽然17也提出一种基于workload的细粒度划分,但目的不同,他是为了避免跨机器的事务

    对于Skip技术,

    传统的Oracle或PG,都是基于Partition Pruning

    类似28,34,BrightHouse,会使用SMA,来对block进行pruning,

    对于完全不相干,C1,直接可以过滤掉

    C2,全相关,那需要scan

    关键是C3,部分相关,这个很复杂,如何判断是否要过滤,SMA是否可以answer查询

    所以大部分系统不会区分C2和C3,这篇Paper也没有区分

    和物化视图做比较,因为都需要pre-computation

    物化视图,要预算,但不会做partition;本文做预算的目的主要是做partition,而不是记录预算的聚合值,本身目的不一样

    所以使用的空间大小明显不一样,物化视图的空间占用和成本要大很多

    而且本文在抽取feature的时候,是同时看column和value,这个是不同的,一般都不会这么做,因为这样的限制太强,有利有弊

  • 相关阅读:
    jQuery之元素操作及事件绑定
    JS中常遇到的浏览器兼容问题和解决方法
    九九乘法表
    全选复习
    css基本知识
    js数组
    Spark常见错误问题汇总
    被问懵逼的Kafka面试题
    被问懵逼的数仓面试
    Flink模拟项目: 订单支付实时监控
  • 原文地址:https://www.cnblogs.com/fxjwind/p/12768745.html
Copyright © 2011-2022 走看看