最近重构后台某个功能时,改用Clickhouse进行数据查询,业务的需求是要实时展示最近1个月内站点充值、下载、注册等信息,并支持日期筛选:
第一版时采用前端定时器调用接口获取数据,每次查询获取一天数据,每次接口执行时间3s左右【通过php+mysql】
第二版从PHP+Mysql层面对程序进行优化,每个接口调用时间达到了900ms【第一版开发时间比较长,一些地方处理的比较繁重,所以回头优化,时间提上去了】
第三版引入了Clickhouse后,接口处理的时间差不多200ms,处理的速度相较于通过mysql提高了5倍
第四版通过合并查询,最初采用定时器是因为单次处理时间较长,一次查询请求会超时,所以在处理时间提高后,进行合并请求操作,而且clickhouse进行sql查询并不是累加,而是并行查询,通过合并查询后,由每次200ms处理时间,轮询30次,变成了900ms处理时间,一次查询
除了第四版,其它三版采用定时器轮询方式,上述指的仅仅只是接口运行时间,定时器定时时间1s,所以所有数据加载出来后的整体时间还是比较久的,仅通过mysql/clickhouse对比来看,第四版程序处理时间大概是第二版的1/30,而且更不用等待一个接口加载完成后进行数据对比,第四版页面数据是秒加载完成,整体的体验也是最好的;clickhouse是在项目的服务器搭建的,所以整个流程中的处理时间仅代表在项目机器处理时间,阿里等也提供了此项的云服务
Clickhouse安装还是比较简单的,可以查看官网进行安装,我的环境是centos,其具体安装如下:
// 安装clickhouse
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
sudo yum install -y clickhouse-server clickhouse-client
// 运行clickhouse
sudo /etc/init.d/clickhouse-server start
// 进入clickhouse中,进行建库、建表等操作
clickhouse-client # or "clickhouse-client --password" if you set up a password.
其实clickhouse的操作和mysql大致相同,通过sql操作mysql数据库大都也适用于clickhouse