Press "Enter" to skip to content

ClickHouse初窥探

Last updated on 2022年1月13日

官网: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.使用第三方工具

我这里仅作为测试、要先验证方案的可行性,所以采用了第一种方法。

单表迁移:

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计算的效果吧,贴图:

结果一:简单的计数查询对比 (5.548s VS 26ms)

数据库数据条数 – 680w7238

结果二:单表求和、列计算、分组、排序(7.767s VS 898ms)

结果三:左连接的求和、列计算、分组、排序(14m29s VS 6.942s)

结论

使用ClickHouse来做计算统计,已符合预期结果。其实没有可比性,让Mysql来做数据计算确实是难为了,毕竟是专业做OLTP的。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code