https://www.toutiao.com/article/7224100644578263591/
1 ClickHouse 简介
ClickHouse:是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
OLTP
传统的关系型数据库,主要操作增删改查,强调事务一致性。
也叫做行式数据库系统,例如:MySQL、Postgres和MS SQL Server。
OLAP
仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策支持,提供直观简单的结果。
也叫列式数据库系统中,例如:ClickHouse。
行式和列式数据库存储比较:
2 ClickHouse 优势
假如现在传统的行式数据库MYSQL中,存储5000万条数据的主表和3张副表,单次联表查询开销在3min+,执行效率极低。
这种情况下,就算优化索引、分表分库、代码优化,在查询效率上提升的也不会显著的。
那么采用ClickHouse,查询时间降低至1s内,查询效率提升200倍!
ClickHouse的优势:
1、只需要读取要计算的列数据,而非行式的整行数据读取,降低IO cost
2、同列同类型,有十倍压缩提升,进一步降低IO
3、clickhouse根据不同存储场景,做个性化搜索算法
3 ClickHouse 实操
macOS中用docker 安装clickhouse
1、docker安装这里就略过了。
2、docker安装ClickHouse镜像
docker pull yandex/clickhouse-client
docker pull yandex/clickhouse-server
3、启动容器服务,加载镜像
docker run -d --name ck-server --ulimit nofile=262144:262144 -p 8123:8123 -p 9000:9000 -p 9009:9009 --volume=$HOME/Documents/ck2_database:/var/lib/clickhouse yandex/clickhouse-server
olume:冒号两侧的路径建立映射,当容器服务读取冒号后面的虚拟机内路径时,会去读冒号前面的本机路径。加这个参数的作用是自定义配置,这个参数可以比较简单的修改部分配置。
-p:暴露容器中的端口到本机端口中。本机端口:容器端口。不配置的话可以后面除来虚拟机中,别的地方连不上8123端口。
5/ 启动容器,并且验证。
docker exec -it ck-server /bin/bash
4、设置密码
1)简易密码。找到安装路径
$HOME/Documents/ck2_database/preprocessed_configs/users.xml,然后设置密码
<password>xxx</password>
2)加密密码:
1/运行语句:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
2/在同上同样的路径中 加入上句语句生成的较长的字符串:
<password_double_sha1_hex>xxxxxx</password_double_sha1_hex>
5、重启容器,密码连接Clickhouse。
clickhouse-client -h 127.0.0.1 -d default -m -u default --password 6QTOnLA9
6、docker操作常用指令
查看镜像:docker images
删除镜像:docker rmi [REPOSITORY]
查看容器:docker container ls -a
停止容器:docker container stop b1d6a190e2ab
删除容器:docker container rm b1d6a190e2ab
运行容器:docker b1d6a190e2ab start
Mysql数据迁移到ClickHouse
ClickHouse支持Mysql大多数语法,迁移成本低,目前有五种迁移方案:
1、create table engin mysql,映射方案数据还是在Mysql
2、insert into select from,先建表,在导入
3、create table as select from,建表同时导入
4、csv离线导入
5、streamsets
这里我们采用第三种,建表同时导入方式迁移数据:
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = Mergetree AS SELECT * FROM mysql('host:port', 'db', 'database', 'user', 'password')
ClickHouse和Mysql性能测试比较
数据同步方案
1、采用临时表方案
原理:
新建temp中间表,将Mysql数据全量同步到ClickHouse内temp表,再替换原ClickHouse中的表,适用数据量适度,增量和变量频繁的场景
方案图:
2、采用开源工具synch
开源地址:
https://github.com/long2ice/synch/blob/dev/README-zh.md
原理:通过Mysql的binlog日志,获取sql语句,再通过消息队列消费task
方案图: