如何高效处理亿级海量数据-Clickhouse速通(上)

一、海量数据

在工作中遇到了这样的问题,客户会产生海量的网页访问日志原始未压缩数据40Gb/天以上,这还是按照Clickhouse数据结构优化后,按照Json格式在100Gb/天以上。基于传统的关系数据库无论是MySQL还是PostgreSQL,进行存储和统计,都会反复出现问题,包括磁盘容量不够,经常性的异常崩溃等。于是急需一种更好的解决方案。

在搜索中发现了Cloudflare使用了Clickhouse,可以处理6百万条/秒的数量(注1)。于是就深入了解了一下,发现很适合当前场景。再深入分析感觉就是量身定制。其实原因也很简单,Clickhouse的创始公司,Yandex,是俄罗斯最大的搜索引擎,其处理的数据也必然都是互联网的数据,我们面对的数据本质上是相同的。

Clickhouse是列数据库,列数据库与行数据最大的不同就是数据存储的物理位置不同。列数据库是同一列存储在磁盘的同一位置上,而行数据库是同一行存储在磁盘的同一位置。这样的差别有什么特点呢?

带来的第一个特性就是压缩特性,因为同一列的数据通常是相似的,因此相比行它们具有更高的压缩比,所以列数据库可以很方便的利用压缩减少存储占用。压缩比能达到多少呢?十倍甚至百倍。

第二个特性就是高效聚合。因为同样的列存储在同一个位置,所以可以同时加载进内存,利用内存及CPU并行指令高速进行计算。而更高效的是只需要取出相关的列即可,无需取出整行,这就减少了磁盘的读取。

图片

图片

其实无需第二个特性。第一个特性的高压缩比就足够我们采纳Clickhouse了。现在我们因为存储空间不足,只能存储很少的数据,并使用了一些复杂的逻辑轮转。基于这次的需求,我们想要至少达到半年甚至1年。因为日志可以做很多数据挖掘工作,这是一个巨大的金矿。

二、Clickhouse存储性能

鉴于Clickhouse有如此高的压缩比,我们先测试一下它的存储性能。

测试存储的思路很简单:

  1. 部署;

  2. 创建表结构;

  3. 记录一周的数据

  4. 查看存储效果;

实操部分

  1. 部署

Clickhouse整体都是一股简洁风,无论是docker还是直接部署都非常简洁,让我感觉很舒爽。

docker 方式(注2)

server:docker run -d -p 8123:8123 -p 9000:9000 --name clickhouse-server yandex/clickhouse-server
client:docker run -it --rm --link clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server
a0180a992097 :) 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值