ClickHouse集群方案测评

2021/02 作者:ihunter 0 0

回合对战数据指标计算,耗时过长,甚至因为单机内存不足无法满足需求,故考虑将原本单节点的单机ClickHouse改为集群 , 采用分布式表来进行相关计算。

环境搭建

单机方案

ClickHouse集群方案测评

集群方案 3分片1复

ClickHouse集群方案测评

方案对比

写入速度对比

数据量 : 26910101 Rows

方案一 : 单机方案( 全量数据插入单机表 )

ClickHouse集群方案测评

方案二 : 集群方案( 数据写入物理表,分别并行向3台机器物理表写入数据 )

ClickHouse集群方案测评

结论 : 写入数据速度和磁盘IO有关 , 集群方案数据写入相比单机方案有显著优势。

查询对比(主要针对分组查询 和 关联查询操作)

分布式建表方法

--物理表
CREATE table rd_physical.rd_baseinfo_physical on cluster cluster_3shards_1replicas
(`appId` String,`pvpId` String,`accountId` String,`userName` String,`round` Nullable(Int32),`event` String,`mode` Nullable(Int32),`win` Int32,`country` String,`timeStamp` String,`ts` DateTime,`ds` Date)ENGINE = ReplicatedMergeTree('/clickhouse/rd_physical/tables/{shard}/rd_baseinfo_physical', '{replica}')PARTITION BY (ds)ORDER BY (appId, accountId, pvpId)SETTINGS index_granularity = 8192

--逻辑表
CREATE table rd_data.rd_baseinfo on cluster cluster_3shards_1replicas
(`appId` String,`pvpId` String,`accountId` String,`userName` String,`round` Nullable(Int32),`event` String,`mode` Nullable(Int32),`win` Int32,`country` String,`timeStamp` String,`ts` DateTime,`ds` Date)ENGINE =Distributed(cluster_3shards_1replicas, rd_physical, rd_baseinfo_physical, cityHash64(accountId))

分组查询

SQL语句 : select count(*) , accountId,pvpId from rd.rd_baseinfo where ds>='2019-12-01' and ds<'2020-01-01' group by accountId ,pvpId ;

ClickHouse集群方案测评

结论 : 集群方案对数据分类查询效率比单机高出25%左右。

关联查询

ClickHouse集群方案测评

结论 : 小数据量join操作 , 单机方案和集群方案差异很小 ; 大数据量单机方案不如集群方案 , 单机方案还可能会存在内存不足等问题。

其他方面

ClickHouse并发较小 , 官网查询建议100 Queries / second , 单机ClickHouse不适合做业务型高并发查询。ClickHouse集群可以通过chproxy 将并发的查询代理到集群上各分片上去作查询 , 可以极大提高了并发量。

性能测试总结

单机方案写数据的性能上远不如集群方案。

查询方面, 数据量小时的查询单机方案和集群方案相差不明显, 数据量大时集群方案不会存在内存,cup不足等问题,同时查询的效率也高于单机方案。

集群方案相较于单机方案 , 建表略有繁琐 , 分布式表写数据无法实时写入各个分片物理表 , 而会先写入内存然后同步到各个分片,故我们需要向每个分片的物理表同时写入数据。

综上, 目前round和roundData数据量越来越大 ,搭建集群分布式存储数据方案是可行的。


赞(2) 更多分享

上篇: 基于Flink+ClickHouse打造轻量级点击流实时数仓
下篇: ELK-安装ELK7.6.2和UI管理界面及测试案例