官网:https://clickhouse.com 来自俄罗斯的凶猛彪悍的分析数据库,实时数仓的异域猛禽(OLAP领域中的黑马)
背景
最近对数据分析要求较高,需要快速的提取数据。因为现有数据库是mysql的,数据表在提取计算的时候经常超过30秒。
所以尝试把mysql数据转移到clickhouse来实现数据快速计算与提取。
安装
中文文档:https://clickhouse.com/docs/zh/getting-started/install/
配置
配置端口号
安装成功后,如遇到端口号冲突无法启动,可选择性修改某端口。
修改文件记得加上修改权限 chmod u+w config.xml
文件位置/etc/clickhouse-server/config.xml
,如将TCP端口由9000改为8124
<tcp_port>8124</tcp_port>
配置完端口后需要指定端口连接
clickhouse-client --port=8124
配置密码
用于远程连接使用,设置ClickHouse的默认用户密码,密码使用sha256sum加密
生成随机密码:
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
指定密码:
echo -n "this_password" | sha256sum | tr -d '-'
修改cilckhouse的配置文件默认地址 /etc/clickhouse-server/users.xml
找到 users –> default –> 标签下的password修改成password_sha256_hex,并把密文填进去
<password_sha256_hex>密码密文</password_sha256_hex>
配置远程连接
默认是本地连接。
开ClickHouse用户配置文件: /etc/clickhouse-server/users.xml
。
把 user–>default–>networks 的注释打开,确保 networks 节点下的ip节点值为::/0
<networks>
<ip>::/0</ip>
</networks>
打开ClickHouse配置文件 /etc/clickhouse-server/config.xml
,找到listen_host节点,确保值为::
<listen_host>::</listen_host>
主机有防火墙或者安全组的,记得把对应端口放行。
配置完成后重新启动
service clickhouse-server restart
遇到问题
Mysql 数据迁移
主流方法:
1、建立对应数据库、表(需要转换对应的字段类型建立映射),然后逐一迁移
2、使用官方的Mysql物化引擎,支持全/增量更新(需配置为Mysql从库)【该方法已更新到单独的文章,见文末】
3、使用第三方工具
我这里仅作为测试、要先验证方案的可行性,所以采用了第一种方法。
集成MySQL:
CREATE TABLE test
ENGINE = MergeTree
ORDER BY id
settings allow_nullable_key=1
AS
SELECT *
FROM MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
注意:
文档上的支持集成Mysql,这种方式是做了一个代理连接,并不是迁移数据的方法。
https://clickhouse.com/docs/zh/engines/table-engines/integrations/mysql/
测试
这两个库中的表没有额外的索引,测试机:2H4G阿里云。
让我们来看看ClickHouse计算的效果吧,贴图:
连接数据库
clickhouse-client --host=... --port=... --user=... --password=...
结果一:简单的计数查询对比 (5.548s VS 26ms)
结果二:单表求和、列计算、分组、排序(7.767s VS 898ms)
结果三:左连接的求和、列计算、分组、排序(14m29s VS 6.942s)
结论
使用ClickHouse来做计算统计,已符合预期结果。其实没有可比性,让Mysql来做数据计算确实是难为了,毕竟是专业做OLTP的。