专家视野 | 牟宇航:百度OLAP数据库——Palo

https://mp.weixin.qq.com/s/q8_kdDPdCPwIjI2BCETPZw

3月28日,在工业和信息化部的指导下,为期两天的“2017大数据产业峰会”在北京国际会议中心召开。本次会议由中国信息通信研究院和中国通信标准化协会共同主办,数据中心联盟大数据发展促进委员会承办。

百度研发经理牟宇航在29日上午大数据产品和应用创新论坛上发表了题为《百度OLAP数据库——Palo》的演讲。

以下是内容实录:

大家好,我叫牟宇航,来自百度大数据部。现在负责百度大数据部在线系统的研发管理,在线系统简单来说就是大家用的数据库。今天来这里给大家分享一个在云上售卖了一年,而且准备开源的数据库。

在讲数据库之前先给大家讲一下我们面向的场景,第一个是百度统计,是为其他第三方站长提供流量分析的工具。它的形式是提供一个脚本,其他的站长嵌入到自己的网站代码里面,最后百度会通过这个脚本获取第三方网站的用户行为,然后出第三方网站的分析报表。这个产品量非常大,首先有450W网站站长去使用它,它的查询频率非常大,基本上峰值OPS会到2000以上。数据量也非常大,我们初步统计了一下每天结构化的数据会到1-2T。

这种场景是在线报表场景,可以看到左侧栏是主题,右侧栏包括了指标列和过滤条件,比如说可以根据时间过滤,可以根据其他方式过滤,每个主题是不一样的。

第二个场景是我们经常在业务上会出现的一个场景,就是数据集市。数据集市一般面向业务为主题,这里举例是百度糯米的数据集市,它是集运营、业务分析、订单管理、会员管理、客户关系、管理等一体的综合数据平台。这种数据集市场景多样化,一方面刚刚提到的在线报表,比如说渠道人员想看一下几个渠道的运维情况,这有一个报表。再有产品经理想多维分析下产品传单的情况。比如说新上线一个活动,运维人员想看一下新上线活动的情况,它的查询非常灵活。

在这种数据集市里面除了场景比较复杂,另外使用它的角色很多,所以这个里面涉及到多租户的管理。

这里拿了另外一个多维分析系统,初步看它的样子跟在线报表比较像,如果仔细看会不一样。它的左侧栏是个维度,包括像操作系统、时间浏览器维度,这些维度可以下展很多级别。右边这些栏首先是查询指标,另外是过滤维度的条件。

这种场景是典型的在线多维分析场景,以上三种场景就是今天要讲的数据库Palo的主要场景,在线报表、多维分析、机器查询。这个名字很好记,当时想这个名字就是面向多维分析的数据库,用一句话形容Palo就是A:MPP-based Interactive Data Analysis SQL DB。面向数据量是百TB到PB级别。

讲了这么多的OLAP,OLAP概念分为两个维度,第一个是中间的A,A相当于Transactional Processing。第二个维度是Online相当于Offline,下面列了一张图但凡所有的大数据应用和面向C端B端的架构都是这样的架构,首先前端是客户端,后面是服务端。

App Client加上App Server再加上Transaction,在大数据时代产生了很多数据,我们希望把这些数据提取出来,挖掘其中的价值,这就是AP角色的事情,它可以做很多的事情,可以做转换,可以做数据挖掘,这都是广义的概念。在大数据时代,AP变得越来越重要,变得越来越庞大。TP核心价值在于业务逻辑,AP核心逻辑在数据本身,我们要从数据本身挖掘更多的价值。OLAP是面向AP的,这个里面也提了在线概念。拿购物举例,离线像仓库的概念,在线像小超市的概念。离线面向数据开发人员和数据建设者,在线面向数据消费者,比如说产品经理、管理者、营销人员、运维人员,可能他不太懂数据怎么玩,但是用了这个系统就会玩了。我们看到在大数据时代越来越多人使用数据,在线这一部分的重要性变得越来越重要。

这个里面详细列举了一下OLAP和OLTP的区别,OLAP的场景比如说分析一个全量的历史数据,这个历史数据可能涉及一年可能涉及很多,它的数据量会非常大,数据量大也就导致很多不一样,比如说导入方式、侧重点,我们评估OLAP性能的方式不太一样。最后是数据组织,一般来讲OLTP是完全遵循三范式的,而OLAP就不一样,它是五范式的。

