JJava 知识库
JAVA INTERVIEW

高频面试题

CK进阶约 3 分钟

你们项目为什么引入 ClickHouse?它解决了什么问题,又有哪些场景坚决不用?

参考回答约 3 分钟 · 口语表达
先说结论

这个问题我会先说项目结论:ClickHouse 的核心优势是对海量数据进行高吞吐写入、列裁剪、压缩、扫描与聚合;不足是高频单行更新、强事务、复杂点查、超高查询并发和跨行约束并非其主要设计目标。 技术选型不能只回答“ClickHouse 快”,而要说明它在哪类负载下快,以及为了这种速度放弃了什么。

01

我会先交代项目背景和选型结论。从列式存储、向量化执行、实时分析到事务与高并发限制全面评估 ClickHouse。ClickHouse 的核心优势是对海量数据进行高吞吐写入、列裁剪、压缩、扫描与聚合;不足是高频单行更新、强事务、复杂点查、超高查询并发和跨行约束并非其主要设计目标。 技术选型不能只回答“ClickHouse 快”,而要说明它在哪类负载下快,以及为了这种速度放弃了什么。

02

具体落地时,我会沿着实际调用链来讲。沿着「确认分析型访问模式 → 列式压缩存储 → 向量化并行执行 → 预聚合/跳过无关数据 → 评估更新事务与并发边界」观察输入、状态与输出,这些阶段都可以从日志、指标或源码里验证。 确认分析型访问模式 ClickHouse 适合扫描少量列、聚合大量行的 OLAP,而不是点更新频繁的事务系统。 列式压缩存储 同列数据类型一致、相邻值相关,压缩比和读取带宽利用率通常优于行存。 system.querylog:分析型扫描证据。 system.mutations:更新删除队列。 我会先确认请求实际走到了哪条路径,再用运行数据验证,不会只看类名或配置猜测。

03

参数和容量不能靠默认值,我会结合业务量来定。同一事务点查、范围聚合和批量写在 MySQL/CH 上对比,明确访问模式。

04

效果要用数据证明,线上问题也要能闭环。固定输入和基线 先在没有故障注入的环境执行上述配置,固定数据规模、并发度、运行时版本和预热时间。以「mutation backlog」为主基线,记录值应满足「记录稳态基线」;同时保存 扫描吞吐、压缩比,使后续变化能够回到同一时间轴比较。 团队看重查询性能,却忽略订单状态频繁更新和唯一约束。Mutation 堆积、查询读到多版本,最终又引入复杂补偿。正确架构是 MySQL 保持事务事实,ClickHouse 通过 CDC 承载分析。 用 OLAP 替代唯一约束事务库:扫描吞吐:事务事实留 OLTP。 无数据布局就期待自动加速:压缩比:分析通过 CDC 入 CH。

05

最后我会主动说明这个方案不适合什么场景。方案:更适合的场景:主要收益:代价与边界。 ClickHouse:大规模明细聚合与日志分析:扫描吞吐、压缩和并行强:事务更新与高并发点查受限。 MySQL/PostgreSQL:事务、约束与点查:一致性与更新成熟:大范围分析扫描成本高。 Elasticsearch:全文检索与相关性查询:倒排、模糊检索和聚合:存储成本与强事务能力有限。