ClickHouse 主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。
和我们常见的关系型数据库非常不同。比如,MySQL,Postgresql,SQL Server 等数据库采用的都是行式存储,而 ClickHouse 采用的却是列式存储。下面我们通过一个简单的例子,来比较它们的不同。再比如,下面的 SQL:
SELECT name FROM artcle where id > 10000;
在众多的数据中,我只取一列,但我需要把每条数据都读取出来。
基于上面传统数据库的一些特点,ClickHouse 另辟蹊径,推出了列式存储。

看上图的列式存储示例,完全和 MySQL 等数据库不同。当我执行下面的 SQL 时,查询效率非常的高!
SELECT name FROM article where id > 10000;
由于 name 列的数据都存储在一起,因此效率大大地超过了传统的数据库。
除了逻辑上的不同,磁盘上的组织结构也大不一样。

除了列式存储上的不同,ClickHouse 还有高效的数据压缩,默认使用LZ4算法,总体压缩比可达 8:1。ClickHouse 还采用了分布式多主架构提高并发性能,ClickHouse使读请求可以随机打到任意节点,均衡读压力,写请求也无需转发到master节点,不会产生单点压力。
ClickHouse 还有向量引擎,利用 SIMD 指令实现并行计算。对多个数据块来说,一次 SIMD 指令会同时操作多个块,大大减少了命令执行次数,缩短了计算时间。向量引擎在结合多核后会将 ClickHouse 的性能淋漓尽致地发挥出来。
ClickHouse 在索引上也有不同,采用了稀数索引及跳数索引。同时还有很多 MergeTree,提供海量业务场景支持。
总结
ClickHouse的列式存储有其优势,但是也有不足,例如不支持事务、异步修改。
在数据不是频繁修改的情况下,采用ClickHouse来存储和处理数据查询。如果需要频繁修改数据场景,最好的方案还是用MySQL,并对数据进行分表处理。
网友回复
DLNA与UPnP的区别和不同?
苏超自建抢票app,通过先预约再抽签化解高并发抢票?
python如何让给电脑在局域网中伪装成电视接收手机的投屏图片视频播放?
如何结合python+js如何自己的视频编码与加密播放直播?
python如何在电脑上通过局域网将本地视频或m3u8视频投屏电视播放?
腾讯视频爱奇艺优酷vip电影电视剧视频如何通过python绕过vip收费直接观看?
有没有可免费观看全球电视台直播m3u8地址url的合集?
有没有实现观影自由的免vip影视苹果 CMS V10 API的可用url?
python如何实时检测电脑usb插入检测报警?
如何判断真人操作的鼠标移动直线轨迹与机器操作的轨迹?