ClickHouse是Yandex(俄罗斯最大的搜索引擎)开源的用于实时数据分析的列式数据库,处理数据的速度比传统方法快100-1000倍。ClickHouse优于当今市场上类似的面向列的DBMS,每台服务器每秒处理数亿到超过10亿行和数十GB的数据。1、ClickHouse是什么?ClickHouse:是一个用于在线分析(OLAP)的列式数据库管理系统(DBMS)。让我们先澄清一些基本概念。OLTP:是传统的关系型数据库,主要操作增删改查,强调事务一致性,如银行系统、电子商务系统。OLTP:是一种仓库型数据库,主要用于读取数据和进行复杂的数据分析,侧重于技术决策支持,提供直观、简单的结果。然后我们用图来理解列式数据库和行式数据库的区别。在传统的行数据库系统(MySQL、Postgres、MSSQLServer)中,数据是这样的顺序存储:在列式数据库系统(ClickHouse)中,数据是按照以下顺序存储的:两种存储方式的比较:以上以上是ClickHouse的基本介绍,更多内容可以参考官方手册。2、业务问题业务端目前存储在Mysql,一张5000万数据量的大表和两张副表,单联表查询成本3分钟+,执行效率极低。经过索引优化,水平分表,逻辑优化,效果不佳,所以我们决定使用ClickHouse来解决这个问题。最后通过优化,查询时间缩短到1秒以内,查询效率提升200倍!希望通过这篇文章,能让你快速掌握这把利器,少在实践中走弯路。三、ClickHouse实践1、Mac下ClickHouse安装我是通过docker安装的,查看教程。也可以下载CK编译安装,比较麻烦。2、数据迁移:从Mysql到ClickHouseClickHouse支持Mysql的大部分语法,迁移成本低。目前有五种迁移方案:createtableenginmysql,mappingscheme数据还在Mysqlinsertintoselectfrom,先建表,再importcreatetableAsselectfrom,createtableandimportcsvofflinetoimportstreamsets选择数据迁移的第三个选项:CREATETABLE[IFNOTEXISTS][db.]table_nameENGINE=MergetreeASSELECT*FROMmysql('host:port','db','database','user','password')3.性能测试比较类型数据规模大小查询速度Mysql5000万10G205sClickHouse5000万600MB1s四、数据同步方案1)临时表新建临时中间表,将Mysql全量数据同步到ClickHouse中的临时表,然后替换原来的ClickHouse表,适用于数据量适中,频繁增量和变量的场景2)synch开源同步软件推荐:synch的原理是通过Mysql的binlog日志获取sql语句,一个然后传消息为什么队列消费task5.ClickHouse快?只需要读取需要计算的列数据,而不用读取行格式的整行数据,降低了IO成本。同列同类型有十倍的压缩提升,进一步降低了IO。Clickhouse根据不同的存储场景,制定个性化的搜索算法。坑1.用Mysql语句查询ClickHouse和mysql数据类型的区别,发现报错:解决方法:LEFTJOINBbONtoUInt32(h.id)=toUInt32(ec.post_id),transit,unsignedtypeassociation2.删除或更新是异步执行的,只保证最终一致性。查询CK手册,发现即便是支持最好数据一致性的Mergetree也只能保证最终一致性性能:如果对数据一致性要求高,建议做全同步解决。因此,随着数据量的增加,ClickHouse也支持集群。有兴趣的可以积极尝试一下:)