刚才提到AP在大数据时代变得越来越重要,在2000年之后整个业界在AP领域涌现出来了知名的数据厂商和数据产业。

在开源界大概在2010年左右发力,这里介绍了Palo的区别和定位。首先,最显著的区别是Palo的成本比较低,那些看到的开源产品基本是在百万美元的量级,一套产品就这么贵。而Palo用的是普通的X86服务器,百度统计的业务也不过用了60台,大家可以算一下这个成本很大的。

第二个是Palo的高可用和异用性,还有高性能,这是我们和其他竞品最核心的区别。

在讲Palo之前,我们先看Palo是怎么用的?长什么样子?首先我们在MySQL 的选择上语句不同,包括会增加一些在MySQL 比较有用的语句。这些增加的语句怎么用呢?我们通过直接输入XP就能看到语句包括参数怎么使用。上面是Palo,因为兼容MySQL协议。

言归正传,看一下Palo的架构。首先说一下Palo的设计理念,Palo的设计理念强调要优雅、简洁,这个里面大家看我们的架构很简单,每个颜色代表一个进程,蓝色是客户端,不是Palo内部的东西。在这里面我们部署时前端和后端是分离的,在部署时一台机器上只需要部属一个进程就可以了,部署非常简单。前端首先负责源数据的管理,前端还可以负责接收产品请求,包括建表、建数据库,包括数据导入、管理,包括复本管理,数据请求。包括查询界定都是在前端完成的。比方说,前端是Palo的大脑,后端是Palo的躯干,可以干活。一般来讲前端节点稍微少一点,后端节点比较多。

为什么前端节点有3-10个呢?为什么不是10个呢?相当于元数据的架构,这个里面列了元数据的管理架构。

第一个是中心架构,最典型的代表最近开源很火的,它的优点:第一,实现很简单,这是中心架构。跟它对应的是对称架构,它的优点是可靠性比较好,缺点是当元数据更新频率高的话,如果Palo采用这种数据元数据更新比较高时,网络容易成为瓶颈。

Palo的元数据管理分三类,一个是Leader,一个是Follower,一个是Observer,Leader和Follower会参与主节点的竞选。参与选举,让大家去选,这会带来一个问题,在元数据更新时要求大量的元数据同时更新,当你元数据很多时,性能会出现瓶颈,所以我们增加了Observer,它只负责接受元数据更新,这种方式可以最大程度节省元数据更新所带来的网络瓶颈。这种结合了高可靠,高QPS和可动态的扩缩容,支持频繁的元数据屏障。

业界有些数据库元数据直接存在类似于MySQL系统里面,为了对元数据的查询和保证。但是对于Palo来讲这种方案不太适合,在Palo第一版本时也是这种方案。但是在百度整个的数据量比较大前提下,整个的元数据访问比较复杂,而且我们对比了一些复杂工具之后,会有变态的情况出现。比如说一个查询语句、一个点击查询,会翻译成成千上万的语句。如果一下翻译出来成千上万语句时,你把它都执行完,可能访问性会存在瓶颈。

我们的内存如果BUG掉怎么办?Checkpoint保证说如果内存挂掉的话,还可以同步进其他的内存,这样保证了元数据的可靠性。数据可靠性和元数据可靠性大同小异,在这里Palo也支持做副本,也可以自动修复。之前发现了一个用户在导入数据时只测了一部分,他想导入更快一点,占用存储机更小一点,等他把数据都导进去时,他扩展成了三个副本,这都是利用Palo修复的功能,把单副本扩展成三个副本。

这个是MPP,它是把查询计划与查询执行物理分离。我要说一下Palo的MPP架构和OLTP MPP是不一样的,我们为了保证整个的查询执行不影响查询计划,所以把物理分离了。

很多同学会问我Palo底层用什么实现?Palo是一个高度集成系统,是查询与存储一体的数据库系统。在这里里面,它比较易于实现一致性保证。在一致性提到两个维度,一个是单调一致性,还有Consistent View,它是高性能的,最后是易部署,易调试。像Palo去部署的话一天就部署好了,像一些大的开源系统依赖的环境和条件比较多,一旦花了几个月做好,容易出问题,出了问题去定位比较复杂。

整体的架构是这样的,下面我讲一下后端节点存储结构是什么样的?

首先是列存,这个概念大家都很熟悉,我不会讲太多。只讲一点OLTP都是行存的,OLAP可能是对全量数据的某几列进行分析,所以把它一列存在一起更好一点。列存的优点很方便做压缩很方便做索引。

