跳到主要内容
跳到主要内容

ClickHouse 历史

ClickHouse 最初是为了支持 Yandex.Metrica 而开发的,它是全球第二大网络分析平台,并且仍然是其核心组件。ClickHouse 数据库中拥有超过 13 万亿条记录,每天处理超过 200 亿个事件,它允许直接从非聚合数据中动态生成自定义报告。本文简要介绍了 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 的会话回放数据。
  • 处理中间数据。
  • 使用 Analytics 构建全局报告。
  • 运行查询以调试 Yandex.Metrica 引擎。
  • 分析来自 API 和用户界面的日志。

如今,在其他 Yandex 服务和部门中有数十个 ClickHouse 安装:搜索垂直领域、电子商务、广告、商业分析、移动开发、个人服务等。

聚合和非聚合数据

普遍认为,为了有效地计算统计信息,必须聚合数据,因为这可以减少数据量。

然而,数据聚合有很多限制

  • 您必须有一个预定义的所需报告列表。
  • 用户无法制作自定义报告。
  • 当对大量不同键进行聚合时,数据量几乎没有减少,因此聚合是无用的。
  • 对于大量报告,聚合变体太多(组合爆炸)。
  • 当聚合具有高基数(例如 URL)的键时,数据量减少不多(不到两倍)。
  • 因此,使用聚合的数据量可能会增长而不是缩小。
  • 用户不会查看我们为他们生成的所有报告。这些计算中的很大一部分是无用的。
  • 对于各种聚合,数据的逻辑完整性可能会被破坏。

如果我们不聚合任何内容并使用非聚合数据,这可能会减少计算量。

然而,通过聚合,大部分工作都在线下完成,并且相对平静地完成。相比之下,在线计算需要尽可能快地计算,因为用户正在等待结果。

Yandex.Metrica 有一个专门用于聚合数据的系统,称为 Metrage,它用于大多数报告。从 2009 年开始,Yandex.Metrica 还使用了一个专门用于非聚合数据的 OLAP 数据库,称为 OLAPServer,该数据库以前用于报表生成器。OLAPServer 在处理非聚合数据方面表现良好,但它有许多限制,使其无法像期望的那样用于所有报告。这些限制包括缺乏对数据类型的支持(仅限数字)以及无法实时增量更新数据(只能每天重写数据)。OLAPServer 不是 DBMS,而是一个专门的 DB。

ClickHouse 的最初目标是消除 OLAPServer 的限制,并解决所有报告中使用非聚合数据的问题,但多年来,它已发展成为一个通用的数据库管理系统,适用于广泛的分析任务。