这是我参与「第四届青训营 」笔记创作活动的第1天
一、概述:
文章是因为项目需要刚好学习这块,于是便对自己今天学习ClickHouse做一个文字总结。
什么叫做ClickHouse?
ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍。ClickHouse 的性能超过了目前市场上可比的面向列的 DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。ClickHouse是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。
我们用ClickHouse做什么?
因为我们的大项目是【简易BI系统】,所以我们底层的原数据使用ClickHouse进行存储,为什么用它呢?其实不仅仅是项目需求。在我的使用过程中也能清晰的感受到是真的快!不论是在大批量插入数据还是查询数据都很快!
这个是ClickHouse官方给出的一份性能测试图,由此可见ClickHouse雀氏快的离谱。
那么ClickHouse为什么会这么快?
官网的解释:
- 因为ClickHouse是列式存储数据库,所以快
- CickHouse的设计则采用了自下而上的方式,目的是以最快的速度进行GROUP BY查询和过滤.
二、实践
实践是检验真理的唯一标准。下面是我所体验的ClickHouse实践过程
1、安装ClickHouse【RPM包安装方式】
既然我们要使用ClickHouse,那第一步肯定是要安装。这里我介绍的是单机的安装过程。如果要搭建集群的话是需要先在几台服务器上搭建好Zookeeper集群后在搭建ClickHouse,这里就不多赘述了。【比较推荐的,应该还有其他方法,之前在学习的时候有印象】
这里演示的是基于CentOS8.0的安装过程:
- 先安装官方仓库:
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
- 安装ClickHouse:
sudo yum install clickhouse-server clickhouse-client
由于已经安装过一次了,所以这里就不再安装放截图了
- 启动服务端:
sudo service clickhouse-server start
- 客户端连接
clickhouse-client 【这个是第一次连接进入默认的没有密码进入】
如果要设置密码,那么我们需要修改对应的配置文件: 首先找到配置文件中的users.xml文件:
- 明文储存(不建议):
直接找到对应的
<password></password>标签将密码填写后保存退出,然后重启ClickHouse。
- 密文存储:
首先通过以下命令得到密码密文,然后将密文粘贴到对应
<password_sha256_hex></password_sha256_hex>标签中,然后保存退出并重启ClickHouse。
PASSWORD=$(base64 < /dev/urandom | head -c14); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
下面是加入密码后的客户端连接:
这样我们的安装工作就完成了,很简单。
2、导入数据集:
这里我们就只放了一个数据库和数据表
- 建立一个数据库:
CREATE DATABASE Ticket_info;
这里我们看到已经创建了一个数据库。
- 创建数据表:
CREATE TABLE IF NOT EXISTS Ticket_info.plane_info(
Id UInt32,
Airline String,
Flight String,
Source_city String,
Departure_time String,
Stops String,
Arrival_time String,
Destination_city String,
Class String,
Duration Float32(2),
Days_left UInt16,
Price UInt16
)
ENGINE = MergeTree
ORDER BY Id;
- 退出clickhouse_client输入shell命令,导入csv文件内的数据:
cat ticket.csv|clickhouse-client --query="INSERT INTO Ticket_info.plane_info SELECT col1,col2, col3, col4, col5, col6, col7, col8, col9, col10,col11, col12 FROM input('col1 UInt32, col2 String, col3 String, col4 String, col5 String, col6 String, col7 String, col8 String, col9 String, col10 Float32(2), col11 UInt16, col12 UInt16') FORMAT CSV" --user=default --password=root;
这里我们的导入数据就结束了。
3、查看数据集
- 进入clickhouse_client,选中查看的数据库,然后查看数据:
use Ticket_info;
select * from plane_info;
三、总结
目前我们只导入了一万条数据供项目的开发测验,后续我们合逐渐增多数据集的数量。整体体验ClickHouse给我的感受:
1、插入数据的速度很快。
2、SQL语句支持的很好,和MySQL的语句相似度比较高,很容易学习。
3、后续一定会好好完善我们的项目!