【 作 者 介 绍 】 王 磊 , 阿 里 云 M V P , 华 院 计 算 技 术 总 监 。 著 有 : 《 图 解 S p a r k 大 数 据 快 速 分 析 实 战 》 ; 《 o f f e r 来 了 : J a v a 面 试 核 心 知 识 点 精 讲 ( 原 理 篇 ) 》 ; 《 o f f e r 来 了 : J a v a 面 试 核 心 知 识 点 精 讲 ( 架 构 篇 ) 》 ; 极 客 时 间 每 日 一 课 专 栏 作 者 。
编 辑 | 韩 楠
约 5 1 0 0 字 | 1 0 分 钟 阅 读
问题背景
我 们 的 广 告 平 台 的 数 据 , 包 括 实 时 数 据 和 离 线 数 据 。 实 时 数 据 首 先 会 发 送 到 消 息 系 统 , 然 后 在 消 息 系 统 中 进 行 流 转 批 , 最 终 将 转 换 后 的 数 据 存 储 在 S 3 上 , 离 线 数 据 则 直 接 调 用 S 3 的 A P I 将 数 据 存 储 在 S 3 上 。 S 3 上 存 储 的 数 据 格 式 有 : C S V 、 T X T 、 P a r q u e t 、 O R C 等 。

图 1
查 询 的 时 候 通 过 A t h e n a 、 S p a r k 或 者 H a d o o p 进 行 查 询 分 析 。 最 终 分 析 的 数 据 用 于 B I 、 统 计 报 表 和 告 警 规 则 等 。
这 种 方 案 的 好 处 是 多 源 数 据 入 库 方 便 , 并 且 查 询 的 时 候 , 在 A t h e n a 中 通 过 标 准 S Q L 按 照 不 同 的 需 求 , 可 以 进 行 任 何 维 度 的 数 据 分 析 。
但 是 这 种 方 案 有 一 个 很 大 的 缺 点 就 是 查 询 效 率 慢 , 并 且 多 源 数 据 的 一 致 性 难 以 保 障 。 一 般 对 T B 级 别 数 据 量 的 分 析 耗 时 在 2 0 秒 以 上 , 因 此 它 更 适 合 于 离 线 数 据 分 析 。 这 也 是 大 数 据 行 业 比 较 典 型 的 离 线 数 仓 方 案 。

图
2
梳理分析,解决问题
怎
么
做
既
能
够
将
多
源
数
据
进
行
融
合
,
又
能
实
现
快
速
实
时
的
分
析
数
据
。
同
时
服
务
器
的
预
算
又
能
控
制
在
合
理
的
范
围
内
,
这
个
问
题
,
可
以
说
一
直
是
我
们
架
构
优
化
的
方
向
。
由 于 离 线 数 据 的 缺 点 随 着 数 据 量 的 增 大 越 来 越 被 放 大 , 因 此 我 们 迫 切 需 要 一 个 既 能 快 速 融 合 和 分 析 多 源 数 据 , 同 时 又 经 济 实 惠 的 实 时 数 仓 的 方 案 。 经 过 内 部 讨 论 , 这 个 方 案 需 要 满 足 这 样 的 一 些 条 件 , 梳 理 了 七 点 。

