什么是clickhouse
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。列式数据库更适合于OLAP场景(对于大多数查询而言,处理速度至少提高了100倍)
特性
- 海量数据:每秒几亿行的吞吐能力
- 数据压缩:支持以更小的磁盘存储更多的数据
- 并行处理:ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询
- 分布式集群:支持多分片存储,查询可以并行地在所有分片上进行处理
想要了解更多,请查看:https://clickhouse.com/docs/zh/introduction/distinctive-features
适用场景
- 适合海量数据存储,大批量数据快速插入
写入到MergeTree表中时,写入速度大约为50到200MB/s
- 适合查询频率较低,查询数据庞大
一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s)
在相同的情况下,ClickHouse可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个)。但是由于这不适用于分析型场景。因此我们建议每秒最多查询100次。
重要概念
合并树(MergeTree)
MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。
分布式表(Distributed)
分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。
物化视图(MaterializedView)
物化视图(Materialized View)是一种特殊的视图,它可以存储查询结果,并在数据发生变化时自动更新。物化视图在许多情况下都非常有用,例如,你可以使用物化视图来预计算复杂的聚合查询,从而提高查询性能。
物化视图类似于数据库的触发器,将满足条件的数据存储并聚合
分区
分区(Partition)是数据存储和管理的一个重要概念。每个表都被分成多个分区,每个分区包含了一部分数据。分区的主要目的是提高查询性能和管理数据的便利性。
分区可以极大地提高查询性能,因为当你的查询可以被限制在一个或几个分区内时,ClickHouse只需要读取这些分区的数据,而不是整个表的数据。此外,分区还可以帮助你更有效地管理数据,例如删除旧数据、移动热数据到高性能的硬盘等。
Part
Part是分区(Partition)的一部分,是数据存储的最小单元。每个分区都由一个或多个Part组成。当你向表中插入数据时,ClickHouse会创建一个新的Part来存储这些数据
也就是说每一次Insert,就是一个 part。(当然也有 AsyncInsert,后面再聊)
合并(Merge)
Part的管理主要通过后台合并(Merge)操作来进行。合并操作会将多个小的Part合并成一个大的Part,以减少Part的数量和索引的大小,从而提高查询性能和数据压缩率
- 本文作者: Hongker
- 本文链接: https://hongker.github.io/2024/06/04/clickhouse-introduce/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!