- 为啥有这篇文章?
- 很多人好奇ClickHouse,都听说过很快,但是到底有多恐怖?
- 新建表还要理解ClickHouse的引擎和数据类型,好麻烦
- 今天,用一个简单粗暴的功能,帮你一键导入MySQL的数据,无需人肉建表
数据导入
第一组
|
|
第二组
|
|
PK之count(*)
第一组
|
|
第二组
|
|
PK之复杂查询
第一组
|
|
- SQL太长,截图示例
- SQL里的xxx均为脱敏数据
|
|
第二组
|
|
- SQL太长,截图示例
- SQL里的xxx均为脱敏数据
|
|
压缩对比
表名 | MySQL表容量 | ClickHouse表容量 | 压缩倍数 |
---|---|---|---|
article_clientuser_sum | 5.5GB | 1.2G | 4.6 |
xx_httpcode_minf | 20GB | 243M | 84 |
xx_network_flow | 189MB | 25M | 7.56 |
- 注:xx_httpcode_minf这个表的MySQL文件20个G,应该是有大量的空洞造成的,这也就是Facebook的人开发MyRocks的原因:减少空洞,节省磁盘
风险
- 目前该功能还处于初级阶段,有不完善的地方,比如数据导入的方式比较粗暴,中间如果有异常,需要重新执行(使用的ClickHouse版本为:1.1.54342),据开发者描述,后续会支持直接在ClickHouse里对第三方数据源进行查询操作,无需建表、导入
- MySQL的参数需要修改,如max_allowed_packet
- 数据导入时需要注意带宽,实测可以达到50MB/S
- 如果MySQL里的字段有decimal字符类型会怎么样?ClickHouse没有双精度的类型
- 部分SQL需要改写
- 如双引号改单引号
讨论
ClickHouse为啥快?
- MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快
- ClickHouse不支持事务,不存在隔离级别。这里要额外说一下, 有人觉得,你一个数据库都不支持事务,不支持ACID还玩个毛。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。又有人要问了,数据都不一致,统计个毛。举个例子,汽车的油表是100%准确么?为了获得一个100%准确的值,难道每次测量你都要停车检查么?统计数据的意义在于用大量的数据看规律,看趋势,而不是100%准确。
- IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。
- 有人可能觉得上面的数据导入的时候,数据肯定缓存在内存里了,这个的确,但是ClickHouse基本上是顺序IO,用过就知道了,对IO基本没有太高要求,当然,磁盘越快,上层处理越快,但是99%的情况是,CPU先跑满了(数据库里太少见了,大多数都是IO不够用)。
说到MySQL上跑的各种复杂查询,那是相当痛苦的回忆。从索引层面,很难对这些SQL进行优化,这也是我从MySQL DBA转做数据分析后要解决的第一个问题
- 专业的事情让专业的数据库来做,放开MySQL吧~
- 太™快了,还不赶紧来试试
Reference
广告
- 提供专业的ClickHouse商业资讯、案例分析和课程培训,详情见微信(扫码请备注公司-姓名):