Clickhouse支持完整的DBMS。支持动态创建、修改或删除数据库、表和视图,可以动态查询、插入、修改或删除数据。
Clickhouse采用列式存储,数据按列进行组织,属于同一列的数据会被保存在一起,这是后续实现秒级查询的基础。
列式存储能够减少数据扫描范围,数据按列组织,数据库可以直接获取查询字段的数据。而按行存逐行扫描,获取每行数据的所有字段,再从每一行数据中返回需要的字段,虽然只需要部分字段还是扫描了所有的字段,按列存储避免了多余的数据扫描。
另外列式存储压缩率高,数据在网络中传输更快,对网络带宽和磁盘IO的压力更小。
除了完整的DBMS、列式存储外,还支持在线实时查询、拥有完善的SQL支持和函数、拥有多样化的表引擎满足各类业务场景。
正因为Clickhouse的这些特性,在它适合的场景下能够实现动态、实时的秒级别查询。
适合的场景
读多于写。数据一次写入,多次查询,从各个角度对数据进行挖掘,发现数据的价值。
大宽表,读大量行聚合少量列。选择少量的维度列和指标列,对大宽表的数据做聚合计算,得出少量的结果集。
数据批量写入,不需要经常更新、删除。数据写入完成后,相关业务不要求经常对数据更新或删除,主要用于查询分析数据的价值。
Clickhouse适合用于商业智能领域,广泛应用于广告流量、App流量、物联网等众多领域。借助Clickhouse可以实时计算线上业务数据,如资源位的点击情况,以及并对各资源位进行bi预警。
MergeTree
MergeTree系列引擎是最基础的表引擎,提供了主键索引、数据分区等基本能力。了解这部分内容,是后续开发和优化的基础和方向。
- **分区。**指定表数据分区方式,支持多个列,但单个列分区查询效果最好。有数据写入时属于同一分区的数据最终会被合并到同一个分区目录,不同分区的数据永远不会被合并在一起。结合业务场景设置合理的分区可以减少查询时数据文件的扫描范围。