背景:
直接用clickhosue处理,每次更新有1秒的延迟(目前提交机制1秒或者1000条提交一次);
clickhouse支持导入mysql数据,也支持统计查询mysql数据;
所以测试评估一下mysql直接统计查询、使用clickhouse统计查询mysql数据、直接使用clickhouse查询统计的性能对比;
1、导入测试数据100w
插入性能:mysql-> 300/s;2核、16g内存
Clickhouse-> 20000/s;2核、16g内存
2、使用mysql测试:
a、select assetId ,count(*) from alert a group by assetId; //统计long类型
耗时:19.5s
b、select title ,count(*) from alert a group by title; //统计String类型
耗时:29.9s
c、select assetId ,title ,count(*) from alert a group by assetId,title; //多字段类型统计
耗时:20.5s
select * from alert limit 0,100; //列表查询
耗时:0.006s
select * from alert where title like '%title%' limit 0,100; //模糊查询
耗时:0.007s
3、使用clickhouse查询mysql测试
1、SELECT assetId ,COUNT(*) FROM mysql('127.0.0.1:3306', 'test', 'test', 'test', 'test') group by assetId;
耗时:1.3s
2、SELECT title ,COUNT(*) FROM mysql('127.0.0.1:3306', 'test', 'test', 'test', 'test') group by title;
耗时:0.8s
3、SELECT assetId,title ,COUNT(*) FROM mysql('127.0.0.1:3306', 'test', 'test', 'test', 'test') group by assetId,title;
耗时:1s
4、SELECT * FROM mysql('127.0.0.1:3306', 'test', 'test', 'test', 'test') limit 0,100
耗时:12.7s
5、SELECT * FROM mysql('127.0.0.1:3306', 'test', 'test', 'test', 'test') where title like '%title%' limit 0,100
耗时:12.7s
4、使用clickhouse查询测试
1、select assetId ,count(*) from alert a group by assetId; //统计long类型
耗时:0.08s
2、select title ,count(*) from alert a group by title; //统计String类型
耗时:0.06s
3、select assetId ,title ,count(*) from alert a group by assetId,title; //多字段类型统计
耗时:0.12s
4、select * from alert limit 0,100; //列表查询
耗时:0.05s
5、select * from alert where title like '%title%' limit 0,100; //模糊查询
耗时:0.05s
5、总结:
sql | mysql | ck查mysql | ck |
1 | 19.5s | 1.3s | 0.08s |
2 | 29.9s | 0.8s | 0.06s |
3 | 20.5s | 1s | 0.12s |
4 | 0.006s | 12.7s | 0.05s |
5 | 0.007s | 12.7s | 0.05s |
统计查询:
ck查mysql比直接查mysql快20倍左右;
ck直接查比mysql快200倍左右;
ck存储是mysql的6倍左右。
列表/模糊查询:
mysql查询速度比ck快8倍左右;比使用ck查mysql快2000倍左右。
追求极致性能推荐直接使用ck存储查询,弊端是更新有1s延迟;
不追求极致性能推荐使用mysql存储,使用mysql进行列表、模糊查询,使用ck查mysql的方式统计查询;弊端是每次查询需要带有('127.0.0.1:3306', 'test', 'test', 'test', 'test') mysql信息.