ClickHouse 历史
ClickHouse 最初是为了为 Yandex.Metrica 提供支持而开发的,它是世界上第二大网络分析平台,并且一直是该系统核心组件。数据库中拥有超过 13 万亿条记录,每天处理超过 200 亿个事件,ClickHouse 允许直接从非聚合数据中即时生成自定义报表。本文简要介绍了 ClickHouse 在开发初期阶段的目标。
Yandex.Metrica 基于点击和会话构建自定义报表,用户可以定义任意细分。这样做通常需要构建复杂的聚合,例如唯一用户的数量。用于构建报表的新的数据会实时到达。
截至 2014 年 4 月,Yandex.Metrica 每天跟踪约 120 亿个事件(页面浏览量和点击量)。所有这些事件都必须存储起来,以便构建自定义报表。单个查询可能需要在几百毫秒内扫描数百万行,或者在几秒钟内扫描数亿行。
在 Yandex.Metrica 和其他 Yandex 服务中的使用
ClickHouse 在 Yandex.Metrica 中发挥着多种作用。其主要任务是使用非聚合数据在线构建报表。它使用一个由 374 台服务器组成的集群,该集群在数据库中存储超过 20.3 万亿行。压缩数据的体积约为 2 PB,不包括重复数据和副本。未压缩数据(TSV 格式)的体积约为 17 PB。
ClickHouse 还在以下流程中发挥着关键作用:
- 存储来自 Yandex.Metrica 的会话回放数据。
- 处理中间数据。
- 使用分析构建全局报表。
- 运行查询以调试 Yandex.Metrica 引擎。
- 分析来自 API 和用户界面的日志。
如今,Yandex 的其他服务和部门中有多达几十个 ClickHouse 实例:搜索垂直领域、电子商务、广告、商业分析、移动开发、个人服务等。
聚合数据和非聚合数据
普遍认为,为了有效地计算统计数据,必须聚合数据,因为这可以减少数据量。
但是数据聚合存在很多限制:
- 必须预先定义所需的报表列表。
- 用户无法创建自定义报表。
- 当对大量不同的键进行聚合时,数据量几乎没有减少,因此聚合毫无用处。
- 对于大量报表,聚合变化过多(组合爆炸)。
- 当聚合具有高基数的键(例如 URL)时,数据量减少不多(不到两倍)。
- 因此,聚合后的数据量可能会增加而不是减少。
- 用户不会查看我们为其生成的所有报表。这些计算中很大一部分是无用的。
- 对于各种聚合,数据的逻辑完整性可能会被破坏。
如果我们不进行任何聚合并使用非聚合数据,这可能会减少计算量。
但是,使用聚合,大部分工作是在线完成的,并且相对平静。相比之下,在线计算需要尽可能快地计算,因为用户正在等待结果。
Yandex.Metrica 拥有一个专门用于聚合数据的系统,称为 Metrage,它用于大多数报表。从 2009 年开始,Yandex.Metrica 还使用了一个专门的 OLAP 数据库来存储非聚合数据,称为 OLAPServer,它以前用于报表构建器。OLAPServer 对于非聚合数据运行良好,但它有许多限制,无法按预期用于所有报表。这些限制包括缺乏对数据类型的支持(仅限数字)以及无法实时增量更新数据(只能通过每天重写数据来完成)。OLAPServer 不是 DBMS,而是一个专门的数据库。
ClickHouse 的最初目标是消除 OLAPServer 的限制并解决所有报表中使用非聚合数据的问题,但多年来,它已发展成为一个通用的数据库管理系统,适用于各种分析任务。