什么是Clickhouse

Clickhouse是俄罗斯yandex公司于2016年开源的一个列式存储数据库管理系统,是流行的OLAP数据库之一,使用MPP架构,以其超高的查询性能受到业界的青睐。

Clickhouse数据压缩性能很好,相比PostgreSQL,所需磁盘空间减少70%;社区活跃,支持TTL(过期数据定期删除),适配多种操作语言(Java、Go、Python、Nodejs)。

它支持标准的SQL语言,包括SELECT、INSERT、UPDATE、DELETE等常见操作,还支持窗口函数、聚合函数、JOIN等复杂的查询和分析功能。易用性也比较不错。

--创建表格
CREATE TABLE student (
    id UInt16,
    name String,
    age UInt8
) ENGINE = Memory;
--插入数据
INSERT INTO student VALUES
    (1, 'Alice', 20),
    (2, 'Bob', 22),
    (3, 'Charlie', 19);
--查询数据
SELECT * FROM student;
--聚合查询
SELECT AVG(age) AS avg_age FROM student;
--join查询
SELECT s.name, c.course_name
FROM student s
LEFT JOIN course c ON s.id = c.student_id;

支持从多种数据源进行数据接入,用于OLAP分析。

--接入MySQL数据
SELECT *
FROM
   mysql(
    'localhost:3306',
    'my_database',
    'my_table',
    'postgresql_user',
    'password')
;

但Clickhouse也有其缺点,它主要关注单表优化,不能很好地处理复杂表达式和多表join的场景,而且在需要落盘的场景clickhouse也没有做过很好的优化。更新与删除的支持并不好。

# 官网文档中的说法

Although ClickHouse is geared toward high volume analytic workloads, it is possible in some situations to modify or delete existing data. These operations are labeled "mutations" and are executed using the ALTER TABLE command. You can also DELETE a row using the lightweight delete capability of ClickHouse.
#虽然ClickHouse主要用于高容量分析工作负载,但在某些情况下可以修改或删除现有数据。这些操作称为"变更",并使用ALTER TABLE命令执行。您还可以使用ClickHouse的轻量级删除功能来删除行。

TIP
If you need to perform frequent updates, consider using deduplication in ClickHouse, which allows you to update and/or delete rows without generating a mutation event.
# 如果您需要频繁更新操作,请考虑在ClickHouse中使用去重操作,它可以允许您进行更新和/或删除行而不会生成变异事件。

所以总结起来,Clickhouse是一个MPP列式存储数据库,适合中小规模数据的OLAP分析(MPP数据库在架构上注定会有扩展上限)、时时序数据分析、接收存储实时流任务(如Flink)的结果数据,能够实时接入多种数据源,分析性能出色,易用性较好(使用SQL语法),数据空间占用少(支持压缩),社区活跃(解决问题方便)。但它注重单表性能,在多表关联场景中性能较差,不能很好地处理复杂表达式,不适合实时更新与删除的场景。

官方文档:https://clickhouse.com/docs/en/getting-started/quick-start

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