这是我参与「第五届青训营 」笔记创作活动的第16天
一、本文内容:
-
数据库基本概念
-
列式存储
-
ClickHouse存储设计
-
ClickHouse典型应用场景
二、详细介绍
ClickHouse的典型使用场景
大宽表存储和查询
- 动态表结构
- map中的每个key都是一列
- map中的每一列都可以单独的查询
- 使用方式同普通列,可以做任何计算
- 大宽表查询
可以建非常多的列查询的时候引擎可以快速选择需要的列,查询的时候引擎可以快速选择需要的列
离线数据分析
- 数据导入
数据可以通过spark生成clickhouse格式的文件
导入到hdfs上由hive2ch导入工具完成数据导入
数据直接导入到各个物理节点
- 数据按列导入
保证查询可以及时访问已有数据
可以按需加载需要的列
实时数据分析
- 数据可以被立刻查询
- 使用memory table减少parts数量
- 数据先缓存在内存中
- 到达一定阈值再写到磁盘
复杂类型查询
- bitmap索引
- 构建
- 查询
- bitmap64类型
select countDistinct(uid)
from user_detial
where tag_id = 'a' and uid in
(
select uid from user_detail
wherer tag_id = 'b'
)
- lowcardinality
- 对于低基数列使用字典编码
- 减少数据存储和读写的IO使用
- 可以做运行时的压缩数据过滤
思考
-
列存和行存的差别是什么,使用场景有什么不同
-
列存的优点有哪些
-
列存的缺点有哪些
-
列存适合什么样的索引
-
ClickHouse的列存是什么样的存储架构
-
ClickHouse的索引是怎么设计的
-
ClickHouse的查询是怎么使用索引的
本文如有不足之处,欢迎大家指出