什么是ClickHouse
相对行式数据库,像Mysql、Oracle、SqlServer等都是行式存储,是把同一行的数据放到相邻同一数据块种,而列式存储是把同一列的数据放到相邻同一数据块种,这样在进行计算类查询时,可以大大减少IO消耗,返回结果更快,采用列式存储后在进行数据记录写入的时候会麻烦一些。
列式数据库VS 行式数据库
列式存储的主要优点之一就是可以大幅降低系统的I/O,尤其是在海量数据查询时,I/O向来是系统的主要瓶颈之一。通过下面这张图,相信大家能够彻底明白这一点。
ClickHouse 很多大厂都在用,本篇主要使用Docker进行安装
安装配置
- 创建目录并更改权限
mkdir-p/app/cloud/clickhouse/datamkdir-p/app/cloud/clickhouse/confmkdir-p/app/cloud/clickhouse/logchmod-R777/app/cloud/clickhouse/datachmod-R777/app/cloud/clickhouse/confchmod-R777/app/cloud/clickhouse/log
- 拉取镜像
dockerpullyandex/clickhouse-server:20.3.5.21
查看 https://hub.docker.com/r/yandex/clickhouse-server/dockerfile 文件,EXPOSE 9000 8123 9009 了三个端口,而宿主机9000端口已被 MinIO 对象存储服务器占用,所以创建容器暴露该端口用9090替换
root-pc:~#dockerps--format"table {{.Names}} ------> {{.Ports}}"|grepminiominio------>0.0.0.0:9000->9000/tcp
- 创建临时容器
dockerrun--rm-d--name=clickhouse-server\--ulimitnofile=262144:262144\-p8123:8123-p9009:9009-p9090:9000\yandex/clickhouse-server:20.3.5.21
- 复制临时容器内配置文件到宿主机
dockercpclickhouse-server:/etc/clickhouse-server/config.xml/app/cloud/clickhouse/conf/config.xmldockercpclickhouse-server:/etc/clickhouse-server/users.xml/app/cloud/clickhouse/conf/users.xml
- 停掉临时容器
dockerstopclickhouse-server
- 创建default账号密码
PASSWORD=$(base64</dev/urandom|head-c8); echo"$PASSWORD"; echo-n"$PASSWORD"|sha256sum|tr-d'-'
会输出明码和SHA256密码 SEGByR98 211371f5bc54970907173acf6facb35f0acbc17913e1b71b814117667c01d96d
- 创建root账号密码
PASSWORD=$(base64</dev/urandom|head-c8); echo"$PASSWORD"; echo-n"$PASSWORD"|sha256sum|tr-d'-'
会输出明码和SHA256密码 092j3AnV 35542ded44184b1b4b6cd621e052662578025b58b4187176a3ad2b9548c8356e
- 修改 /app/cloud/clickhouse/conf/users.xml
把default账号设为只读权限,并设置密码 yandex-->users-->default-->profile 节点设为 readonly 注释掉 yandex-->users-->default-->password 节点 新增 yandex-->users-->default-->password_sha256_hex 节点,填入生成的密码
- 新增root账号
<root><password_sha256_hex>35542ded44184b1b4b6cd621e052662578025b58b4187176a3ad2b9548c8356e</password_sha256_hex><networksincl="networks"replace="replace"><ip>::/0</ip></networks><profile>default</profile><quota>default</quota></root>
- 创建容器
dockerrun-d--name=clickhouse-server\-p8123:8123-p9009:9009-p9090:9000\--ulimitnofile=262144:262144\-v/app/cloud/clickhouse/data:/var/lib/clickhouse:rw\-v/app/cloud/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml\-v/app/cloud/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml\-v/app/cloud/clickhouse/log:/var/log/clickhouse-server:rw\yandex/clickhouse-server:20.3.5.21
- 用 DataGrip 连接
- 用 dbeaver 连接