CK入门概述

入门概述

闲话部分:

在学习clickhouse之前,

我建议至少了解了一门oltp数据库(mysql或pgsql之类的)的基础原理,包括且不限于(基础语法、ddl、dml、索引相关原理

在此基础上横向对比,才能更好的比较两种数据库的优劣点

闲话部分2:

在学习ck前还需要注意几个点:

1、为什么要用ck

2、ck解决了什么问题

3、ck如何解决了这些问题

4、有无发展史,初期的建模架构之类的迭代思路是什么样的

闲话部分3:

由于笔者目前仅在学习中对pg和ck比较熟悉,所以文中多会以这两者做比较

前置术语部分:

刚开始接触ck,一定得了解几个概念:olap、oltp;行式数据库、列式数据库;

OLTP和OLAP

OLTP (Online Transaction Processing)系统关注的是:

  • 高频、短事务
  • 强一致性
  • 单条或少量数据的读写

OLAP (Online Analytical Processing)系统关注的是:

  • 大数据量
  • 复杂聚合
  • 批量扫描与统计分析

有关OLTP和OLAP本篇博客不做详细展开,后续会在对应篇章再讨论

行列式数据库

基于上述出发点,不难发现两种数据库会有各自的侧重点;

所以可以引出行列数据库的比较:

行式存储 vs 列式存储:底层存储结构的根本差异

列式数据库(Column-oriented)

数据按列连续存储:

1
2
3
4
id:   [1, 2, 3, 4, ...]
name: [Tom, Lucy, ...]
age: [20, 22, ...]
city: [Beijing, Shanghai, ...]

优点:

  • 只读取需要的列,I/O 极小
  • 同一列数据类型一致,压缩率极高
  • 聚合计算(SUM、COUNT、AVG)效率极高

缺点:

  • 单行写入、更新不友好
  • 事务支持较弱

行式数据库(Row-oriented)

数据按行连续存储:

1
2
Row1: [id=1, name=Tom, age=20, city=Beijing]
Row2: [id=2, name=Lucy, age=22, city=Shanghai]

优点:

  • 适合点查一整行
  • 更新单条记录效率高
  • 事务支持成熟

缺点:

  • 做聚合统计时,需要扫描大量无关列
  • I/O 浪费严重

有关行列式数据库本篇博客不做详细展开,后续会在讲ck数据引擎的时候再讨论