这里着重讲Palo很特色的地方,它可以支持很多的数据模型。数据模型建表时会考虑很多的列式,比如说多少列。在Palo建表时首先考虑一个问题,我的哪些列是指标列,哪些是维度列。维度列是Time、Id、Country,而指标列是Clids、Cost。我们的数据库首先存在序列,然后进行排序,Palo会做一个事情保证全局唯一。

首先已经有这样一份数据存在Palo里面,一共有三行,T是这样的。又新来一份数据,新来的数据第一行它的T列跟之前T列不一样,它是20140101,1、US。存到T列之后首先把T列不一样的单独存一条,T列相同的把Value列进行合并。

如果T列重复类很大,使用Palo之后其实存的数据量非常小。

查询时会进行很多的具体操作,这一部分操作在存储过程中已经做完了,也就是说这个数据模型可以极大提升做指标维度列的表查询。除了这个具体数据模型之外,我们也当然支持非具体模型。

第二个是物化视图,它有两种优化方式和优化思路。第一个是物化视图把这些表按照某些T进行存储。一个原始表可以对应很多的物化视图,查询过程中具体应用哪个物化视图,这个是Palo进行选择的。物化视图本身概念是时间换空间的技术,然后讲一下查询的优化。

第一个是向量化执行,一个是LLVM。向量执行是行式执行引擎问题。但是LLVM有一个问题,它在编译时有一个固定的编译开销,这个大概在百毫秒左右。

下面讲一下存储的小技巧,所有的分布式系统都会分片存储,这样有可能会导致某些分片会很大,无论是用哪个方式进行分片,可能每个分片都很大。另外,做分片分列优化时又会很麻烦,Palo用两级分片解决的。通常出现用户第一级分区是用一个月分区,第二级分区是用SATA进行分区。在两级分区基础上,我们为了高效利用硬件性能,我们知道SSD数据非常好。

再讲一下数据导入,刚才提到的OLTP和OLAP的区别,OLTP有一个很关键的指标是每秒数据量。OLAP是讲数据吞吐量。鉴于此Palo有两种导入方式,一个是批量导入,一种是小批量导入。批量导入是利用Hadoop的系统,先把批量梳理好再进行导入。第二种是不批量导入,利用查询执行框架进行导入,它的好处做的频率好一点,多导入事务提交。具体的运行方式也和MySQL不一样,这两个命令都是异步的命令,因为批量导入不可能马上完成,异步命令有一个生效问题,因为Palo在业务过程中有很多没有对一致性要求,我们在一致性上做了很多改进。比如说每一批导入都附上版本号,MySQL是不用的。再比方说我们导入的一个批次数据,怎么往主版本里面去合?

这里面就给出了导入一个批次怎么往主版本合的?这里面列出了0-60,61、62都是导入的版本号。先假设主版本里面存的是0-60数据,如果往主版本合的时候,首先想一下把主版本的数据读出来,然后再写进去。通过版本合并可以极大减少数据量,但是版本合并的原则就是不能影响线路查询。

最后是资源隔离,刚才提到Palo在百度内部也应用了200多个业务,我们不可能建200多个集群。我们的大多数业务都是在一个共享集群里面,资源隔离有两层概念。第一层是用户之间建立的资源隔离,不同用户不能相互影响。第二,同用户之内设资源优先级隔离,可能我的分析类查询要优于Udhome查询。

这是Palo的发布,Palo2013年10月份发布了第一个版本。2014年发布百度云OLAP引擎。2015年进行了拍卖,实际上已经面向上市了。

这是在云上的部署方式,类AWS redshift,

on-demand provisioning。这是在云上的一个界面,浏览器去进行集群管理,增添的界面,很简单,一共没有几步。

这里再说一下未来的Palo Road map,我们希望在这基础上开源,希望有更多对数据库感兴趣的同学能够跟我们一起开发,一起活跃这个产品。

作者:葡萄喃喃呓语
链接:https://www.jianshu.com/p/e1296fc32b6d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

