ClickHouse和ES在人群圈选上的对比

ES标签存储的痛点

  • 标签导入到ES的时间过长,需要等待各种数据准备就绪,才能关联查询
  • Mapping在建好之后不能更改字段类型
  • 新增或修改标签,不能够实时进行
  • ES的DSL语法对用户不太友好

ClickHouse替代ES标签存储

  • 相同数据量下,ClickHouse的聚合性能优于ES
  • ClickHouse写入吞吐量优于ES
  • ClickHouse数据压缩优于ES
  • ClickHouse采用SQL语法,学习成本低

ES人群圈选

ES圈选过程

ClickHouse人群圈选

ClickHouse人群圈选

ClickHouse标签存储和人群圈选的优势

  • 高效的批量数据导入性能
  • 实时update的能力
  • 具备添加/减少列的DDL的能力
  • 指定任意列作为过滤条件的高效查询能力

ClickHouse集成Bitmap

什么是Bitmap

  • 通过一个bit数组来存储特定数据的一种数据结构
  • Bitmap节省大量的存储空间
  • Bitmap能够能方便进行位运算

Bitmap位运算

  • 单个Bitmap可以精确的去重
  • 位运算:or、and、xor、not
  • 多个Bitmap通过位运算可以完成留存分析,用户画像分析等场景的计算

Bitmap缺点

  • 存储的Bitmap越大,需要的外部存储空间就越大
  • Bitmap位数越多,计算时消耗的cpu时间也越多
  • 当数据比较稀疏时,Bitmap比较浪费空间

Bitmap压缩算法

  • 基于RLE编码的压缩算法
  • 基于Roaring算法的压缩算法(被广泛使用的高效的Bitmap压缩算法)

RoaringBitmap原理

有3种类型的容器

  • Array Container
  • Run Container
  • Bitmap Container

对于32位的整数,划分为高16位和低16位
将低16位的数放入容器,当容器包含的数小于4096个,认为其稀疏,用Array Container保存
将低16位的数放入容器,当容器包含的数大于4096个,认为其密集,用Bitmap Container保存

两个对比

RoaringBitmap优点

  • RoaringBitmap比Bitmap减少内存
  • RoaringBitmap在交集和并集操作速度比Bitmap快

ClickHouse标签表设计的2种思路

  • 大宽表
    缺点:增加或删除标签字段时,表结构需要修改;当圈选的人群数量较大时,涉及到groupby的性能差
  • Bitmap表

Hive导入数据到ClickHouse的几种方式

  • Spark使用JDBC
  • 通过dataX
  • 通过HDFS
  • 通过WaterDrop(主流方式)

WaterDrop

能够应用于Spark与Flink

  • 高性能
  • 简单易用
  • 海量数据处理能力
  • 多元数据处理

将Hive数据转换为ClickHouse的Bitmap

  1. 通过groupArray构造数组
  2. 构造物化视图
  3. 通过bitmapBuild构造Bitmap
  4. 插入到含有Bitmap数据类型的表
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值