一、海量数据
在工作中遇到了这样的问题,客户会产生海量的网页访问日志原始未压缩数据40Gb/天以上,这还是按照Clickhouse数据结构优化后,按照Json格式在100Gb/天以上。基于传统的关系数据库无论是MySQL还是PostgreSQL,进行存储和统计,都会反复出现问题,包括磁盘容量不够,经常性的异常崩溃等。于是急需一种更好的解决方案。
在搜索中发现了Cloudflare使用了Clickhouse,可以处理6百万条/秒的数量(注1)。于是就深入了解了一下,发现很适合当前场景。再深入分析感觉就是量身定制。其实原因也很简单,Clickhouse的创始公司,Yandex,是俄罗斯最大的搜索引擎,其处理的数据也必然都是互联网的数据,我们面对的数据本质上是相同的。
Clickhouse是列数据库,列数据库与行数据最大的不同就是数据存储的物理位置不同。列数据库是同一列存储在磁盘的同一位置上,而行数据库是同一行存储在磁盘的同一位置。这样的差别有什么特点呢?
带来的第一个特性就是压缩特性,因为同一列的数据通常是相似的,因此相比行它们具有更高的压缩比,所以列数据库可以很方便的利用压缩减少存储占用。压缩比能达到多少呢?十倍甚至百倍。
第二个特性就是高效聚合。因为同样的列存储在同一个位置,所以可以同时加载进内存,利用内存及CPU并行指令高速进行计算。而更高效的是只需要取出相关的列即可,无需取出整行,这就减少了磁盘的读取。


其实无需第二个特性。第一个特性的高压缩比就足够我们采纳Clickhouse了。现在我们因为存储空间不足,只能存储很少的数据,并使用了一些复杂的逻辑轮转。基于这次的需求,我们想要至少达到半年甚至1年。因为日志可以做很多数据挖掘工作,这是一个巨大的金矿。
二、Clickhouse存储性能
鉴于Clickhouse有如此高的压缩比,我们先测试一下它的存储性能。
测试存储的思路很简单:
-
部署;
-
创建表结构;
-
记录一周的数据
-
查看存储效果;
实操部分
-
部署
Clickhouse整体都是一股简洁风,无论是docker还是直接部署都非常简洁,让我感觉很舒爽。
docker 方式(注2)
server:docker run -d -p 8123:8123 -p 9000:9000 --name clickhouse-server yandex/clickhouse-serverclient:docker run -it --rm --link clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-servera0180a992097 :) show databases
docker 启动有认证的server
docker run -d --name clickhouse-server \-p 8123:8123 -p 9000:9000 \-e CLICKHOUSE_USER=root \-e CLICKHOUSE_PASSWORD=root \yandex/clickhouse-server
直接部署到Ubuntu上(注3)
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://k

最低0.47元/天 解锁文章
1149

被折叠的 条评论
为什么被折叠?



