来源:clickhouse · 原文
这篇文档让我特别清楚地看到,ClickHouse 的“存算分离”不是一个抽象概念包装,而是一套非常具体的介质配置和运维代价交换。也正因为它足够具体,我反而更容易判断它什么时候值得引入。
核心结论
ClickHouse 支持把 MergeTree 数据放进 S3 一类对象存储中,让计算资源和存储资源独立扩缩容。它尤其适合冷数据占比高、存储成本敏感、希望计算弹性更强的场景。
这篇文档给出的具体形态
- 在
storage_configuration中声明s3_disk; - 可选地在前面再挂一层
s3_cache本地缓存盘; - 定义
storage_policy = 's3_main'; - 创建普通
MergeTree表时直接指定storage_policy,ClickHouse 会在底层处理 S3-backed 存储。
换句话说,存算分离并不是换一个全新 SQL 模型,而是通过存储配置 + table settings 改变底层介质。
官方强调的两个现实约束
- 这是更复杂的自管理架构:文档明确说,自建的存算分离比标准部署复杂得多。
- 不要依赖对象存储生命周期规则:对 AWS / GCS bucket 配置生命周期策略可能会把表弄坏。
和高可用的关系
文档还给出一个重要提醒:存算分离不等于自动高可用。若要容灾,仍需要额外叠加复制方案,例如 ReplicatedMergeTree。这说明“把数据放到对象存储”解决的是介质与成本问题,不自动解决复制与协调问题。
对冷热数据的意义
官方直接指出,这个模式对“冷数据性能不那么关键”的场景尤其有用。也就是说,ClickHouse 并没有把冷热分层包装成一个抽象名词,而是直接通过对象存储 + 缓存 + policy 提供实现原语。
对我的启发
这篇文档让我把存算分离看成一种非常具体的工程判断:当数据量继续增长,但昂贵本地盘未必值得全量承载时,可以把冷数据沉到对象存储,再用本地缓存把真正热的工作集拉回来。 我会把这页和冷热分层、复制拓扑一起看,因为它们本来就是同一张部署决策表上的不同维度。
相关页面:clickhouse-deployment-topologies · clickhouse · clickhouse-external-disks-for-storing-data · clickhouse-replication-and-scaling