文章目录
一、ClickHouse 简介
ClickHouse 是 俄罗斯的 Yandex 公司于2016年开源的 列式存储数据库(DBMS),使用 C++语言 编写,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。
二、ClickHouse 特点
2.1 采用列式存储
2.2 属于数据库管理系统(DBMS )
支持标准 SQL 的大部分语法,包括 DDL 数据定义 和 DML 数据操纵,以及相关函数,用户管理以及权限管理,数据备份与恢复
2.3 多样化引擎
和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可设置不同的存储引擎,目前有合并树、日志、接口和其他四大类的二十多种引擎。
2.4 高吞吐写数据
ClickHouse 采用类 日志结构合并树 LSM Tree(Log-Structured-Merge-Tree),数据写入后,定期在后台进行压缩(Compaction)
通过类 LSM Tree 的存储结构,ClickHouse 写数据是以追加(append)的方式,且写入后数据段不可更改。
在后台执行压缩(Compaction)时是多个段 归并(Merge)、排序(Sort)后按顺序写回磁盘。
顺序写的特性:有效利用磁盘的吞吐能力
2.5 数据分区与线程级并行
ClickHouse 将数据划分为多个 partition(分区),每个 partition 再划分为多个 index granularity(索引粒度),然后通过多个 CPU 核心分别处理其中的一部分,从而实现并行的数据处理
特点:单条 Query 查询语句就能利用整机的所有 CPU,并行处理降低了查询的延时。
不过这种并行方式使得 不便同时并发多条查询,,ClickHouse 并不擅长处理高qps( 每秒查询率 = 并发数/平均响应时间)的查询业务
三、Centos 下使用安装 ClickHouse
ClickHouse 可以在任何具有 x86_64、AArch64 或 PowerPC64LE CPU 架构的 Linux、FreeBSD 或 Mac OS X 上运行。
官方文档 快速入门:https://clickhouse.com/docs/en/quick-start/
3.1 安装 clickhouse
3.1.1 方式一:使用 yum 安装
ClickHouse官网:Fast Open-Source OLAP DBMS - ClickHouse
下载地址:https://packages.clickhouse.com/rpm/stable/
- clickhouse-common-static — ClickHouse编译的二进制文件。
- clickhouse-server — 创建clickhouse-server软连接,并安装默认配置服务
- clickhouse-client — 创建clickhouse-client客户端工具软连接,并安装客户端配置文件。
- clickhouse-common-static-dbg — 带有调试信息的ClickHouse二进制文件。
添加官方的库:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
下载
sudo yum install -y clickhouse-server clickhouse-client
3.2.2 方式二:使用 Docker 拉取镜像
我这里的 Docker 是本机虚拟机里配置的 Docker
# 启动 docker
sudo systemctl start docker
# 创建容器
sudo docker run --name c1 -d -it -p 8181:8181 clickhouse/clickhouse-server
查看容器 IP
docker inspect -f '{
{
range .NetworkSettings.Networks}}{
{
.IPAddress}}{
{
end}}' c1
设置宿主机到虚拟机里Docker容器的端口映射,保证能ping通,这里可参考:
https://blog.youkuaiyun.com/Unirithe/article/details/120711045
使用 Docker 的话就无需配置和启动了,只要容器在运行,ClickHouse 服务就默认启动了,比如访问:http://172.17.0.2:8123/,会有一个 Ok.的结果
3.2 配置 ClickHouse
Click House 官方默认是关闭外部连接的,需手动配置
sudo vim /etc/clickhouse-server/config.xml
# 在 vim 查询 <lisen_host>::</listen_host>
/<listen_host>::</listen_host>
把 <listen_host>::</listen_host> 的注释打开后保存
除了打开 <listen_host> 配置,我们需要了解其默认配置的数据文件和日志文件的存储路径,也可以根据自己需要修改默认的位置。
- 默认数据文件配置
/var/lib/clickhouse/ - 日志文件配置 /var/log/clickhouse-server/clickhouse-server.log
3.3 启动 Click House
查看 clickhouse-server 的安装目录
rpm -ql clickhouse-server.x86_64
启动 clickhouse
sudo /etc/init.d/clickhouse-server start
3.4 测试连接
在之前的依赖包中,我们同时也安装了 Click House 的客户端,接下来使用客户端的命令连接启动的服务端,查看一下是否能正常连接,如果是通过方式一安装的 clickhouse(都安装在Linux),则执行
clickhouse-client -m
如果是通过 Docker 安装的,这里我采用的是 Docker放 Click House 服务端,而 Docker宿主机就放 Click Client 客户端进行连接,则执行下面命令,指定容器的IP即可:
clickhouse-client -h 172.17.0.2 -m
测试命令,查询所有的数据库:
:) show databases
方式一安装下测试成功的结果如下图:
四、数据类型
官方文档:https://clickhouse.com/docs/en/sql-reference/data-types/
4.1 整型
固定长度,分为有符号和无符号
有符号整型
取值范围:[ − 2 n -2^n −2n ~ 2 n − 1 − 1 2^{n-1} - 1 2n−1−1]
类型 | 数据范围 |
---|---|
Int8 | -128 ~ 127 |
Int16 | -32768 ~ 32767 |
Int32 | -2147483648 ~ 2147483647 |
int64 | -9223372036854775808~9223372036854775807 |
无符号整型
取值范围:[ 0 0 0~ 2 n − 1 2^n - 1 2n−1]
类型 | 数据范围 |
---|---|
UInt8 | 0~255 |
UInt16 | 0~65535 |
UInt32 | 0 ~ 4294967295 |
Uint64 | 0 ~18446744073709551615 |
使用场景:记录个数、数量、存储型 id 等
4.2 浮点型
浮点型有 Float32 和 Float64 两种,类似 Java 里的 float 和 double
建议:尽量用整数存储数据,例,将固定精度的数字转为整数值,如时间用毫秒为单位表示,因为浮点型计算可能会出现误差,例如在 ClickHouse中计算 1.0 - 0.9 ,结果是 0.0999… 趋近于0.1, 而不是 0.1
使用场景:数据值较小,不涉及大量统计计算,且精度要求不高时,如保存商品的重量。
4.3 无布尔型
Click House 没有提供 bool 类型 ,一般可使用 UInt8 类型来表示, 取值限制为 0 或1 即可
4.4 Decimal 类型
Decimal 为有符号的浮点数,在加减乘运算中保持精度,而在触发中,最低有效数字会被舍去。
声明:
- Decimal32(s),相当于 Decimal(9-s, s) ,小数有效位在 1 ~ 9 之间
- Decimal64(s),相当于 Decimal(18-s, s) ,小数有效位在 1 ~18 之间
- Decimal128(s)ÿ