ClickHouse 入门
ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询(OLAP)(适合一次写入多次读写的操作,是分析性数据库,对增删改操作支持没那么优秀),能够使用 SQL 查询实时生成分析数据报告。
OLAP:联机查询处理,擅长一次插入多次查询分析
OLTP:联机事务处理,代表是Mysql、Oracle等关系型数据库,擅长增、删、改、查(CRUD)
ClickHouse 的特点
列式存储
以下面的表为例:
1)采用行式存储时,数据在磁盘上的组织结构为:
2)采用列式存储时,数据在磁盘上的组织结构为:
3)列式储存的好处:
对于列的聚合,计数,求和等统计操作原因优于行式存储。
由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。
由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于 cache 也有了更大的发挥空间。
DBMS 的功能
几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。
多样化引擎
ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。
最常用的是合并数引擎。
高吞吐写入能力
ClickHouse 采用类 LSM Tree 的结构,数据写入后定期在后台 Compaction(合并)。通过类 LSM tree的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。
官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。
数据分区与线程级并行
ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个 CPU 核心分别处理其中的一部分来实现并行数据处理。在这种设计下,单条 Query 就能利用整机所有 CPU(特别吃CPU资源)。极致的并行处理能力,极大的降低了查询延时。
所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps(每秒查询次数) 的查询业务,ClickHouse 并不是强项。
分区的目的是为了避免全表扫描。
ClickHouse不适合做初始的存储,它存储的数据最好是全部处理完成的,然后将其写入到一个宽表当中,因为它非常适合做宽表的查询。
性能对比
某网站精华帖,中对几款数据库做了性能对比
1)单表查询
2)关联查询
结论: ClickHouse 像很多 OLAP 数据库一样,单表查询速度高于关联查询,而且 ClickHouse的两者差距更为明显。ClickHouse不适合进行关联查询。
使用ClickHouse要避免使用Join操作
ClickHouse 的安装
准备工作
确定防火墙处于关闭状态
## 设置开机启用防火墙:
systemctl enable firewalld.service
## 设置开机禁用防火墙:
systemctl disable firewalld.service
## 启动防火墙:
systemctl start firewalld
## 关闭防火墙:
systemctl stop firewalld
## 检查防火墙状态:
systemctl status firewalld
CentOS 取消打开文件数限制
## 在 /etc/security/limits.conf 文件的末尾加入以下内容
### nofile为用户能够打开的文件数
### nproc为用户能够打开的进程数
[bd@localServer ~]$ sudo vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
## 在 /etc/security/limits.d/20-nproc.conf 文件的末尾加入以下内容
[bd@localServer ~]$ sudo vim /etc/security/limits.d/20-nproc.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
## 执行同步操作,将文件发送到集群的其他服务器
[bd@localServer ~]$ sudo /usr/local/bin/xsync /etc/security/limits.conf
[bd@localServer ~]$ sudo /usr/local/bin/xsync /etc/security/limits.d/20-nproc.conf
## 重新用户登录后生效
## 使用以下命令查看具体值是否已经变化生效
[bd@localServer ~]$ ulimit -a
...
open files (-n) 65536
...
max user processes (-u) 131072
...
安装依赖
[bd@localServer ~]$ sudo yum install -y libtool
[bd@localServer ~]$ sudo yum install -y *unixODBC*
然后在别的集群服务器上执行相同的操作。
CentOS 取消 SELINUX
security enforce linux,管理Linux系统安全的,因为太强了,所以默认情况下,很多软件的使用都会收到它的限制。
## 修改/etc/selinux/config 中的 SELINUX=disabled
[bd@hadoop113 ~]$ sudo vim /etc/selinux/config
## 将enforcing为生效、disable为关闭
SELINUX=disabled
### 注意:别改错了
## 执行同步操作
[bd@hadoop113 ~]$ sudo /usr/local/bin/xsync /etc/selinux/
## 重启三台服务器
### 查看当前SELinux的状态Disabled为关闭了
[bd@hadoop113 ~]$ getenforce
Disabled
### 临时关闭SELinux
[bd@hadoop113 ~]$ setenforce 0
单机安装
官网:https://clickhouse.tech/
下载地址:http://repo.red-soft.biz/repos/clickhouse/stable/el7/
重要版本:20.5支持final、20.6.3支持explain(sql执行计划)、20.8支持实时同步mysql数据;
本次安装额包为21.7.3.14
## 在/opt/software下创建clickhouse目录
## 将以下4个文件上传到服务器上的software/clickhouse目录下
## 将安装文件同步到其他服务器
[bd@hadoop113 software]$ xsync clickhouse
## 分别在三台机子上安装这 4 个 rpm 文件
[bd@hadoop113 software]$ sudo rpm -ivh *.rpm
### sudo rpm -qa | grep clickhouse 查看安装情况
#### 安装过程中会提示输入密码,本次测试通过回车直接跳过,即本次测试无密码
#### 安装完成之后相关文件的目录:
#### bin文件夹/user/bin相关目录下
#### conf文件夹在/etc/clickhouse-server相关目录下
#### lib文件夹在/var/lib/clickhouse相关目录下,数据也在这个目录,可以通过配置文件修改
#### log文件夹在/var/log/clickhouse-server相关目录下,可以通过配置文件修改
####
## 修改配置文件
### 配置文件有config.xml和users.xml
### config.xml为服务端配置,集群部署配置这个
### users.xml为参数配置,比如配置cpu、内存等,使用部署配这个
[bd@hadoop113 software]$ sudo vim /etc/clickhouse-server/config.xml
### 把 <listen_host>::</listen_host> 的注释打开,这样的话才能让 ClickHouse 被除本机以外的服务器访问
### 修改完成之后分发配置文件
[bd@hadoop113 software]$ xsync /etc/clickhouse-server/config.xml
#### 在这个文件中,有 ClickHouse 的一些默认路径配置,比较重要的
#### 数据文件路径:<path>/var/lib/clickhouse/</path>
#### 日志文件路径:<log>/var/log/clickhouse-server/clickhouse-server.log</log>
#### 错误日志文件路径:<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
## 启动 Server,端口默认是9000
[bd@hadoop113 software]$ sudo systemctl start clickhouse-server
### 或者
[bd@hadoop113 software]$ sudo clickhouse start
## 三台机器上关闭开机自启(测试才会关闭,生产环境不能关闭)
[bd@hadoop113 software]$ sudo systemctl disable clickhouse-server
## 使用 client 连接 server,-m :可以在命令窗口输入多行命令
[bd@hadoop113 software]$ clickhouse-client -m