写点什么

听 TalkingData 张宁讲海量数据 OLAP 分析实践

  • 2016-03-24
  • 本文字数:2469 字

    阅读完需:约 8 分钟

在前段时间的一次沙龙分享上,来自 TalkingData 负责企业大数据产品研发的研发总监张宁,分享了题为《海量数据 OLAP 分析实践——TD Atom Cube》的演讲。主要涉及点包括移动 App 数据统计分析、Web 网站数据统计,以及用于企业自有数据和第三方数据管理和应用的 DMP。

本次分享主要分为五个部分:

  1. 实时 OLAP 架构
  2. TD 业务场景分析(以滴滴打车和全民枪战为例)
  3. 基数计算
  4. Bitmap 测试
  5. 测试结果分析

从 2011 年 9 月份成立的 TalkingData,目前正打算做一些统计分析的事情,协助开发者收集数据、分析数据,并提供在特殊场景用特殊的做法来解决问题的方案。此外,TalkingData 的研发部门还在调研开源的 OLAP(On-Line Analytical Processing 联机分析处理)框架。

实时 OLAP 架构

OLAP 可分为两类,一类是 MOLAP,多维交叉,其技术特点是“按最小粒度聚合,预建索引”。另一类是 ROLAP 交互式分析。而众所周知的 MOLAP 又有三种:Kylin、Pinot 和 Druid。这三种当中,druid 目前还不能提供不同应用场景的结合点。Kylin 是 eBay 开发出来的,核心开发团队在国内,也有中文版。

ROLAP 主要用在交互式查询上。据了解,分布式 SQL 查询引擎 Presto 性能最好,京东和美团都在用。Spark 现在发展特别快,新的内存分布式文件和 Spark 结合之后,性能和 Presto 不相上下。

来看(如上图)实时 OLAP 架构,撇开交互式场景而论,典型业务场景和多维交叉场景还是会用实时 OLAP 架构的,下面的分支是流式的,这样的架构是把在海量数据上构建数据仓库的传统概念落地实施。

张宁介绍说,目前 TalkingData 的业务覆盖了几千款 App,例如植物大战僵尸、全民枪战等等,开放的技术平台则是面向所有开发者的。

TalkingData 业务场景分析(以滴滴打车和全民枪战为例)

ETL(数据仓库技术)是英文 Extract Transform Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)和加载(load)至目的端的过程。ETL 较常用在数据仓库,但其对象并不限于数据仓库。张宁解释说,数据分析前都会经过 ETL 过程,将数据清洗成一个比较结构化的事实表,这是一个扁平的模式,首先要考虑的就是日志发生时间。随后还要考虑各种维度:手机机型类型是什么?它适用于哪款应用?这里拿滴滴打车和全民枪战为例,对数据清洗之后再做计算使用时长,全民枪战用了 1800 秒。(如下图)

再来看第二类事实表。表里面的最后一列是具体事件,包括游戏充值、支付、登录和注册等等,这些都是通过对收集上来的数据进行清洗之后呈现出来的。统计全民枪战在不同机型上使用时长的分布,不能把事实表放在存储里,如果是面对客户的话,就一定要生成数据方 (Cube)。(如下图)

时间也是一个非常特殊的维度,所有数据查询到最后分析都是基于时间。中间一列是典型的维度,可能还有其它分辨率,包括运营商等等。最后一列里做了计算,这个表聚合成一个典型的 Cube 之后,数据量是没有多少的。这也为后面再做查询提供了便利,如果数据量有两个数量级的减少的话,不管是查询还是多维交叉分析都会非常快。所以还是拿全民枪战开发公司和滴滴打车这样数量级很庞大的公司来说,不管怎么存储,存储在哪里,都不是大问题,按时间分片放在列数存储,聚合之后没多少数据,能满足每个用户的实时查询需求,方法很简单:优化+提前聚合+生成 Cube+去掉维度。(如下图)

基数计算

这里介绍最简单的三款计算器:HashSet、Linear 和 Hyperloglog,如果只为估算之用,Hyperloglog 是最优选择。如果真要做到精准的排重,那一定是业务场景需求。像面对滴滴打车、手游这种客户,就一定要做到数据精准。

Bitmap 测试

Bitmap 是什么?就是一个位,每个设备可以用一个整型表示,在这个位里面如果出现了就设成 1,用一个一个位表示数据收集的做法,是 1 就有,非 1 就是无,但是这种做法会导致数据量特别大,所以要用压缩算法把这些位连接 1 连接 0 压缩起来,存储和内存所占空间都很小。

所以针对上述三款计算工具做了一些测试,测试数据集在 1 万、100 万、1 千万、1 亿进行对比。主要对比传统的 HashSet 和底 Hyperloglog 之间的区别,结果显示差距还挺大。HashSet 在一万数据的时候,表现还不错。Hyperloglog 在指标上比 HashSet 优秀,分统越多性能越快。到 100 万的时候,Bitmap 的优势显现,特别是在空间复杂度上,比 Hashset 高了一个数量级,和 Hyperloglog 类似。

1000 万的时候还是 Bitmap 处于优势。但是到了一个亿,Hashset 在离散的情况下最极端的离散是 101010,压缩性能最低,内存使用应该是 215 兆。得出的结论是,Hyberloglog 等数量级消耗的时间和资源都是最优的,但如果是精准统计基数的话,就不一定了。