图 3
上 面 7 个 关 键 点 , 第 3 、 4 点 是 目 前 实 时 数 仓 建 立 的 核 心 需 求 , 也 是 难 点 。
值 得 注 意 的 是 :
任 何 解 决 方 案 都 没 有 完 美 的 , 我 们 只 能 在 大 量 的 实 践 摸 索 中 不 断 加 以 完 善 、 丰 富 。 我 们 的 实 时 数 仓 基 于 C l i c k H o u s e 的 p r o j e c t i o n 在 构 建 主 题 上 探 索 出 了 比 较 好 的 方 案 , 但 是 基 于 数 据 变 更 的 自 动 感 知 , 目 前 仍 然 不 是 个 比 较 完 美 的 解 决 方 案 , 后 续 的 实 践 中 还 需 要 进 一 步 完 善 。 行 业 里 该 方 案 其 实 也 处 于 探 索 阶 段 。
言 归 正 传 , 刚 刚 经 过 前 面 的 需 求 分 析 , 我 们 十 分 明 确 的 一 点 是 “ 需 要 一 个 实 时 数 仓 平 台 ” 。 但 是 如 何 根 据 我 们 目 前 的 需 求 在 投 入 最 少 的 情 况 下 , 获 得 最 多 的 收 入 呢 ? 为 了 达 到 上 面 的 目 标 , 我 们 对 市 场 上 的 实 时 数 仓 方 案 进 行 了 分 析 , 最 终 确 定 基 于 S t a r t R o c k s 或 者 C l i c k H o u s e 构 建 实 时 数 仓 。 来 一 起 看 看 具 体 的 实 现 方 式 :
-
将 数 据 源 上 的 实 时 数 据 直 接 写 入 消 费 服 务 。
-
对 于 数 据 源 为 离 线 文 件 的 情 况 , 有 两 种 处 理 方 式 , 一 种 是 将 文 件 转 为 流 式 数 据 写 入 K a f k a , 另 外 一 种 情 况 是 直 接 将 文 件 通 过 S Q L 导 入 C l i c k H o u s e 集 群 。
-
C l i c k H o u s e 接 入 K a f k a 消 息 , 并 将 数 据 写 入 对 应 的 原 始 表 , 基 于 原 始 表 可 以 构 建 物 化 视 图 、 P r o j e c t 等 实 现 数 据 聚 合 和 统 计 分 析 。
-
应 用 服 务 基 于 C l i c k H o u s e 数 据 对 外 提 供 B I 、 统 计 报 表 、 告 警 规 则 等 服 务 。

图
4
解决问题的核心关键点
在 S t a r R o c k s 、 C l i c k H o u s e 这 两 种 方 案 中 , 我 们 经 过 性 能 和 功 能 上 的 比 较 , 最 终 选 择 了 C l i c k H o u s e 。 这 里 可 能 有 人 会 想 了 , 那 为 什 么 选 择 C l i c k H o u s e 呢 ? 主 要 原 因 有 这 几 点 。
-
通 过 具 体 的 测 试 发 现 C l i c k H o u s e 在 5 0 T B 约 1 4 0 亿 数 据 上 , 整 体 的 查 询 稳 定 性 和 性 能 优 于 S t a r R o c k s 。
-
C l i c k H o u s e 支 持 源 数 据 载 入 , 具 体 包 括 K a f k a 、 S 3 、 H T T P 、 J D B C 等 。
-
C l i c k H o u s e 支 持 联 邦 查 询 , 可 以 轻 松 将 M y S Q L 或 者 M o n g o D B 的 数 据 和 C l i c k H o u s e 的 数 据 进 行 关 联 查 询 。
-
基 于 p r o j e c t 支 持 数 据 的 实 时 统 计 。
-
基 于 物 化 视 图 支 持 基 于 原 始 的 统 计 数 据 存 储 。
-
支 持 数 据 权 限 。

