开篇
最近在实习做一个机器学习聚类相关的项目。在进行数据处理的时候需要使用数据库对数据进行聚合计算来提取特征。由于之前听说过Clickhouse这个由毛子开发的开源数据库速度相当得快,所以打算进行一次尝试。
简介
ClickHouse是一个开源的用于在线分析处理的列式数据库。
ClickHouse是由俄罗斯的Yandex公司(好像类似俄罗斯的百度的存在)为了Yandex Metrica网络分析服务而开发。它支持分析实时更新的数据,Clickhouse以高性能著称。
ClickHouse is an open-source Column-oriented DBMS(columnar database management system) for online analytical processing (OLAP).
ClickHouse was developed by the Russian IT company Yandex for the Yandex.Metrica web analytics service. ClickHouse allows analysis of data that is updated in real time. The system is marketed for high performance.
总结起来ClickHouse的一个最显著的特点就是快,跑分高,甚至要高于很多商业的数据库系统。它的排名也上涨的非常快,最近数据分析相关比赛中有队伍使用ClickHouse夺得冠军。所以这个数据库还是比较值得我们尝试尝试。
不过ClickHouse也有一些缺点,它大概是2016年6月份左右开源,是一个比较新的产品。社区俄语+英语为主,因为是俄罗斯的产品,俄语的内容不少,需要适当使用谷歌翻译来获取我们需要的信息。另一方面,Clickhouse目前只支持Linux,想要在Windows或者是Mac上面运行要用到Docker。这一方面本人就不太了解。
在实习的项目中,我使用的本地Win10操作系统 + Linux Ubuntu16.04.3 LTS(GNU/Linux 4.13.0-39-generic x86_64)服务器,使用Putty进行SSH连接访问服务器。
安装与配置
关于Clickhouse的安装与配置我们在官网,谷歌或者百度上面都可以找到不少教程,这里就不再赘述。下面放官方链接提供参考。
ClickHouse Quick Start
在完成安装之后只需要在Terminal中键入命令:
clickhouse-client
或者
clickhouse-client -m (多行模式)
关于服务器的配置同样可以参考官方教程
服务器配置
看不太懂英文的话请善用谷歌/百度/有道翻译。
本人倒是直接使用了默认的配置基本也能在本地完美运行。如果想要设置集群或者是远程访问的话就需要修改一些配置,这些我下面会提到。
使用方法
Clickhouse的语法基本和SQL类似,不过它自己又增加了一些新的特性。比如生成表的时候要定义使用的引擎,有MergeTree, Merge, Log之类的不同的表引擎,它们决定了数据的存储方式,以及索引之类的内容,主要目的是能够支持最快的查询。
Clichouse表引擎(官方)
Clickhouse表引擎(中文)
Clickhouse比较不方便的一点是不支持Update,delete操作,毕竟一切为了速度。插入和查询的效率都相当之高,还能够支持直接导入导出CSV文件。
cat path_to_your_csv/XXX.csv | clickhouse-client --query="Insert into XXX FORMAT CSV";
clickhouse-client --query="select * from XXXX" > path_to_output/XXX.csv
默认的数据库是Default,密码是空。如果需要自己生成新的数据库用户和密码,可以直接在users.xml进行添加修改。
其余特性也都可以在官网教程中找到。
图形化界面
Clickhouse官方暂时没有图形化界面,这样使得操作相当得不方便,如果使用SSH + Terminal连接Linux服务器进行操作,SQL指令和返回的表结果(行数较多)都无法在Terminal上完美显示。这里官网也提到了几个第三方的图形化界面。我尝试了其中的Tabix,效果还算不错。
Tabix是一个三方的开源Clickhouse图形化界面。完全免费而且不需要安装,可以直接从浏览器打开。
Tabix官网
Tabix UI
只需要连接clickhouse服务器就能直接在浏览器上操作Clickhouse,非常方便。
考虑一般情况下Clickhouse服务器安装在Linux服务器。这里介绍如何远程连接Clickhouse。
有一篇俄文的博客简洁明了地介绍了Tabix连接远程Clickhouse服务器的方法。
Tabix- Clickhouse的界面
首先我们需要对服务器进行配置,以便它接受外部连接。
1. 关闭Clickhouse server的服务
sudo service clickhouse-server stop
2. 使用文本编辑器打开配置文件 /etc/clickhouse-server/config.xml(这里使用vi)
sudo vi /etc/clickhouse-server/config.xml
3. 只留下listen_port标签中的
::
4. 保存并退出
5. Linux服务器开放端口8123
Clickhouse服务器默认运行在端口8123,我们需要在防火墙中允许开放端口8123
sudo ufw allow 8123
6.重启Clickhouse server服务
sudo service clickhouse-server start
最后转到Tabix UI界面, 输入名字, 主机端口号还有登录名密码(如果是Default的话密码基本为空,不用填写)。
这样我们就可以直接使用图形化界面写Clickhouse命令了,无论是建表,插入还是查询都能做到。查询返回的结果还能够以图表的形式显示,比终端显示更加直观。
结束
作为一个开源的数据库,Clickhouse确实速度相当快,处理百万级千万级甚至亿级的数据运行时间都是以秒计时。开源免费的优势也使得它非常适合不算过于复杂的项目。当然Clickhouse也有不少缺点,毕竟它还是一个新兴的数据库,整个社区还在蓬勃发展中。它当前只支持主流的Linux,也许未来能兼容更多的操作系统。如果你喜欢尝试新的事物,不妨安装一个来玩一玩。
参考资料
Clickhouse官方文档
Clickhouse官方教程
Clickhouse专业中文社区
Clickhouse官方Github
Tabix官方网站Tabix官方Github