大数据OLAP系统 (1)
数据生产面临的挑战
数据爆炸,每日使用最新维度对历史数据进行回溯计算。在Kylin的MOLAP模式下存在如下问题:
- 历史数据每日刷新,失去了增量的意义。
- 每日回溯历史数据量大,10亿+的历史数据回溯。
- 数据计算耗时3小时+,存储1TB+,消耗大量计算存储资源,同时严重影响SLA的稳定性。
- 预计算的大量历史数据实际使用率低下,实际工作中对历史的回溯80%集中在近1个月左右,但为了应对所有需求场景,业务要求计算近半年以上的历史。
- 不支持明细数据的查询。
引入MPP引擎,数据现用现算
历史数据预计算成本巨大,最好的办法就是现用现算,但现用现算需要强大的并行计算能力。
OLAP的实现有 MOLAP、ROLAP、HOLAP 三种形式。
MOLAP 以Cube为表现形式,但计算与管理成本较高。
ROLAP 需要强大的关系型DB引擎支撑。
长期以来,由于传统关系型DBMS的数据处理能力有限,所以ROLAP模式受到很大的局限性。随着分布式、并行化技术成熟应用,MPP引擎逐渐表现出强大的高吞吐、低时延计算能力,号称“亿级秒开”的引擎不在少数,ROLAP模式可以得到更好的延伸。单从业务实际应用考虑,性能在千万量级关联查询现场计算秒开的情况下,已经可以覆盖到很多应用场景,具备应用的可能性。例如:日数据量的ROLAP现场计算,周、月趋势的计算,以及明细数据的浏览都可以较好的应对。
MOLAP模式的劣势
- 应用层模型复杂,根据业务需要以及Kylin生产需要,还要做较多模型预处理。这样在不同的业务场景中,模型的利用率也比较低。
- Kylin配置过程繁琐,需要配置模型设计,并配合适当的“剪枝”策略,以实现计算成本与查询效率的平衡。
- 由于MOLAP不支持明细数据的查询,在“汇总+明细”的应用场景中,明细数据需要同步到DBMS引擎来响应交互,增加了生产的运维成本。
- 较多的预处理伴随着较高的生产成本。
ROLAP模式的优势
- 应用层模型设计简化,将数据固定在一个稳定的数据粒度即可。比如商家粒度的星形模型,同时复用率也比较高。
- App层的业务表达可以通过视图进行封装,减少了数据冗余,同时提高了应用的灵活性,降低了运维成本。
- 同时支持“汇总+明细”。
- 模型轻量标准化,极大的降低了生产成本。
综上所述,在变化维、非预设维、细粒度统计的应用场景下,使用MPP引擎驱动的ROLAP模式,可以简化模型设计,减少预计算的代价,并通过强大的实时计算能力,可以支撑良好的实时交互体验。
双引擎下的应用场景适配问题
架构上通过MOLAP+ROLAP双引擎模式来适配不同应用场景
技术权衡
MOLAP:通过预计算,提供稳定的切片数据,实现多次查询一次计算,减轻了查询时的计算压力,保证了查询的稳定性,是“空间换时间”的最佳路径。实现了基于Bitmap的去重算法,支持在不同维度下去重指标的实时统计,效率较高。
ROLAP:基于实时的大规模并行计算,对集群的要求较高。
MPP引擎的核心是通过将数据分散,以实现CPU、IO、内存资源的分布,来提升并行计算能力。在当前数据存储以磁盘为主的情况下,数据Scan需要的较大的磁盘IO,以及并行导致的高CPU,仍然是资源的短板。因此,高频的大规模汇总统计,并发能力将面临较大挑战,这取决于集群硬件方面的并行计算能力。传统去重算法需要大量计算资源,实时的大规模去重指标对CPU、内存都是一个巨大挑战。目前Doris最新版本已经支持Bitmap算法,配合预计算可以很好地解决去重应用场景。
MOLAP: 当业务分析维度相对固化,并在可以使用历史状态时,按照时间进行增量生产,加工成本呈线性增长状态,数据加工到更粗的粒度(如组织单元),减少结果数据量,提高交互效率。如上图所示,由A模型预计算到B模型,使用Kylin是一个不错的选择。
ROLAP: 当业务分析维度灵活多变或者特定到最新的状态时(如上图A模型中,始终使用最新的商家组织归属查看历史),预计算回溯历史数据成本巨大。在这种场景下,将数据稳定在商家的粒度,通过现场计算进行历史数据的回溯分析,实现现用现算,可以节省掉预计算的巨大成本,并带来较大的应用灵活性。这种情况下适合MPP引擎支撑下的ROLAP生产模式。
MPP引擎的选型
目前开源的比较受关注的OLAP引擎很多,比如 Greenplum、Apache Impala、Presto、Doris、ClickHouse、Druid、TiDB 等等,但缺乏实践案例的介绍,所以我们也没有太多的经验可以借鉴。于是,我们就结合自身业务的需求,从引擎建设成本出发,并立足于公司技术生态融合、集成、易用性等维度进行综合考虑,作为选型依据,最终我们平台部门选择了2018年刚进入Apache社区的Doris。
参考
https://tech.meituan.com/2020/04/09/doris-in-meituan-waimai.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
WEB工程模块拆分设想
WEB工程模块拆分设想 author: HuiFer 首先来看目前使用到的一些开发模块,通常有dao、api、service、task、base、web五种,上述五种内容含义如下: dao:存储数据库实体和mapper相关内容。 api:存储open feign相关接口,为SpringCloud提供服务。 service:存储当前项目中关于业务处理的代码。 task:存储关于定时任务相关代码。 base:存储请求参数,返回参数,枚举等JavaBean对象,不具备高级功能。 web:存储controller、拦截器、过滤器等于web有关代码。 上述这种模块分包是一个比较常用的方式,但是上述分包在笔者开发过程之中产生了很多问题,比如快速找到某一个对象的转换,快速找到某一个对象的缓存处理等问题。为此提出了一种新的分包模式。 领域模型 首先从HTTP请求开始,对于一个请求会有两个内容,请求对象,请求响应对象,一般而言这两个对象是一个比较独立不会有特殊方法的对象(即一个普通的JavaBean),对于这块内容笔者将其分在了领域模型(domain-model),在缓存中的对象也可以放在领域模型中...
- 下一篇
Egret 5.4.1 版本发布,修复文本输入、自定义字体宽度异常等问题
今天,Egret 5.4.1版本发布,重点修复了开发者反馈的文本输入、自定义字体宽度异常、输入框等问题,具体内容见下: [修复]修复无法输入文本的问题。 [修复]修复自定义字体宽度计算异常的问题。 [修复]输入框在输入时会随缩放值而进行变化。 [修复]修复 eui group 嵌套时,scale 为 0 会触发全屏点击的问题。 [修复]修复 eui scroller 嵌套,触发点击事件时无法释放内存的问题。 [修复]修复 DragonBones 层级变化失效的问题。 开发者反馈给我们的其它问题还在陆续解决中,相关进度我们会在社区、社群中陆续公布。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装Nodejs环境