2023年5月25日,在伦敦举行的 ClickHouse 聚会上,PostHog 的联合创始人兼首席技术官 Tim Glaser 介绍了他们的新项目 HouseWatch - 一套用于监控和管理 ClickHouse 的开源工具套件。在演讲中,他还分享了 PostHog 如何处理海量分析查询的见解,以及他们在扩展、优化和管理方面的策略。
PostHog 是一个开源解决方案,它将多种分析工具整合到一个平台中。它使用户能够执行复杂的漏斗查询、可视化趋势和过滤产品分析数据,从而提供关于用户行为的宝贵见解。
PostHog 拥有一个充满活力的开发者社区,在 GitHub 上获得了超过 10,000 颗星。它已经追踪了超过 500 亿个事件,主要在其美国云上,并管理着惊人的数据量。仅他们的事件表就处理了大约 62 TB 的未压缩数据(仅针对一列)。正在查询的未压缩数据总量在数百 TB 范围内。
PostHog 的功能:会话重放、功能标志和无缝数据集成
PostHog 提供了几个独特的功能,可以简化操作并提供关键见解。通过会话重放,用户可以观看网站上的实时互动以进行深入分析。功能标志允许特定用户群体体验新功能,从而辅助数据驱动的产品决策。此外,PostHog 的高级事件管道支持将数据无缝传输到不同的系统,有效地整合生成的见解。
通过 ClickHouse 增强可扩展性
PostHog 通过从 Postgres 过渡到 ClickHouse 并利用 AWS 服务器,成功扩展了他们的平台,有效地满足了他们不断增长的使用需求。PostHog 通过引入战略优化来解决慢查询和用户数据聚合问题。
挑战 1:优化 JSON 字段读取
PostHog 遇到的一个重大挑战是从 JSON 字段读取的性能影响。尽管 ClickHouse 可以高效地处理这个问题,但对于他们最大的客户来说,涉及数十亿事件的查询变得缓慢。为了解决这个问题,PostHog 在事件表中引入了一个物化列,识别出最常用的列并将它们物化。这种优化显著提高了查询性能并减少了处理时间。
挑战 2:按唯一用户聚合
当涉及到按唯一用户聚合数据时,PostHog 面临着一个复杂的问题。由于用户 ID 是可变的,并且需要合并来自不同来源的用户数据,传统的方案被证明效率低下。为了克服这个挑战,PostHog 实施了一种基于人员覆盖表的模式。他们没有直接修改事件数据,而是将旧的和新的人员 ID 以及版本存储在一个单独的表中。这种方法允许在需要时合并正确的人员 ID,从而实现高效的查询和聚合。更具体地说,
- 创建了一个“人员覆盖”表:此表与主事件表分开。它存储旧的人员 ID、新的人员 ID 和版本标识符(以了解最新的版本)。
- 与事件一起摄取的人员 ID 被认为是正确的 ID:这在约 96% 的情况下是正确的。但是,如果发生合并(例如,当某人登录或匿名用户变成已登录用户时),则会在人员覆盖表中添加一行。
- 人员覆盖表用于查询:在运行查询时,他们会加入人员覆盖表,并使用被覆盖的人员 ID 或事件上的原始人员 ID。
- 他们定期根据覆盖表更新人员 ID:为了防止人员覆盖表变得过大,他们运行一个作业,根据覆盖表更新人员 ID,汇总所有更改并保持快速的查询性能。
PostHog 所做的优化对性能产生了显著影响。正如 Tim Glaser 强调的那样,“Y Combinator 的查询平均时间从 18 秒降至 1 秒,而 P95 查询时间从 60 秒降至 4 秒。” 这种性能的提升使得数据分析更加高效,从而更快地获得见解并做出更好的决策。
额外优化:采样以提高性能
PostHog 认识到为用户提供查询性能控制的价值。为了解决这个问题,他们引入了采样功能,允许用户在准确性和速度之间进行权衡。通过提供一个按钮来调整采样率,用户可以加快查询执行速度并获得快速结果,尤其是在高需求或负载过重的情况下。
介绍 HouseWatch - 简化 ClickHouse 管理
PostHog 推出了 HouseWatch,这是一个可以通过 Docker 部署的 React 应用程序,旨在提供对 ClickHouse 基础设施的增强可见性和控制。该工具通过提供广泛的查询监控和操作管理功能,简化了 ClickHouse 管理。
HouseWatch 支持实时查询监控,提供必要的性能指标。用户可以快速评估查询性能并识别潜在的瓶颈,从而改进他们的决策过程。
监控长时间运行的查询
HouseWatch 使用户能够轻松识别和监控长时间运行的查询。该工具清晰地显示了执行时间最长的 10 个查询。用户可以快速查明与这些查询相关的特定团队或参数,从而有针对性地进行优化工作并提高整体查询性能。
模式统计信息和磁盘使用情况分析
借助 HouseWatch,用户可以访问有价值的模式统计信息。该工具提供了 ClickHouse 中最大表的概览,方便进行高效的磁盘使用情况分析。通过深入查看单个表,用户可以识别最大的列并采取积极措施来优化存储和增强性能。
简化的操作和查询控制
HouseWatch 通过提供必要的管理功能来简化 ClickHouse 操作。用户可以无缝终止正在运行的查询,无需手动干预。此外,HouseWatch 还包括一个迁移管理系统,允许用户创建前向和后向迁移,从而简化数据库模式更新并确保无缝的操作工作流程。
PostHog 的开源产品为用户提供了强大的工具,用于产品分析、会话重放、功能标志和实验。通过物化列和人员覆盖表等优化和创新,PostHog 显著提高了查询性能。HouseWatch 的引入有助于简化 ClickHouse 管理,提供有价值的见解、查询控制和简化的操作。正如 Tim 所说,“我们致力于革新数据管理,并为 ClickHouse 用户交付卓越的价值。”
更多详情
- 本次演讲于 2023 年 5 月 25 日在伦敦 ClickHouse Meetup 上进行
- 演示材料可在GitHub 上获取