ClickHouse 详解
1. 简介
官方文档:https://clickhouse.yandex/docs
ClickHouse 是一个采用列式存储,用于联机分析(OLAP)的数据库管理系统(DBMS)
2.ClickHouse 的优点
2.1 "真正"的列式存储
一个真正的列式存储的数据库管理系统中,除了数据本身之外不应该存在其他额外的数据。意味着为了避免在只旁边存储它们的长度 'number',必须支持固定长度的数值类型。ClickHouse 的数据类型都是固定长度。
2.2 实时的数据更新
ClcikHouse 数据是以增量的方式有序的存储在 MergeTree 中。因此,数据可以持续不断高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
2.3 支持近似计算
ClickHouse 提供各种各样在允许牺牲精度的情况下对查询进行加速的方法
- 用于近似计算的各类聚合函数,如:distinct values, medians, quantiles
- 基于数据的部分样本进行近似查询。这时,仅会从磁盘检索少部分比例的数据。
- 不使用全部的聚合条件,通过随机选择有限个数据聚合条件进行聚合。这在数据聚合条件满足某些分布条件下,在提供相当准确的聚合结果的同时降低了计算资源的使用
2.4 支持数据复制和数据完整性
ClickHouse 使用异步的多住复制技术。当数据被写入到任何一个可用副本后,系统在后台将数据分发给其他副本。
- 只有 MergeTree 系列里的表壳支持副本
- 副本是表级别的,不是整个服务器级的。
- 副本不依赖分片,每个分片有它的独立副本
- 对于 Insert 和 Alter 语句操作数据的会在压缩的情况下被复制
- CREATE,DROP,DETACH,RENAME 语句只会在单个服务器上执行,不会被复制
- CREATE TABLE 在运行此语句的服务器上创建一个新的可复制表。如果此表已存在其他服务器上,则给该表添加新副本。
- DROP TABLE 删除运行此查询的服务器上的副本。
- RENAME 重命名一个副本。换句话说,可复制表不同的副本可以有不同的名称。
3. ClickHouse 的缺点
- 没有完整的事务支持
- 缺少高频率、低延迟的修改或删除已存在数据的能力,仅能用于批量删除或修改数据。