透过ClickHouse学习列式存储数据库

💡 原文中文,约7200字,阅读约需18分钟。
📝

内容提要

ClickHouse是一个开源的列式数据库管理系统,适用于在线分析处理查询。它支持多种数据存储引擎,适用于数据分析、数据挖掘和日志分析等场景。但不支持事务和关系数据的修改。ClickHouse的数据存储和索引采用稀疏索引和压缩存储方式,联合主键查询可以使用二分查找法进行快速索引。删除和更新操作是异步执行的,可能存在一致性问题。

🔎

延伸解读

列式存储的适用场景与限制

列式存储将同一列的数据连续存放,因此按列查询时无需读取整行数据,非常适合聚合分析。但这也意味着单行查询效率较低,因为需要从多个列文件中分别读取数据再拼接。ClickHouse作为列式数据库,在批量查询分析上优势明显,但按键查找单行的效率不高,这与其存储设计直接相关。

稀疏索引如何加速查询

ClickHouse采用稀疏索引,每个granule(默认8192行)只记录第一条数据的索引。这样索引条目极少,可以常驻内存,并通过二分查找快速定位。但稀疏索引也带来限制:如果查询条件不包含联合主键的第一个列,就无法利用索引,只能全表扫描。因此,设计表结构时需考虑查询模式。

异步更新删除与一致性风险

ClickHouse的更新和删除是异步的,通过mutation操作实现。删除时先标记,后续合并才清理;更新时重建分区并替换。这些操作分批进行,期间查询可能同时看到旧数据和新数据,因为ClickHouse不保证原子性。因此,它适合一次更新大量数据的场景,而不适合频繁的单行修改。

选型建议:何时考虑ClickHouse

ClickHouse适合有大量数据分析需求的场景,如日志分析、数据挖掘,其列式存储和压缩特性可大幅提升查询速度并节省存储。但它不支持事务,数据修改效率低,且单行查询性能不佳。如果业务需要频繁更新或强一致性事务,ClickHouse可能不是最佳选择。选型时应根据实际读写模式权衡。

❓

Q&A

ClickHouse是什么类型的数据库?

ClickHouse是一个开源的列式数据库管理系统,专门用于在线分析处理查询。

ClickHouse的主要优势是什么?

ClickHouse在批量查询分析上具有显著优势,响应速度比其他数据库快。

ClickHouse支持哪些数据存储引擎?

ClickHouse支持多种数据存储引擎,适合数据分析、数据挖掘和日志分析等场景。

ClickHouse如何处理删除和更新操作?

ClickHouse的删除和更新操作是异步执行的,可能导致一致性问题,删除操作仅标记为已删除。

列式存储数据库与行式存储数据库有什么区别?

列式存储数据库按列存储数据,适合按列查询,而行式存储数据库按行存储数据,适合按行访问。

ClickHouse的主键索引是如何构建的?

ClickHouse通过稀疏索引构建主键索引,仅记录granule的开始位置,以减少存储空间。

🏷️

标签

➡️

继续阅读