图 5
介 绍 完 了 我 们 选 择 C l i c k H o u s e 的 原 因 , 下 面 进 入 到 本 文 的 重 头 戏 , 如 何 通 过 C l i c k H o u s e 实 现 我 们 最 初 在 构 建 实 时 数 仓 时 提 出 的 要 求 。
( 一 ) 如 何 保 障 各 种 来 源 的 数 据 能 实 时 地 入 仓。
一 般 我 们 将 多 源 数 据 分 为 离 线 数 据 、 实 时 数 据 和 其 他 周 边 库 数 据 。 离 线 数 据 主 要 指 文 件 数 据 , 实 时 数 据 主 要 是 K a f k a 消 息 队 列 中 的 数 据 、 周 边 库 数 据 指 的 的 类 似 M y S Q L 、 M o n g o D B 等 数 据 。 接 下 来 从 实 战 角 度 , 分 别 说 下 如 何 接 入 各 种 数 据 源 。
( 1 ) M y S Q L 的 数 据 接 入 , 可 以 通 过 使 用 J D B C 方 式 实 现 。
CREATE TABLE user_table( `id` Int32, `user_name` String, `height` Float32, `password` Nullable(String))ENGINE JDBC('jdbc:mysql://localhost:3306/?user=root&password=root', 'test', 'test')
c o d e 1
通 过 前 面 代 码 将 M y S Q L 表 接 入 到 C l i c k H o u s e 后 , 就 可 以 直 接 在 C l i c k H o u s e 中 直 接 查 询 M y S Q L 表 中 的 数 据 。
SELECT * FROM user_table
c o d e 2
同 样 也 可 以 向 M y S Q L 中 插 入 数 据 。
INSERT INTO user_table(`id`, `user_name`) VALUES(1,'alex')
c o d e 3
( 2 ) 下 面 咱 们 看 下 M o n g o D B 的 数 据 接 入 :
CREATE TABLE [IF NOT EXISTS] testdb.test_collection( id UInt64, name String,) ENGINE = MongoDB(127.0.0.1:27017, testdb, test_collection, 'your_user_name', 'your_password');
c o d e 4
表 建 立 好 后 便 可 以 执 行 查 询 语 句 。
SELECT COUNT() FROM test_collection;
c o d e 5
( 3 ) 再 看 下 S 3 的 数 据 接 入 :
CREATE TABLE s3_table (name String, value UInt32) ENGINE=S3(') SETTINGS input_format_with_names_use_header = 0;
c o d e 6
S 3 表 数 据 建 立 好 后 , 我 们 向 其 中 插 入 数 据 。
INSERT INTO s3_table VALUES ('a', 1), ('b', 2), ('c', 3);
c o d e 7
同 样 可 以 像 使 用 关 系 型 数 据 库 一 样 查 询 S 3 数 据 表 。
SELECT * FROM s3_table LIMIT 2;
c o d e 8
( 4 ) K a f k a 数 据 接 入 : C l i c k H o u s e 提 供 了 K a f k a 数 据 接 入 引 擎 , 可 以 方 便 地 实 现 将 K a f k a 的 数 据 接 入 到 C l i c k H o u s e 中 , 并 将 其 插 入 到 C l i c k H o u s e 表 中 。
CREATE TABLE kafka_source_test ( level String, type String, name String, time DateTime64 ) ENGINE = Kafka SETTINGS kafka_broker_list = 'localhost:9092', kafka_topic_list = 'test_topic', kafka_group_name = 'test_group', kafka_format = 'JSONEachRow', kafka_num_consumers = 4;
c o d e 9
SELECT * FROM kafka_source_test LIMIT 5
c o d e 1 0
通 过 前 面 的 介 绍 , 你 可 以 看 到 C l i c k H o u s e 接 入 数 据 源 还 是 比 较 简 单 的 , 其 中 K a f k a 是 构 建 实 时 数 仓 最 常 用 的 数 据 源 。
( 二 ) 数 据 入 仓 能 及 时 被 分 析。
这
里
的
数
据
分
析
分
为
两
种
情
况
,
一
种
情
况
是
有
明
确
需
求
的
报
表
分
析
,
这
种
情
况
下
可
以
对
实
时
数
据
边
入
库
边
分
析
,
具
体
可
以
通
过
建
立
物
化
视
图
的
方
式
实
现
,
也
可
以
通
过
C
l
i
c
k
H
o
u
s
e
的
p
r
o
j
e
c
t
i
o
n
实
现
。
另
外
一
种
情
况
是
随
机
性
的
数
据
分
析
需
求
,
像
这
种
需
求
C
l
i
c
k
H
o
u
s
e
基
于
索
引
可
以
做
到
T
B
级
别
数
据
秒
级
计
算
返
回
。
具
体
的
代
码
实
现
后
面
将
会
介
绍
。
( 三 ) 基 于 实 时 数 仓 能 方 便 的 根 据 业 务 需 求 建 立 主 题 数 据。
我 们 构 建 实 时 数 仓 的 很 大 一 个 初 衷 是 : 当 客 户 有 基 于 主 题 的 报 表 需 求 时 , 我 们 通 过 一 个 配 置 或 者 一 条 S Q L 语 句 , 就 能 实 现 业 务 的 统 计 报 表 。 那 么 具 体 在 C l i c k H o u s e 中 如 何 实 现 呢 ?
其 中 物 化 视 图 和 p r o j e c t i o n , 是 C l i c k H o u s e 实 现 灵 活 的 按 照 业 务 构 建 主 题 数 据 的 具 体 解 决 方 案 , 下 面 咱 们 分 别 对 这 两 个 关 键 知 识 点 进 行 介 绍 。
其 他 更 多 C l i c k H o u s e 的 原 理 和 使 用 , 需 要 同 学 们 在 具 体 使 用 中 查 阅 官 方 文 档 ( h t t p s : / / c l i c k h o u s e . c o m / d o c s / e n / ) 。
1 . 物 化 视 图
虽
然
C
l
i
c
k
H
o
u
s
e
的
性
能
在
T
B
级
别
的
数
据
的
查
询
上
,
已
经
能
达
到
秒
级
返
回
了
,
近
乎
完
美
。
但
是
在
超
大
规
模
和
特
别
复
杂
的
计
算
场
景
下
计
算
耗
时
,
还
是
面
对
一
些
挑
战
,
这
时
我
们
就
需
要
通
过
一
个
类
似
触
发
器
的
机
制
,
将
原
始
数
据
进
行
实
时
汇
总
,
这
样
我
们
统
计
分
析
时
直
接
查
询
汇
总
后
的
表
就
可
以
,
如
此
一
来
,
无
论
对
于
服
务
器
负
载
还
是
业
务
快
速
分
析
的
需
求
都
是
友
好
的
。
那
么
如
何
对
C
l
i
c
k
H
o
u
s
e
数
据
进
行
实
时
分
析
汇
总
呢
?
答
案
就
是
物
化
视
图
。
这 里 得 先 看 下 物 化 视 图 的 原 理 。
物
化
视
图
的
构
建
过
程
中
包
括
一
个
原
表
,
一
个
物
化
视
图
和
一
个
目
标
表
。
物
化
视
图
定
义
了
数
据
物
化
的
计
算
逻
辑
,
当
我
们
向
原
表
插
入
一
条
数
据
时
,
会
触
发
物
化
计
算
,
计
算
完
成
后
将
计
算
结
果
实
时
写
入
目
标
表
。
用
户
查
询
的
时
候
查
询
目
标
表
即
可
完
成
数
据
的
分
析
。

图 6
在 实 际 应 用 中 我 们 对 于 报 表 需 求 , 我 们 通 过 物 化 视 图 来 实 现 , 例 如 对 于 k a f k a _ s o u r c e _ t e s t 中 的 数 据 , 我 们 需 要 基 于 t y p e 字 段 按 照 “ 天 ” 进 行 统 计 。
首 先 我 们 需 要 建 立 一 个 物 化 视 图 的 基 础 表 。
CREATE TABLE statistics_type_day( type String, day Date, type_count UInt32)ENGINE = SummingMergeTree()ORDER BY (type, day)
c o d e 1 1
上 述 建 表 语 句 中 使 用 了 S u m m i n g M e r g e T r e e 引 擎 , 该 引 擎 用 于 统 计 数 据 的 存 储 , 它 能 在 合 并 分 区 的 时 候 , 按 照 预 定 义 条 件 对 数 据 进 行 聚 合 , 将 相 同 分 组 的 多 行 数 据 统 一 到 一 行 , 从 而 显 著 减 少 存 储 空 间 , 加 快 查 询 的 效 率 。
接 下 来 我 们 创 建 一 个 物 化 视 图 , 将 k a f k a _ s o u r c e _ t e s t 表 中 的 数 据 实 时 进 行 统 计 分 析 并 写 入 s t a t i s t i c s _ t y p e _ d a y 表 中 。
CREATE MATERIALIZED VIEW if not exists statistics_type_day_mv TO statistics_type_day AS SELECT type, day, count(1) type_countfrom kafka_source_testgroup by type, day
c o d e 1 2
这 样 当 k a f k a _ s o u r c e _ t e s t 中 有 数 据 的 时 候 , 便 能 实 时 统 计 并 将 统 计 结 果 物 化 下 来 。 查 询 的 时 候 直 接 查 询 物 化 表 s t a t i s t i c s _ t y p e _ d a y 就 行 。
select * from statistics_type_day where day='2022-03-20'
c o d e 1 3
2
.
p
r
o
j
e
c
t
i
o
n
:
数
据
投
影
C l i c k H o u s e 的 p r o j e c t i o n 本 质 上 实 现 的 是 数 据 聚 合 , 小 伙 伴 可 能 要 问 了 , 既 然 C l i c k H o u s e 已 经 有 物 化 视 图 了 , 为 何 还 需 要 p r o j e c t i o n 呢 ?
试 想 这 样 一 个 场 景 , 我 们 有 一 个 1 5 0 个 字 段 的 表 , 基 于 该 表 我 们 针 对 不 同 业 务 构 建 了 2 0 个 物 化 视 图 。 那 我 们 业 务 在 分 析 的 时 候 如 果 查 询 基 础 数 据 就 到 基 础 表 查 询 , 如 果 查 询 的 是 统 计 数 据 则 需 要 在 对 应 的 物 化 视 图 的 统 计 表 中 查 询 。
但 是 在 实 际 的 使 用 过 程 中 , 常 常 因 为 构 建 视 图 和 使 用 视 图 的 人 不 在 一 个 团 队 , 一 种 情 况 是 使 用 者 不 知 道 有 哪 些 视 图 可 以 使 用 , 所 以 在 写 S Q L 的 是 时 候 就 直 接 查 基 表 了 , 另 外 一 种 情 况 是 业 务 需 要 针 对 基 础 表 的 S Q L 和 统 计 表 的 S Q L 维 护 多 个 业 务 S Q L , 在 查 询 上 不 统 一 。

图 7
那 么 如 何 构 建 一 个 表 , 在 该 表 上 既 能 完 成 基 础 数 据 的 查 询 , 也 能 进 行 统 计 数 据 的 查 询 , 如 果 能 实 现 的 话 , 之 前 的 1 + 2 0 个 表 S Q L 的 维 护 就 变 成 了 1 张 表 S Q L 的 维 护 。 使 用 起 来 将 大 大 简 化 应 用 层 开 发 , 应 用 层 也 不 用 关 注 哪 些 是 统 计 数 据 , 哪 些 是 基 础 数 据 。
C l i c k H o u s e 的 p r o j e c t i o n 给 了 这 个 问 题 一 个 很 好 的 解 决 方 案 。
p
r
o
j
e
c
t
i
o
n
在
数
据
分
析
功
能
上
类
似
于
物
化
视
图
,
我
们
可
以
在
p
r
o
j
e
c
t
i
o
n
中
预
定
义
表
达
式
,
当
数
据
写
入
的
时
候
,
会
将
原
始
数
据
和
针
对
p
r
o
j
e
c
t
i
o
n
中
表
达
式
计
算
后
的
聚
合
数
据
一
起
写
入
存
储
。
在
查
询
的
时
候
会
经
过
一
个
智
能
路
由
的
过
程
,
智
能
路
由
通
过
分
析
S
Q
L
语
句
,
如
果
发
现
S
Q
L
语
句
查
询
的
数
据
都
在
聚
合
数
据
中
,
则
直
接
查
询
聚
合
数
据
并
将
结
果
返
回
给
用
户
,
这
块
便
大
大
减
少
了
服
务
器
资
源
的
开
销
,
只
有
到
查
询
的
数
据
在
各
个
p
r
o
j
e
c
t
i
o
n
都
不
存
在
的
时
候
才
会
去
查
基
表
进
行
统
计
。
也
可
以
理
解
为
C
l
i
c
k
H
o
u
s
e
基
于
p
r
o
j
e
c
t
i
o
n
自
动
完
成
了
查
询
优
化
。
(
具
体
参
见
下
图
)

图 8
了 解 了 p r o j e c t i o n 原 理 后 , 接 下 来 我 们 看 下 如 何 使 用 p r o j e c t i o n , 首 先 需 要 定 义 p r o j e c t i o n 。
CREATE TABLE test_projection_table( level String, type String, name String, city String, time DateTime64, PROJECTION projection_1 ( SELECT name, count(1) GROUP BY level ) , PROJECTION projection_2 ( SELECT name, count(1) GROUP BY type ) ) ENGINE = MergeTree() ORDER BY (name , level, type)
c o d e 1 4
上 述 代 码 在 定 义 表 的 时 候 定 义 了 p r o j e c t i o n _ 1 和 p r o j e c t i o n _ 2 , 其 中 p r o j e c t i o n _ 1 在 l e v e l 维 度 对 数 据 进 行 汇 总 , p r o j e c t i o n _ 2 在 t y p e 维 度 对 数 据 进 行 汇 总 。 在 创 建 好 p r o j e c t i o n 后 还 可 以 对 p r o j e c t i o n 进 行 修 改 。
ALTER TABLE test_projection_table ADD PROJECTION projection_3 ( SELECT count(1), name GROUP BY type, level )
c o d e 1 5
那 么 查 询 的 时 候 , 如 何 才 能 命 中 p r o j e c t i o n 呢 ? 得 满 足 这 样 几 个 条 件 :
-
s e l e c t 表 达 式 必 须 为 p r o j e c t i o n 定 义 中 s e l e c t 表 达 式 的 子 集 。
-
g r o u p b y 列 必 须 为 p r o j e c t i o n 定 义 中 g r o u p b y 列 的 子 集 。
-
w h e r e 条 件 必 须 为 p r o j e c i t o n 定 义 中 的 g r o u p b y 列 的 子 集 。
例 如 这 里 S Q L 查 询 的 时 候 会 走 表 达 式 :
select name,count() from test_projection_table where type='A' group by type
c o d e 1 6
而 S Q L 不 会 走 p r o j e c t i o n , 因 为 c i t y 不 在 p r o j e c t i o n 的 定 义 中 。
select name,city,count() from test_projection_table where type='A' group by city
c o d e 1 7
具 体 可 以 通 过 e x p l a i n 查 看 执 行 计 划 , 如 果 出 现 R e a d F r o m S t o r a g e ( M e r g e T r e e ( w i t h p r o j e c t i o n ) ) , 表 示 命 中 p r o j e c t i o n 。
( 四 ) 实 时 数 仓 需 要 提 供 元 数 据 变 更 的 自 动 感 知 能 力 。
对 于 元 数 据 的 变 更 C l i c k H o u s e 无 法 做 到 自 动 感 知 , 我 们 构 建 了 一 个 元 数 据 管 理 平 台 , 实 时 监 C l i c k H o u s e I n s e r t 语 句 , 当 发 现 有 新 的 S c h e m a 变 更 后 以 告 警 的 形 式 通 知 研 发 人 员 , 有 研 发 人 员 修 改 表 结 构 以 兼 容 元 数 据 的 变 更 。
( 五 ) 实 时 数 仓 难 免 需 要 要 外 部 数 据 交 互 , 因 此 实 时 数 仓 需 要 具 备 联 邦 查 询 的 能 力 。
对 于 联 邦 查 询 , 我 们 将 外 部 库 表 数 据 接 入 C l i c k H o u s e 并 和 C l i c k H o u s e 进 行 联 邦 查 询 。
( 六 ) 对 外 提 供 一 个 统 一 的 数 据 分 析 服 务 , 用 户 不 用 关 心 数 仓 底 层 数 据 复 杂 的 关 系 关 系 。
在 查 询 上 我 们 利 用 p r o j e c t i o n 特 性 将 查 询 统 一 到 一 个 表 上 , 除 非 有 特 别 特 殊 的 需 求 会 走 物 化 视 图 。
( 七 ) 需 要 确 保 实 时 数 仓 中 存 储 的 数 据 量 在 合 理 的 访 问 内 , 以 确 保 不 会 产 生 过 多 的 服 务 器 资 源 账 单 。
在 控 制 数 据 的 存 储 量 上 我 们 通 过 C l i c k H o u s e 的 冷 热 分 离 思 想 , 将 热 数 据 存 储 在 C l i c k H o u s e 上 , 将 冷 数 据 存 储 在 S 3 上 , 以 控 制 服 务 器 资 源 。

图 9
结束语
本
文
我
介
绍
了
如
何
基
于
C
l
i
c
k
H
o
u
s
e
的
百
亿
级
广
告
平
台
实
时
数
仓
构
建
实
战
。
在
数
仓
的
构
建
前
期
我
们
首
先
基
于
数
据
要
达
成
的
目
标
进
行
了
梳
理
。

图 1 0
我 们 在 S t a r R o c k s 、 C l i c k H o u s e 选 型 上 , 基 于 性 能 原 因 我 们 选 择 了 C l i c k H o u s e 。 在 具 体 的 实 现 细 节 上 我 们 没 有 像 传 统 数 仓 那 样 构 建 完 成 的 O D S 、 D W D 、 D W S 、 A D S 层 , 而 是 借 助 C l i c k H o u s e 的 物 化 视 图 和 p r o j e c t i o n 完 成 我 们 构 建 实 时 数 仓 的 目 标 。
其 实 在 该 架 构 中 , 可 以 将 接 入 K a f k a 原 表 和 外 部 表 的 数 据 理 解 为 O D S ( 贴 源 数 据 层 ) , 将 经 过 数 据 清 洗 转 换 后 的 基 础 表 理 解 为 D W D ( 数 据 明 细 层 ) , 将 基 于 基 础 表 衍 生 的 物 化 视 图 和 p r o j e c t i o n 等 统 计 数 据 理 解 为 D W S ( 轻 度 汇 总 层 ) , 基 于 视 图 我 们 还 可 以 接 着 构 建 视 图 , 表 和 p r o j e c t i o n 。

图 1 1
延伸思考
前 面 给 大 家 介 绍 了 我 们 的 实 时 数 仓 的 方 案 , 那 么 实 时 数 仓 是 如 何 演 化 来 的 呢 ? 下 面 多 说 几 句 , 跟 大 家 从 宏 观 上 说 下 大 数 据 的 行 业 发 展 , 以 便 于 能 够 从 一 个 更 高 视 角 理 解 实 时 数 仓 。 只 有 大 家 了 解 了 大 数 据 的 发 展 历 程 , 才 能 更 好 地 理 解 在 当 下 企 业 建 立 实 时 数 仓 的 必 要 性 , 以 及 我 们 未 来 实 时 数 仓 未 来 的 发 展 方 向 。
快 速 方 便 地 构 建 基 于 主 题 的 统 计 数 据 , 一 直 是 大 数 据 行 业 的 痛 点 , 最 初 解 决 该 问 题 的 方 案 是 H a d o o p 和 S p a r k 的 离 线 计 算 , 但 随 着 业 务 的 发 展 , 这 两 种 方 案 在 数 据 实 时 性 上 的 短 板 越 来 越 明 显 。 行 业 急 需 一 个 实 时 数 仓 方 案 , 但 是 在 实 时 数 仓 中 如 果 基 于 F l i n k 进 行 实 时 计 算 的 话 , 对 于 业 务 的 频 繁 变 更 带 来 的 开 发 成 本 又 变 得 不 可 控 。 因 此 大 家 又 把 目 光 投 向 了 M P P 架 构 , 这 种 架 构 基 本 上 达 到 了 1 个 S Q L 就 能 满 足 一 个 业 务 报 表 的 需 求 , 方 便 快 速 , 数 据 又 是 实 时 计 算 的 , 基 本 满 足 了 我 们 的 要 求 。 但 是 其 在 分 布 式 事 务 和 元 数 据 的 自 动 感 知 上 , 还 有 待 完 善 。
从
上
面
的
趋
势
中
也
可
以
看
到
大
数
据
发
展
的
阶
段
,
第
一
阶
段
大
家
基
于
大
型
M
y
S
Q
L
的
分
库
分
表
实
现
大
规
模
数
据
的
存
储
和
分
析
,
但
是
随
着
数
据
量
的
增
大
,
这
个
方
案
玩
不
转
了
。
于
是
出
现
了
H
a
d
o
o
p
和
S
p
a
r
k
来
解
决
海
量
数
据
计
算
问
题
。
等
海
量
数
据
计
算
的
需
求
满
足
后
大
家
又
对
数
据
的
实
时
性
要
求
更
高
了
,
业
务
总
想
看
着
最
新
的
数
据
,
于
是
出
现
了
实
时
数
仓
。

图
1
2
但 是 问 题 到 这 里 并 没 有 完 , 后 续 必 然 在 实 时 数 仓 的 分 布 式 数 据 一 致 性 , 事 务 的 支 持 , 元 数 据 的 动 态 管 理 和 数 据 治 理 上 , 有 更 多 的 需 求 出 现 。 这 个 也 是 大 数 据 行 业 下 个 阶 段 要 解 决 的 重 点 问 题 。
因 此 大 数 据 不 像 关 系 型 数 据 库 那 样 有 稳 定 的 解 决 方 案 , 而 是 根 据 行 业 的 变 化 和 用 户 的 需 求 在 不 断 的 迭 代 和 更 新 。 其 最 终 目 标 是 既 能 像 关 系 数 据 库 那 样 满 足 A C I D 的 需 求 , 又 具 有 大 规 模 数 据 实 时 计 算 的 能 力 和 灵 活 的 数 据 分 析 能 力 。
最 后 要 说 的 是 C l i c k H o u s e 之 所 以 性 能 优 异 , 是 因 为 它 采 用 了 向 量 化 计 算 技 术 。 将 多 次 C P U 计 算 优 化 为 一 次 C P U 计 算 , 从 而 大 大 提 升 了 C P U 的 效 率 。 具 体 实 现 技 术 手 段 为 采 用 S I M D ( S i n g l e I n s t r u c t i o n M u l t i p l e D a t a ) 技 术 实 现 单 条 指 令 操 作 多 条 数 据 , 在 C P U 寄 存 器 层 面 实 现 数 据 的 并 行 操 作 。
向 量 化 计 算 可 以 说 是 M P P 架 构 的 “ 银 弹 ” , 目 前 C l i c k H o u s e 和 S t a r R o c k s 都 采 用 了 这 个 技 术 方 案 来 达 到 海 量 数 据 快 速 分 析 的 , 后 续 肯 定 会 有 更 多 的 数 据 库 方 案 跟 进 该 技 术 。 限 于 篇 幅 问 题 在 这 里 不 能 为 大 家 详 细 介 绍 向 量 化 计 算 的 魅 力 , 后 续 如 果 大 家 感 兴 趣 我 再 单 独 拿 出 来 讲 一 下 。
最 后 , 欢 迎 你 在 评 论 区 留 言 与 交 流 , 也 可 以 把 这 一 篇 分 享 给 你 的 朋 友 , 我 们 下 期 再 会 。