ClickHouse是Yandex(俄罗斯最大的搜索引擎)开源的用于实时数据分析的列式数据库,处理数据的速度比传统方法快100-1000倍。图片来自PexelsClickHouse优于当今市场上类似的面向列的DBMS,每台服务器每秒处理数亿到超过10亿行和数十GB的数据。什么是点击屋?ClickHouse是一个用于在线分析(OLAP)的列式数据库管理系统(DBMS)。先明确一些基本概念:OLTP:是传统的关系型数据库,主要操作增、删、改、查,强调事务的一致性,如银行系统、电子商务系统。OLAP:是一种仓库型数据库,主要是读取数据,做复杂的数据分析,侧重于技术决策支持,提供直观简单的结果。然后我们用图来理解列式数据库和行式数据库的区别。在传统的行型数据库系统(MySQL、Postgres和MSSQLServer)中,数据按以下顺序存储:在列型数据库系统(ClickHouse)中,数据按以下顺序存储:两者的比较存储方式:以上是ClickHouse的基本介绍,更多可以参考官方手册:https://clickhouse.tech/docs/zh/业务问题业务端目前存储在MySQL中,对于一个大表5000万数据量,2个辅助表,单次join表查询成本3分钟+,执行效率极低。经过索引优化,水平分表,逻辑优化,效果不佳,所以我们决定使用ClickHouse来解决这个问题。最终通过优化,将查询时间降低到1s以内,查询效率提升200倍!希望通过本文,能够帮助大家快速掌握这一利器,少走实践中的弯路。ClickHouse实践①我是Mac下通过Docker安装安装ClickHouse,也可以下载CK编译安装,比较麻烦。参考链接:https://blog.csdn.net/qq_24993831/article/details/103715194②数据迁移:从MySQL到ClickHouseClickHouse支持MySQL的大部分语法,迁移成本低。目前有五种迁移方案:createtableenginmysql、mappingscheme数据还在MySQL中。Insertintoselectfrom,先建表,再import。createtableasselectfrom,同时创建表和导入。csv离线导入。流集。参考链接:https://anjia0532.github.io/2019/07/17/mysql-to-clickhouse/数据迁移选择第三个选项:CREATETABLE[IFNOTEXISTS][db.]table_nameENGINE=MergetreeASSELECT*FROMmysql('host:port','db','database','user','password')③性能测试对比性能测试对比如下图:④数据同步方案临时表如下如下:图片来源:携程NewTemp中间表,将MySQL全量数据同步到ClickHouse中的Temp表中,然后替换原来的ClickHouse表,适用于数据量适中,增量频繁,变量多的场景。开源同步软件推荐Synch,如下图所示:Synch的原理是通过MySQL的Binlog日志获取SQL语句,然后通过消息队列消费Task。⑤ClickHouse为什么快?有以下几点:只需要读取需要计算的列数据,而不是读取整行行数据,降低IO成本。同列同类型,十倍压缩提升,进一步降低IO。Clickhouse根据不同的存储场景,实现了个性化的搜索算法。遇到的坑①ClickHouse和MySQL数据类型的区别使用MySQL语句查询发现错误:解决方法:LEFTJOINBbONtoUInt32(h.id)=toUInt32(ec.post_id),转过来,统一关联无符号类型②删除或更新是异步执行的,只保证最终一致性。查询CK手册,发现即使是支持最好数据一致性的Mergetree,也只保证最终一致性:如果你对数据一致性要求高,建议你做全同步来解决。总结通过ClickHouse的实践,完美解决了MySQL的查询瓶颈。90%的数据级别小于20亿行的查询可以在1秒内提供结果。随着数据量的增加,ClickHouse也支持集群。如果你有兴趣,可以积极尝试!参考资料:ClickHouse官方手册CKClickHouse在携程酒店的应用蔡悦怡如何选择Roin123ClickHouse引擎作者:帅气的名字编辑:陶家龙来源:https://juejin.im/post/6863283398727860238