pb利用datawindow查询符合条件的数据并且过滤掉其他数据_牟宇航:百度OLAP数据库——Palo...相关推荐

  1. pb利用datawindow查询符合条件的数据并且过滤掉其他数据_数据质量监测

    1 Overview 1.1 数据质量 在数据部门里,数据质量问题经常是被动发现,所以数据质量的问题是大多数公司数据部门都不得不面对的问题.数据质量校验的目标是监控数据管道中,生产者.处理阶段以及消费 ...

  2. pb利用datawindow查询符合条件的数据并且过滤掉其他数据_eBay将CAL上PB级的日志存储迁移到Ceph的实践...

    供稿 | Unified Monitoring Platform 翻译&编辑 | 顾欣怡 本文3663字,预计阅读时间11分钟 本文转载自"eBay技术荟",更多干货请关注 ...

  3. access 查询符合条件的第一条记录

    有个定时上传数据库中某些记录的需求. 定时任务中,如果查出所有符合条件的数据并上传,如果数据过多,可能不易处理,那么就限定每次只查询符合条件的一条或几条记录.经测试,access中SQL写法举例如下: ...

  4. powerbuilder查询符合条件的数据并且过滤掉其他数据_SQL语句之逻辑查询处理阶段...

    基础知识普及 对于教条式的定义请自己去查,此处不会涉及到文邹邹的知识,但还是强调一下基础的重要性,即使你理解了所有的概念,但当组合起来用时也会一头雾水. 逻辑查询处理阶段 在以上的10个处理步骤中,每 ...

  5. 数据分区与放置策略解析_数据策略好数据与坏数据

    数据分区与放置策略解析 In 1990 the Virginia based bank "Signet Bank" decided to trust two smart peopl ...

  6. 外网数据同步到内网方案_数据同步之解决方案

    关于数据同步的需求,想必是开发人员都可能遇到!下面就聊聊关于数据同步的解决方案: 一.使用中间表:数据生产者将数据放在一个中间库,数据消费方定时的去这个中间库取数据,用来消费这些数据, 但是这中方案并 ...

  7. 大数据对社交媒体的影响_数据如何影响媒体,广告和娱乐职业

    大数据对社交媒体的影响 In advance of our upcoming event - Data Science Salon: Applying AI and ML to Media, Adve ...

  8. 数据透视表 数据源引用无效_数据透视表源数据文章

    数据透视表 数据源引用无效 The key to success with Excel pivot tables is having good source data. I've written ma ...

  9. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)

    数据科学导论:Python语言实现(原书第2版) 作者:(意)阿尔贝托·博斯凯蒂(Alberto Boschetti);(意)卢卡·马萨罗(Luca Massaron) 著 出版日期:2018年01月 ...

最新文章

  1. oracle中将number类型毫秒值转为时间类型
  2. Docker 核心概念、安装、端口映射及常用操作命令,详细到令人发指。
  3. win7远程桌面连接_Windows10远程桌面使用方法
  4. linux上qt配置opengl,Ubuntu下配置Qt+OpenGL+OpenCV
  5. codevs1079 回家
  6. 广义表的长度和深度怎么算_最新详细个人所得税税率表!快看最新个人所得税怎么算!...
  7. win32 ——定时器消息 小程序:打印时间
  8. 《算法:C语言实现》阅读笔记
  9. 机房重构——UML图最终版本
  10. java http proxy server
  11. Gerber文件各层的介绍
  12. C语言——输入输出格式
  13. ts无损剪辑合并_视频剪切合并器下载-视频剪切合并器 v13.4免费版
  14. java数据库驱动加载失败_Java连接数据库,成功加载SQL驱动程序,但数据库连接失败...
  15. 武汉科技大学计算机学院生产实习,武汉科技大学实习工作管理办法
  16. 让电脑自动开机、关机以及取消开机密码
  17. 全国省市县三级数据库
  18. 调整Node运行内存全攻略
  19. 解读小红书2022年母婴行业报告:心智种草的流量密码
  20. 究竟wifi是怎么定位我的

热门文章

  1. html的下拉刷新页面,html下拉刷新上拉加载Refresher3.0
  2. 「一本通 6.5 练习 3」迷路
  3. 本地连接远程代码库——生成公钥SSH Key(Linux版)
  4. OpenCV精进之路(十五):特征检测和特征匹配方法汇总
  5. 面经——2022届CVTE提前批
  6. python 设计模式之组合模式Composite Pattern
  7. 精确光源(Punctual Light Sources)
  8. 短信猫软件的实现(C#)九7bitPDU的编码
  9. 控制图纸多线相交交点凸起(Control PolyLine Bulge open and close )
  10. Bailian4120 硬币【0-1背包】