测试总结:

  • HyperLogLog Counting 对同等体量数据集计算时所消耗的计算资源和内存资源全面优于 Bitmap 方法和 Hashmap 方法。
  • HyperLogLog Counting 的精度大体上与 bucket 数成正比。对于百万至千万级别的数据集 1024 基本满足需求。
  • 百万级别数据集如果需要高精度的基数,使用 Bitmap 完全可以满足需求。

百万级别的数据集 Bitmap 表现特别优异,所以 TalkingData 最后选择了 Bitmap 这种方式。

随后,张宁也介绍了 TalkingData 自己开发的 TD Atom Cube,因为受 Concise 算法的限制,再加上团队数据体量的不断增加,所以团队从 0 开始,做交叉从上层分开来做。但是后来发现 Roaring Bitmaps 没有上限,同时也使用了 Spark 和 Join,但是 Bitmap 场景不是用 Bitmap,而是用 Cude,用 Bitmap 来做 future。后来通过测试,发现计算时间和存储时间都优于 Concise,但这只是实验阶段测。在其他测试中发现海量数据没有一万的数据,这种场景几乎很少存在,用 Roaring Bitmaps 是比较合适的。

测试总结为:

  • Hyberloglog 误差还是很大。
  • Roaring 没有上限,可以避免上一层的工作。
  • 在大数据集上超过一百万,无论在加载时间、计算更快,使用空间更少。

将来怎么做?张宁说一直也在关注其它的开源框架,希望能够结合开源工具来解决非精准基数计算。同时也想办法把 Atom Cube 这种能力集成进去,在一些精准基数计算场景下用 Bitmap 来做 Cube,非精准计算用原生 Druid 做法,包括 Hyperloglog 计算。

2016-03-24 09:247018
用户头像

发布了 182 篇内容, 共 107.9 次阅读, 收获喜欢 210 次。

关注

评论 1 条评论

发布
用户头像
Lylin?Kylin 错别字吧
2021-01-29 09:43
回复
没有更多了
发现更多内容

【网络安全】8个网络安全名词解释看这里!

行云管家

网络安全 防火墙 数据安全 堡垒机

【等保】二级等保常见问题解答汇总

行云管家

网络安全 等保 等保2.0 二级等保

纯 JS 实现 WebRTC 视频通话

杨成功

音视频 WebRTC

破浪人丨国内首位 Envoy Maintainer!王佰平独家讲述四年开源之路

网易数帆

开源 云原生 Service Mesh 服务网格 envoy

Kubernetes家族容器小管家Pod在线答疑?

囧么肥事

Kubernetes 云原生 k8s #Kubernetes# 容器服务

http server源码解析

爱好编程进阶

Java 面试 后端开发

一文看懂“低代码,零代码,APAAS”是什么?怎么选?

优秀

低代码 零代码 aPaaS

如何调节鼠标的灵敏度?

InfoQ IT百科

java程序员的AI之路-大数据篇 hadoop安装

爱好编程进阶

Java 面试 后端开发

云小课|教你如何使用RDS for PostgreSQL插件

华为云开发者联盟

postgresql 插件 开源数据库 RDS for PostgreSQL

通过 SingleFlight 模式学习 Go 并发编程

万俊峰Kevin

微服务 并发编程 web开发 go-zero Go 语言

所以,我们依然要读书!

博文视点Broadview

Google 出品的 Java 编码规范,权威又科学,强烈推荐

爱好编程进阶

Java 面试 后端开发

DevSecOps软件安全开发实践

华为云开发者联盟

开源 DevSecOps 安全开发 华为云DevCloud 软件研发

跟我读CVPR 2022论文:基于场景文字知识挖掘的细粒度图像识别算法

华为云开发者联盟

图像识别 推理 视觉 文字检测 语义信息

Java中return和finally到底哪个先执行

爱好编程进阶

Java 面试 后端开发

Java中使用Spring-security(一)

爱好编程进阶

Java 面试 后端开发

电脑分区C盘格式化会怎样?

InfoQ IT百科

一文深入Java浅拷贝和深拷贝

芝士味的椒盐

Java 大数据 Java 开发 深拷贝 浅拷贝

怎么样判断显卡性能好坏?

InfoQ IT百科

Java 集合容器篇面试题(上)-王者笔记

爱好编程进阶

Java 面试 后端开发

Java并发关键字-volatile

爱好编程进阶

Java 面试 后端开发

抖音春晚活动背后的 Service Mesh 流量治理技术

火山引擎开发者社区

微服务 后端 后端技术

焱融 YRCloudFile 跨云多源数据管理,直击自动驾驶 “割裂式存储”痛点

焱融科技

自动驾驶 云计算 分布式 高性能 文件存储

java 使用Html2Image将html转图片

爱好编程进阶

Java 面试 后端开发

聊一聊龙蜥硬件兼容性 SIG 那些事儿 | 龙蜥 SIG

OpenAnolis小助手

开源 sig 硬件兼容 龙蜥操作系统

电脑内存越大处理速度就越快吗?

InfoQ IT百科

OneFlow学习笔记:从Python到C++调用过程分析

OneFlow

c++ Python Relu 调用过程分析

Windows操作系统升级后会出现与CPU不兼容情况吗?

InfoQ IT百科

电脑硬件中光驱的作用是什么?

InfoQ IT百科

前端食堂技术周刊第 34 期:Node.js v18 、Nuxt 3 RC1、Parcel v2.5.0、计算机程序的构造和解释、Linux 命令行世界生存指南

童欧巴

JavaScript 前端 技术周刊

听TalkingData张宁讲海量数据OLAP分析实践_语言 & 开发_Xue Liang_InfoQ精选文章