本文主要是介绍性能提高15倍!只是把MySQL换成了ClickHouse,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介
我们需要存储结构化时序数据,时间间隔为5分钟或1分钟,计算95峰值
、995峰值
、最值
等指标,并且在网页中展示。
MySQL
项目开发初期,为了快速开发原型,验证产品,我们使用MySQL作为整个项目的存储。带来的问题是时序数据库范围分析查询耗时很长,计算30天的数据需要30s+,到了无法容忍的地步,即便是创建索引、使用BitInt存储时间戳,几乎没有性能提升。
后来我们组其他同事说换ClickHouse来存储时序数据,于是我们就开始了替换之旅。
ClickHouse
ClickHouse是面向OLAP(在线分析处理)、兼容SQL标准的列式数据库,主要的不足是不支持事务
。因此我们目前没有把整个存储都迁移到ClickHouse上,而是只把时序数据存过来。
本以为替换过程会很麻烦,可能修改大量的代码和逻辑,实际上很快,因为之前接口的逻辑设计很合理,所以只替换了数据库ORM库,从gorm换成了sqlx,花了1天时间(前期重构逻辑花了1个星期我会乱说
)。
更重要的是,ClickHouse提供了很多聚合函数,之前计算95值需要2次查询,而现在只需要一次查询就够了,对应的SQL如下:
select d.en_name, max(d.in_value) as peak_in,
max(d.out_value) as peak_out, max(d.max_value) as
这篇关于性能提高15倍!只是把MySQL换成了ClickHouse的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!