为什么使用ClickHouse?有哪些优势?有哪些缺点?
优点:
- 真正的列式DBMS 除了数据本身外不应该存在其他额外的数据。
这意味着为了避免在值旁边存储它们的长度“number”,你必须支持固定长度数值类型。
- 数据压缩:数据压缩存储在性能方面发挥着关键作用
- 数据的磁盘存储:工作在传统磁盘上的系统
- 多核心并行处理:大型查询以一种自然的方式并行化,占用当前服务器上可用的所有必要资源
- 多服务器分布式处理:在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行的在所有shard上进行处理
- 支持SQL:ClickHouse支持基于SQL的查询语言,该语言大部分情况下是与SQL标准兼容的。 支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。 不支持窗口函数和相关子查询
- 向量引擎:为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理 - 实时的数据更新 ClickHouse支持在表中定义主键。
为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断高效的写入到表中,并且写入的过程中不会存在任何加锁的行为
- 索引 按照主键对数据进行排序,使能够以几十毫秒的低延迟对数据进行特定值查找或范围查找
- 适合在线查询 在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中 - 支持近似计算 ClickHouse提供各种各样在允许牺牲数据精度的情况下对查询进行加速的方法:
1、用于近似计算的各类聚合函数,如:distinct values, medians, quantiles
2、 基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。
3、 不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用。
缺点:
- 没有完整的事物支持
- 缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据
- 稀疏索引使得ClickHouse不适合通过其键检索单行的点查询