一、clickhouse概述
clickhouse是Yandex(俄罗斯版的百度)于 2016 年开源的一个用于联机分析(OLAP)的列式大数据库管理系统(DBMS)。常见的很多人会将其和Druid、ES、Pinot等库进行对比。由于其具有低延迟、高写入速度、磁盘空间占用低等特点,同时几乎和mysql一样的查询语法。实际学习使用的门槛比较低。其具备以下特性:
<br />
- 采用列式存储
- 数据压缩
- 基于磁盘的存储,大部分列式存储数据库为了追求速度,会将数据直接写入内存,按时内存的空间往往很小
- CPU利用率高,在计算时会使用机器上的所有CPU资源
- 支持分片,并且同一个计算任务会在不同分片上并行执行,计算完成后会将结果汇总
- 支持SQL,SQL几乎成了大数据的标准工具,使用门槛较低
- 支持联表查询
- 支持实时更新
- 自动多副本同步
- 支持索引
- 分布式存储查询
二、单机安装ClickHouse
ClickHouse支持在线安装、离线安装、源代码编译安装、Docker镜像安装。这里使用yum源在线单机版安装测试。安装时可以使用https://repo.clickhouse.tech/rpm/stable/x86_64 或 https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/源。在centos7/centos8上的安装方式如下:
<br />
yum install yum-utils rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/clickhouse.repo yum install clickhouse-server clickhouse-client
安装后会自动创建clickhouse帐号,安装完成后,其默认的重要文件和目录如下:
<br />
# 服务端配置 /etc/clickhouse-server config.xml # 全局配置文件 user.xml # 用户配置文件 # 客户端配置 /etc/clickhouse-client config.xml # 客户端配置文件 # ClickHouse文件句柄数配置 /etc/security/limits.d/clickhouse.conf # 默认值262144,应该足够了 clickhouse soft nofile 262144 clickhouse hard nofile 262144 # ClickHouse全局配置文件: /etc/clickhouse-server/config.xml # 默认数据存储目录(一般需要修改为大容量磁盘挂载的目录) /var/lib/clickhouse # 默认日志存储目录(一般需要修改为大容量磁盘挂载的目录) /var/log/clickhouse-server
如果要修改默认的数据存储目录,可以通过方式修改:
<br />
# 创建数据目录并授权 mkdir -p /chbase/data/ chown -R clickhouse.clickhouse /chbase/data/ # 修改/etc/clickhouse-server/config.xml/chbase/data/ /chbase/data/tmp/ /chbase/data/user_files/
日志文件存在/var/log/clickhouse-server目录,同样也可以修改config.xml文件修改,其默认配置如下:
trace /var/log/clickhouse-server/clickhouse-server.log /var/log/clickhouse-server/clickhouse-server.err.log 1000M 10
以服务方式启动:
<br />
systemctl enable clickhouse-server systemctl start clickhouse-server
三、连接测试
下载官方测试数据,进行测试,解压路径以实际存储路径为准,按照上面的配置文件修改示例,需要解压到/chbase/data目录。测试部分数据可以官方<a href="https://clickhouse.tech/docs/zh/getting-started/example-datasets/metrica/" target="_blank" rel="noopener noreferrer">在线帮助文档</a>。
<br />
curl -O https://datasets.clickhouse.tech/hits/partitions/hits_v1.tar tar xvf hits_v1.tar -C /var/lib/clickhouse curl -O https://datasets.clickhouse.tech/visits/partitions/visits_v1.tar tar xvf visits_v1.tar -C /var/lib/clickhouse systemctl restart clickhouse-server
<br />
可以使用clickhouse-client进行sql连接,查询方式如下:
<br />
# 直接查询 [root@361way ~]# clickhouse-client --query "SELECT * FROM datasets.hits_v1 limit 10000"; # 交互式查询 361way :) show databases; SHOW DATABASES Query id: dfd99b12-40af-42aa-9032-3213623fa7d5 ┌─name─────┐ │ datasets │ │ default │ │ system │ └──────────┘ 3 rows in set. Elapsed: 0.001 sec. # http restful接口查询 [root@361way ~]# curl -X POST http://127.0.0.1:8123 -d "SELECT COUNT(*) FROM datasets.hits_v1" 8873898 [root@361way ~]# curl http://127.0.0.1:8123 -d "SELECT COUNT(*) FROM datasets.hits_v1" 8873898 # 导入csv数据 [root@361way ~]# clickhouse-client -h 192.168.1.17 --query="insert into database.table FORMAT CSV" < /opt/data.csv # 导出为csv数据 [root@361way ~]# clickhouse-client --query="select * from database.table FORMAT CSV" > /opt/data.csv
<span style="color:#E53333;"><strong>注:通过http接口进行查询进同时支持get、post请求,不过进行修改和创建操作只能通过post方法。</strong></span>
从简单的测试来看,其性能还是比较逆天的,以下是我在8c、16G的一台普通云主机上测试的结果,表结构181个字段,查询500万行数据并导出耗时1分钟不到(导出4.6G的csv数据)。
<a href="https://www.361way.com/wp-content/uploads/2021/07/clickhouse-single.png" target="_blank" rel="noopener noreferrer"><img src="https://www.361way.com/wp-content/uploads/2021/07/clickhouse-single.png" width="600" height="281" alt="" /></a>
总结:
<strong>性能数据:</strong>
<br />
- 低延迟:对于数据量(几千行,列不是很多)不是很大的短查询,如果数据已经被载入缓存,且使用主码,延迟在50MS左右;
- 并发量:虽然ClickHouse是一种在线分析型数据库,也可支持一定的并发。当单个查询比较短时,官方建议100 Queries / second;
- 写入速度:在使用MergeTree引擎的情况下,写入速度大概是50 – 200M / s,如果按照1 K一条记录来算,大约每秒可写入50000 ~ 200000条记录每秒。如果每条记录比较小的话写入速度会更快;
<br />
<strong>常见应用场景:</strong>
<br />
- 电信行业用于存储数据和统计数据使用;
- 新浪微博用于用户行为数据记录和分析工作;
- 用于广告网络和RTB,电子商务的用户行为分析;
- 日志分析;
- 检测和遥感信息的挖掘;
- 商业智能;
- 网络游戏以及物联网的数据处理和价值数据分析;
- 最大的应用来自于Yandex的统计分析服务Yandex.Metri ca。
<br />
<strong>不足:</strong>
- 不支持事务、异步删除与更新
- 不适用高并发场景
参考文档:<a href="https://clickhouse.tech/docs/zh/" target="_blank" rel="noopener noreferrer">https://clickhouse.tech/docs/zh/</a>