click house的列存储引擎
ClickHouse列存储引擎概述ClickHouse的列存储引擎是其高性能分析能力的核心采用列式存储结构优化了数据压缩、批量处理和向量化执行。以下是其关键特性和工作机制列式存储核心机制数据按列而非行存储每个列单独保存在物理文件中。这种设计显著减少I/O操作尤其在只查询部分列时只需读取相关列文件。列数据默认使用LZ4压缩算法压缩比通常达到5-10倍。高压缩率得益于同列数据的低熵值相同数据类型和值范围使压缩效率更高。主要引擎类型MergeTree系列引擎作为核心引擎支持主键索引、分区和数据合并。典型配置包括CREATE TABLE hits ( EventDate Date, CounterID UInt32, UserID UInt64 ) ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate);PARTITION BY按时间分区过期数据可自动删除ORDER BY指定主键加速范围查询ReplacingMergeTree处理重复数据保留最后插入版本ENGINE ReplacingMergeTree(ver)其中ver为版本列自动去重发生在后台合并时。AggregatingMergeTree预聚合数据适合实时汇总场景ENGINE AggregatingMergeTree() ORDER BY (date, city) AS SELECT date, city, sumState(amount) AS amount FROM source_table GROUP BY date, city;性能优化技术稀疏索引每8192行granule生成一个主键索引条目结合二分查找快速定位数据块。索引大小仅占数据量0.1%左右。向量化执行利用SIMD指令并行处理整列数据如对UInt32类型列求和时CPU可同时处理8-16个数值。数据分片与分布式查询通过Distributed引擎实现水平扩展CREATE TABLE distributed_table AS local_table ENGINE Distributed(cluster, db, local_table, rand());存储格式细节列存储文件由.bin数据、.mrk标记和.idx索引组成。标记文件记录数据块在.bin中的偏移量实现快速跳转。编码方式包括Delta适用于时序数据DoubleDelta平滑数值变化T64压缩64位整数适用场景与限制优势场景高吞吐分析查询每秒GB级扫描实时数据摄入每秒百万行写入超大规模数据集PB级限制不适合高频单行更新采用ReplacingMergeTree可部分缓解事务支持有限无ACID点查询性能低于行式数据库通过合理选择引擎类型和优化参数配置ClickHouse列存储可实现比传统行式数据库高100倍的分析查询性能。