前两天和一个做数据的老朋友喝酒,他抱怨公司最近在做数据库迁移,从 MySQL 搬到 ClickHouse,光是数据同步就卡了三天,业务差点停摆。我问他为什么,他说老板听说 ClickHouse 快得像火箭,想用它来做 OLAP 分析,替代原来的实时报表。这事儿听着很熟,很多团队都在这个坑里翻车。ClickHouse 确实快,但前提是先弄清楚它到底适合干什么、不适合干什么,否则迁移不是升级,而是给自己挖坟。

数据库迁移本质上是一次“换发动机”。你原来的系统可能是 MySQL、PostgreSQL,甚至是 Oracle,跑得还不错,但数据量上来了,查询慢了,报表跑不动,老板一拍大腿说“上 ClickHouse”。可 ClickHouse 不是万能药,它是列式存储、分布式查询的 OLAP 引擎,专门为分析型场景设计。把它拿去做高频写入、行级更新、事务回滚,就像用跑车拉货,跑得快但装不了多少,还容易翻车。我见过一个团队,把用户登录日志这种高频、小数据量的写入直接丢进 ClickHouse,结果 MergeTree 引擎合并时 CPU 爆满,查询反而更慢。所以,迁移之前一定要把业务场景掰开揉碎地审视一遍。
第一步,是确认你的数据模型能否适配 ClickHouse 的表结构。MySQL 里你习惯用 JOIN,动不动就关联五六个表,但 ClickHouse 的强项是单表扫描和聚合,多表 JOIN 的性能会急剧下降。我认识的一个电商团队,迁移时直接把原来的星型模型搬过去,订单表、商品表、用户表来回 JOIN,跑一个报表要十几秒,还不如原来的 MySQL。后来他们痛定思痛,把数据做了宽表处理,提前把常用字段打平到一个表里,查询时间降到 0.3 秒。这个教训说明:迁移不是简单复制表结构,需要重新设计数据模型,用空间换时间。
第二步,是处理历史数据与增量数据的同步问题。ClickHouse 对插入友好,但更新和删除是它的短板。你在 MySQL 里天天增删改,到了 ClickHouse 就得想别的办法。很多团队的做法是用 Kafka 做缓冲,把 MySQL 的 binlog 实时解析成 JSON,然后通过 ClickHouse 的 Materialized View 做增量同步。但坑很多:比如 binlog 格式不对、时间戳类型不匹配,或者主键冲突导致数据重复。我见过最惨的案例,一个金融团队迁移交易流水时,去重逻辑没做好,报表里多出几百万条重复记录,财务对账花了一个礼拜。因此,增量同步建议使用 ClickHouse 官方推荐的 ReplacingMergeTree 引擎,配合版本号和时间戳,才能保证最终一致性。
第三步,性能调优是迁移的终极考验。很多人以为 ClickHouse 天然就快,实际跑起来却慢得像蜗牛。问题常出在以下几方面:分区键选得不对导致扫描范围过大;排序键设置不合理让聚合查询走全表扫描;或者副本数配置过高,写入时网络开销大。我有个朋友做广告点击分析,数据量大概每天 2000 万条,最初分区键按天设置,查询按周聚合,结果每次都要扫描 7 个分区。后来改成按月分区,并配合分钟级别的排序键,查询时间从 8 秒降到 0.5 秒。这说明分区粒度要平衡:太细跨分区太多,太粗单分区数据量过大。建议先拿一个月的数据做测试,找到最佳分区策略。
还有一个容易被忽略的点:写入压力。ClickHouse 虽然号称每秒能写入几十万行,但那是在纯追加模式下。如果业务有大量 UPDATE 或 DELETE,或者写入频率不均匀——白天高峰期大量涌入,晚上几乎为零——MergeTree 引擎的合并操作就会频繁触发,导致 CPU 和 I/O 双双吃紧。我见过一个物联网团队,设备每 5 秒上报一次,平均每秒写入不到 1 万行,看似不高,但因为数据中包含时间戳和状态字段,更新占了 30%,结果合并队列天天堆积,最终只能停机合并。他们的解决方案是改用 Buffer 引擎做写入缓冲,批量合并后再写入主表,问题得以解决。
迁移完成后,千万别急着全量上线。先跑一段双写,让新老系统同时运行,对比查询结果。这一步很多人嫌麻烦,觉得浪费时间,但真出问题时,后悔已经来不及。我有个做游戏数据分析的客户,迁移后直接切流量,结果发现 ClickHouse 里某个聚合函数(比如 quantile)的精度和 MySQL 不一样,报表数据差了 0.5%。虽然只差一点点,但老板看到直接骂娘。后来他们花了三天时间把所有 SQL 重新测试一遍,才发现是数据类型隐式转换导致的问题。所以,双写测试至少跑一周,覆盖所有核心查询,确保结果一致。
想说一句大实话:ClickHouse 不是银弹,它是个工具,有自己的适用边界。如果你的业务是实时 OLTP、高并发写入、频繁行级更新,那 ClickHouse 并不适合,老老实实用 MySQL 或 TiDB 更靠谱。但如果你做的是数据分析、日志聚合、用户行为画像、广告归因这类场景,数据量在千万级以上,查询模式以聚合和过滤为主,ClickHouse 能带来翻天覆地的提升。迁移之前,先问自己:我是真的需要 ClickHouse 的快,还是被老板或销售忽悠了?想清楚再动手,别让一次迁移变成一场灾难。


