参考1:大数据技术之 ClickHouse
参考2:ClickHouse官方介绍
参考3:ClickHouse介绍
参考4:篇一|ClickHouse快速入门
推荐阅读参考1、2
,优先阅读参考1
。
ClickHouse
是俄罗斯
的 Yandex
于 2016 年开源的用于联机分析(OLAP :Online Analytical Processing
的列式
数据库管理系统(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告,主要用于Web
流量分析。ClickHouse的全称是Click Stream,Data WareHouse
。
ClickHouse
非常适用于商业智能领域,除此之外,它也能够被广泛应用于广告流量、Web
、App
流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。
① 列式存储
行式存储的好处:
想查找某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以;但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。
列式存储的好处:
列式存储不支持事务
。② DBMS功能
几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML、,以及配套的各种函数;用户管理及权限管理、数据的备份与恢复。
③ 多样化引擎
目前包括合并树、日志、接口和其他四大类20多种引擎。
④ 高吞吐写入能力
ClickHouse
采用类LSM Tree
的结构,数据写入后定期在后台Compaction。通过类 LSM tree
的结构, ClickHouse
在数据导入时全部是顺序append
写,写入后数据段不可更改,在后台compaction
时也是多个段merge sort
后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力。
⑤ 数据分区与线程及并行
ClickHouse
将数据划分为多个partition
,每个partition
再进一步划分为多个index granularity
(索引粒度),然后通过多个CPU
核心分别处理其中的一部分来实现并行数据处理。在这种设计下, 单条 Query
就能利用整机所有 CPU
。 极致的并行处理能力,极大的降低了查询延时。
所以, ClickHouse
即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多cpu,就不利于同时并发多条查询。所以对于高 qps 的查询业务并不是强项。
⑥ ClickHouse
像很多 OLAP
数据库一样,单表查询速度优于关联查询,而且 ClickHouse
的两者差距更为明显。
关联查询:clickhouse
会将右表加载到内存。
ClickHouse
引擎分为 数据库引擎 和 数据表引擎 。
参考1:ClickHouse表引擎之Log系列表引擎
引擎这块还需要深入了解一下,有些引擎不支持删改操作。
数据库引擎,默认情况下,ClickHouse
使用Atomic
数据库引擎。它提供了可配置的table engines
和SQL dialect
。
MySQL
MySQL
引擎用于将远程的MySQL
服务器中的表映射到ClickHouse
中,并允许您对表进行INSERT
和SELECT
查询,以方便您在ClickHouse
与MySQL
之间进行数据交换。
MySQL
数据库引擎会将对其的查询转换为MySQL
语法并发送到MySQL
服务器中,因此您可以执行诸如SHOW TABLES
或SHOW CREATE TABLE
之类的操作。
MaterializeMySQL
MySQL数据同步;将MySQL数据全量或增量方式同步到clickhouse中,解决mysql服务并发访问压力过大的问题。
Lazy
在最后一次访问之后,只在RAM
中保存expiration_time_in_seconds
秒。只能用于Log
表。
它是为存储许多小的Log
表而优化的,对于这些表,访问之间有很长的时间间隔。也就是访问不频繁,压缩率高。
Atomic
默认的数据库引擎。它提供了可配置的table engines
和SQL dialect
。
PostgreSQL
MaterializedPostgreSQL
Replicated
SQLite
表引擎是 ClickHouse
的一大特色。可以说, 表引擎决定了如何存储表的数据。包括:
参考1:表引擎
表引擎大致可分四个种类。
合并树家族
适用于高负载任务的最通用和功能最强大的表引擎。这些引擎的共同特点是可以快速插入数据并进行后续的后台数据处理。 MergeTree
系列引擎支持数据复制(使用Replicated* 的引擎版本),分区和一些其他引擎不支持的其他功能。
该类型的引擎:
MergeTree
最常用
ReplacingMergeTree
最常用
SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
GraphiteMergeTree
日志引擎系列
具有最小功能的轻量级引擎。当您需要快速写入许多小表(最多约100万行)并在以后整体读取它们时,该类型的引擎是最有效的。
该类型的引擎:
TinyLog
StripeLog
Log
集成的表引擎
用于与其他的数据存储与处理系统集成的引擎。
该类型的引擎:
Kafka
比较常用,采集回来的数据先存Kafka
然后同步到clickhouse
MySQL
比较常用。
ODBC
JDBC
HDFS
特别
该类型的引擎:
Distributed
MaterializedView
Dictionary
Merge
File
Null
Set
Join
URL
View
Memory
Buffer
ClickHouse
的语法与MySQL
语法比较接近。在此就不做过多介绍了,可参考:SQL参考
注意clickhouse-go/v2
版本的问题,使用 github.com/ClickHouse/clickhouse-go/v2 v2.4.1
会报:
WARNING: version 21.3.19 of ClickHouse is not supported by this client
ClickHouse (clickhouse-standalone) server version 21.3.19 revision 54447 (timezone Asia/Shanghai)
降级改为 github.com/ClickHouse/clickhouse-go/v2 v2.2.0
即可。
module clickhouse_demo
go 1.19
require github.com/ClickHouse/clickhouse-go/v2 v2.2.0
代码:
package main
import (
"fmt"
"github.com/ClickHouse/clickhouse-go/v2"
)
func main() {
conn, _ := clickhouse.Open(&clickhouse.Options{Addr: []string{"192.168.13.10:9000"}})
v, _ := conn.ServerVersion()
fmt.Println(v.String())
}
结果:
API server listening at: 127.0.0.1:51175
ClickHouse (clickhouse-standalone) server version 22.2.2 revision 54455 (timezone Asia/Shanghai)
连通正常。