0%

ClickHouse 与 Doris 数据库深度分析

OLAP 数据库(计算 & 存储一体)

ClickHouse 几大特点(By Yandex):

优势

起源于 网站流量分析服务

  • MPP 架构(列存储)
  • 数据 “批” 写入(写入太频繁会导致小文件)
  • 宽表,明细表存储
  • 大数据量单表聚合查询
  • 对数据一致性要求低
  • 支持 Ad-hoc 查询
  • 向量化执行引擎

局限性

  • 避免多表查询
  • 避免高并发数据查询

业务研发中局限性

  • spark 不支持处理 CK uint64的格式
  • flink sql 不支持处理 map、tuple 类型的数据

实操

建本地表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE IF NOT EXISTS zypp_zzh.zs_zypprb_sku_ord_v1_local ON CLUSTER LF0_CK_Pub_15 (
dates String,
sale_ord_id String,
item_sku_id String,
gmv UInt64,
rev UInt64,
zm UInt64,
biaoji String,
daiding2 String,
daiding3 String,
zm_notax UInt64,
dt String,
channel String
) ENGINE = ReplicatedMergeTree('/clickhouse/LF0_CK_Pub_15/jdob_ha/zypp_zzh/zs_zypprb_sku_ord_v1_local/{shard}', '{replica}')
// jdob_ha,固定
PARTITION BY (dt, channel)
ORDER BY (gmv) TTL toDate(dt) + INTERVAL 720 DAY
SETTINGS storage_policy ='jdob_ha'
建分布式表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE IF NOT EXISTS zypp_zzh.zs_zypprb_sku_ord_v1_dist ON CLUSTER LF0_CK_Pub_15 (
dates String,
sale_ord_id String,
item_sku_id String,
gmv UInt64,
rev UInt64,
zm UInt64,
biaoji String,
daiding2 String,
daiding3 String,
zm_notax UInt64,
dt String,
channel String
) ENGINE = Distributed(
LF0_CK_Pub_15,
zypp_zzh,
zs_zypprb_sku_ord_v1_local,
rand()
);

Doris 几大特点(By Baidu):

源自在线广告系统,偏交易系统数据分析

  • MPP 架构(列存储)
  • 数据 “批” 写入(写入太频繁会导致小文件)
  • 主键更新(merge on read)
  • 支持 Ad-hoc 查询
  • 支持原生导数功能

OLAP 数据库业务场景

  • 主要用来做快速即席查询(Ad-Hoc 产品)
  • 用来作为实时数据仓库的选型
  • 可以作为 实时看板、大屏的 数据源
  • 用户画像(一张或多张用户的特征表),用户数据的圈人服务(将数据同步到 CK 进行聚合查询、快速圈人)
  • 实时监控(Flink -> Grafana)
  • 用户行为分析(路径分析、漏斗分析)

实操

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE IF NOT EXISTS test_doris.example_tbl
(
`timestamp` DATE NOT NULL COMMENT "['0000-01-01', '9999-12-31']",
`type` TINYINT NOT NULL COMMENT "[-128, 127]",
`error_code` INT COMMENT "[-2147483648, 2147483647]",
`error_msg` VARCHAR(300) COMMENT "[1-65533]",
`op_id` BIGINT COMMENT "[-9223372036854775808, 9223372036854775807]",
`op_time` DATETIME COMMENT "['0000-01-01 00:00:00', '9999-12-31 23:59:59']",
`target` float COMMENT "4 字节",
`source` double COMMENT "8 字节",
`lost_cost` decimal(12,2) COMMENT "",
`remark` string COMMENT "1m size",
`op_userid` LARGEINT COMMENT "[-2^127 + 1 ~ 2^127 - 1]",
`plate` SMALLINT COMMENT "[-32768, 32767]",
`iscompleted` boolean COMMENT "true 或者 false"
)
DUPLICATE KEY(`timestamp`, `type`)
DISTRIBUTED BY HASH(`type`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1"
);

ClickHouse VS Doris VS StarRocks

  • 都是 MPP 架构数据库
  • StarRocks 建立在 Hadoop 之上,通过 HDFS来存储数据
  • CK在查询时,需要去除重复数据;Doris在insert时做聚合;
  • StarRocks优势:兼容 Mysql 协议;全面向量化执行;丰富数据模型(明细、聚合、主键、更新模型[merge on read])
  • ClickHouse优势:主索引&二级索引;MergeTree表;计算算子全面向量化

Welcome to my other publishing channels