--- title: 杂 categories: [bagu] --- ## clickhouse ClickHouse 的高性能主要来自以下几个方面的设计特点: ​ 1. **列式存储**:ClickHouse采用列式存储(Columnar Storage),在查询时可以只读所需的列,而不是整个行。这极大减少了磁盘I/O,尤其适合分析型查询。 ​ 2. **数据压缩**:列式存储便于数据压缩,ClickHouse内置了多种压缩算法(如LZ4、ZSTD等),根据数据特征选择最佳压缩方式,减少了存储空间和I/O开销。 ​ 3. **向量化引擎**:ClickHouse的数据处理是基于向量化引擎的。向量化处理数据意味着每次处理一个数据块,而不是单条数据,充分利用了CPU的指令集,极大提升了数据处理速度。 ​ 4. **多线程并行查询**:ClickHouse支持多线程并行处理,分区并行化查询,充分利用多核CPU的性能。在一个查询中可以调度多个线程同时工作,使得复杂查询能高效完成。 ​ 5. **内存管理**:ClickHouse对内存管理进行了优化,尽可能减少内存分配和释放操作。比如查询时,通常不会频繁分配和释放内存,而是通过重用内存块来降低内存碎片。 ​ 6. **数据分区和分片**:ClickHouse支持对数据进行水平分区和分片,能够处理海量数据。它可以将不同分片的数据分布到不同节点上,并行处理分片数据,提高了系统的扩展性和查询性能。 ​ 7. **基于MergeTree的表引擎**:MergeTree 是ClickHouse的核心存储引擎。它支持数据的自动排序和索引,查询时可以快速定位目标数据块,避免了全表扫描。 ​ 8. **向量化索引**:ClickHouse会为列数据创建稀疏索引,通过向量化索引来过滤数据块,进一步加速查询。辅助索引的存在能够快速定位相关数据块,尤其适用于高基数的列。 ​ 9. **数据延迟写入和异步物化视图**:ClickHouse的写入延迟较低,因为它将数据先写入内存中的“insert buffer”缓冲区,之后才会批量写入磁盘。异步物化视图会在后台进行处理,不影响查询性能。 以上技术特性使ClickHouse在处理大数据量的复杂分析查询时,性能极为优越,能够快速响应实时查询需求。 建表时order by的作用: 1. **确定数据存储顺序**:ORDER BY字段决定了表内数据的存储顺序,ClickHouse会按照该字段对数据块进行排序。 2. **自动生成稀疏索引**:ORDER BY字段会自动创建稀疏索引,帮助ClickHouse跳过不满足查询条件的数据块,从而加速查询。 3. **提高查询效率**:尤其对于范围查询、过滤、分组等,选择合适的ORDER BY字段能够减少扫描量并加快响应速度。 ### 名词解释 - 稀疏索引:在ClickHouse中,数据组织为:分区(partition)->数据块(parts)->数据段(granules)。稀疏索引记录每个数据段的特征(比如最大值、最小值),查询的时候用来快速跳过某些不需要加载的数据段。 - 辅助索引:稀疏索引不适用于加速高基数列的查询。辅助索引有bloom filter、minmax等