Qd-tree: Learning Data Layouts for Big Data Analytics论文阅读

Qd-tree: Learning Data Layouts for Big Data Analytics论文阅读

Qd-tree: Learning Data Layouts for Big Data Analytics论文阅读

概要

现今数据分组无外乎按照时间分组或者根据选定字段进行范围/hash划分,但要是对于给定的workload进行查询,分组的状况往往不利于查询的快速展开,同时也牵扯到了查询的I/O成本,例如:
在这里插入图片描述

对于blocks数据分布如图所示,在这里如果我去查询用户root的数据,那么我需要扫描所有的两个块;然而,如果我可以将数据按照下图分布:

在这里插入图片描述

这时我可以只扫描第一个block,而跳过第二个block。

基于这种思想,我们希望用查询驱动(query-driven)的方法来划分数据blocks。比如我们想要查询一个数据的标签为(cpu = 95%, mem = 10GB),那么根据下图建立的qd-tree,我们只需要查询B1,忽略其他三个blocks。

在这里插入图片描述

算法

划分算法如图

在这里插入图片描述

假设我们存在一系列历史查询记录:

abc
SELECT * FROM R WHERE>5
SELECT * FROM R WHERE>5>6
SELECT * FROM R WHERE>5>6>7
SELECT * FROM R WHERE>6>7
SELECT * FROM R WHERE>7
SELECT * FROM R WHERE>5>7
SELECT * FROM R WHERE>5
SELECT * FROM R WHERE>7
SELECT * FROM R WHERE>6

数据则如表:

abc
123
1123
173
125
1128
102030
1213
11221
893
4131
1610
623
123
188
978
369
184
4210

为简单,只选择a>5,b>6,c>7三项,这三项划分为Candidate Cuts,块最小要保持为3个元组。

开始时a>5可以跳过12个元组,若以此为划分依据,根据历史查询记录评价为5×12=60;同理b>6评价为10×4=40;c>7评价为9×5=45,此时选择a>5来划分;

在这里插入图片描述

第二阶段,元组分为12和6两组。考虑a>5对于6节点和12节点的划分,由于划分后不能保证两个子节点均大于3,所以不再考虑;对12节点而言,b>6划分为7和5,评价为7×4+60=88,c>7划分为6和6,评价为6×5+60=90,因此12节点由c>7划分;6节点同理均被两者划分为3和3,评价分别为3×4+90=102和3×5+90=105,故而6节点选择c>7作为cuts;

第三阶段,a>5和c>7都不在符合评价标准,因此由b>6划分其中一个6节点。

最终结果如图:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值