百度面试官:谈谈你对olap的理解

  在找工作时被百度云盘的面试官问到了这个问题,这种开放性问题不好回答,答的少了或者浅了显得水平不够,也不能太多,还得体现逻辑性和深度

  面试官往往能从这种题目了解求职者的真实水平,在回答过程中最好是适时的寻求面试官反馈,看其对哪部分感兴趣,防止讲了一大堆面试官不感兴趣的。

  自己当时回答比较关注组件理解,对背景介绍的不足,下来自己也做了更多了解,整理如下

背景介绍

  • oltp产生
    互联网将线下工作搬到线上,用数据库替代纸存储,比如销量统计数据,用户个人信息等
    此时出现了mysql这种oltp数据库,遵循三范式,通过事务机制做业务处理

  • olap萌芽
    随着发展,数据除了存储和查询,还需要进行相关分析用于指导决策,即出现了多维分析的需求
    数仓:将多个数据源的数据放在一起专门做数据分析的场所 由存储和计算组成,但由于数仓中表查询的延时较高,生成的报表通常不能直接支持多维分析
    早期的olap技术:将报表同步到mysql中支撑多维分析,但随着数据量不断增加,暴露出很多问题,此时的mysql就是olap

  • olap发展
    前期不受重视:只有技术人员懂怎么做分析,且分析场景固定,周期长,最后是哪怕做完,只有部门领导可能会看,查询延时高也不影响
    数据分析时代到来:数据驱动业务 + 人人都是数据分析师,对OLAP技术的实时性和可自定义性提出了更高的要求

总结就是:人人都要做数据分析,倒闭着技术进步:要求实现分析要简单,响应速度要快,最好能支持自定义查询,目前的olap几乎都是支持sql实现多维分析,毫秒级响应,就很强大

下面是重点,仔细的说下多维分析及mysql为啥不够用

什么是多维分析/多维模型

在进行分析时,影响目标的因素一般不止一个,通常需要使用多个因素对目标做相关描述,这些因素就是维度,使用多个维度对目标进行描述就是多维分析

数仓的核心就是多维分析,一般采用维度建模去提炼维度和指标

olap大多也是在做多维分析

mysql为啥不够用呢

先说个前提,支持bi查询要求至少是秒级响应,再慢就不礼貌了~

比如从数仓中得到一张报表,包含了8个维度,5个指标,后同步到mysql中支持多维分析

开始时数据量小没啥问题,随着数据不断增大,就查询不动了,不是索引的问题,而是数据量太大了

有人就要问了,报表都已经做过聚合了,又不是明细,数据量能有多大,那就算下每天报表的增量大概是多少

比如8个维度下的枚举值分别都是4个,那么一天就是 4^8 = 65536条数据 一年 65536 * 365 = 2.3kw 条; 你觉得算大嘛,如果每个维度的枚举值是6个,9个呢,时间范围是2年甚至更大呢,你还觉得mysql查的动嘛

后改进做法,在数仓中一种维度组合做一个报表,即生成 2^8 - 1 = 255个表,每个表只支持其所包含维度的查询,此时的mysql基本不需要计算只用查询

这种维度的组合,又称作维度爆炸,如果要得到用户日、周、月的各个维度的访问统计表,那就需要 (2^8 - 1) * 3 个表,嗯 爆炸

非得拆这么多吗?并不是,其实是看数据量的,只要能让数据量保持在一定范围 查询的延迟在秒级就可以了

但这个工作比较麻烦 而且只能根据他给的结果查,不支持自定义查询

总结来说,mysql的计算能力不够强,哪怕可以拆,也存在维度爆炸和不支持自定义查询的问题,因此能用吗,能用,好用吗,越往后越不好

olap发展

  朴素思维考虑,要想提高查询速度,要不然就是预先计算好,查询时减少计算;要不然就是计算能力强大查的时候再计算

常见olap技术也是根据是否预先聚合(计算)分位两大类
MOLAP 多维型 查询打到预先聚合的多维数据库 如Druid,Kylin以及刚才讲的mysql的用法,缺点就是不支持自定义查询,维度爆炸
ROLAP 关系型 查询打到原来的关系数据存储 如Presto,Impala,Clickhouse 缺点是能不能保证低延时和高并发是个问题

广义上讲,可以进行bi查询的都可以称为olap,像mysql,odps,sql on mapreduce,sql on spark,kyln,clickhouse等都算是,但效果却查非常多

通常从两方面对olap进行评估
  一是查询的速度 即延时性 通常能达到毫秒级,至少秒级
  二是查询的并发能力
    QPS(Queries Per Second) 请求数
    TPS(TransactionsPerSecond) 事务数:一个事务可能包含多个请求
    如果要想降低qps的话 常用做法有加权限限制,异步查询,增加缓存等

目前比较流行的是clickhouse以及风头正盛的doris,预聚合那种的最大的问题就是资源消耗和无法自定义查询

具体在使用时 还是要看你的场景,比如是固定查询还是自定义查询,对并发要求高不高,延时要满足多少,再结合抽样数据压测,最终确定

#面试##数仓开发##百度面试#
全部评论
请问楼主是什么方式面试的
点赞
送花
回复
分享
发布于 2022-07-18 16:44

相关推荐

3 12 评论
分享
牛客网
牛客企业服务