Clickhouse写入分布式表还是本地表

先说结果,我们是写入分布式表。

网上的资料和ClickHouse云服务的同事都建议写入本地表。分布式表实际上是一张逻辑表并不存储真实的物理数据。如查询分布式表,分布式表会把查询请求发到每一个分片的本地表上进行查询,然后再集合每个分片本地表的结果,汇总之后再返回。写入分布式表,分布式表会根据一定规则,将写入的数据按照规则存储到不同的分片上。如果写入分布式表也只是单纯的网络转发,影响也不大,但是写入分布式表并非单纯的转发,实际情况见下图。

有三个分片S1、S2、S3,客户端连接到S1节点,进行写入分布式表操作。

  1. 第一步:写入分布式表1000条数据,分布式表会根据路由规则,假设按照规则300条分配到S1,200条到S2,500条到S3

  2. 第二步:client给过来1000条数据,属于S1的300条数据直接写入磁盘,数据S2,S3的数据也会写入到S1的临时目录

  3. 第三步:S2,S3接收到zk的变更通知,生成拉取S1中当前分片对应的临时目录数据的任务,并且将任务放到一个队列,等到某个时机会将数据拉到自身节点。

从分布式表的写入方式可以看到,会将所有数据落到client连接分片的磁盘上。如果数据量大,磁盘的IO会造成瓶颈。并且MergeTree系列引擎存在合并行为,本身就有写放大(一条数据合并多次),占用一定磁盘性能。在网上看到写入本地表的案例都是日增量百亿,千亿。我们选择写入分布式表主要有两点,一是简单,因为写入本地表需要改造代码,自己指定写入哪个节点,另一个是开发过程中写入本地表并未出现什么严重的性能瓶颈。双十一期间数据日增3000W(合并后)行并未造成写入压力。如果后续产生瓶颈,可能会放弃写入分布式表。

相关推荐
容器魔方18 分钟前
华为云云容器引擎CCE 2026-Q1优化升级,全面进化您的云原生体验!
大数据·分布式·云原生·容器·云计算
Trouvaille ~29 分钟前
【Redis篇】为什么需要 Redis:从单机到分布式的架构演进之路
数据库·redis·分布式·缓存·中间件·架构·后端开发
清平乐的技术专栏1 小时前
【Kafka笔记】(三)常用命令整理
笔记·分布式·kafka
旺仔Sec1 小时前
Spark 从入门到部署:核心模块解析与 Yarn 模式实战指南
大数据·分布式·spark
夜白宋1 小时前
【项目深入】三、分布式锁
分布式
一天 24h1 小时前
从单体到分布式:JWT 如何彻底改变 Web 认证系统
前端·分布式
LCG元1 小时前
【Go后端开发】从 0 到生产级:高性能分布式网关全实现 + 接口限流熔断降级实战
分布式·golang·wpf
旺仔Sec2 小时前
HBase 分布式集群部署实战:从解压到启动的完整指南
数据库·分布式·hbase
晚霞的不甘19 小时前
CANN-MoE模型推理加速实战
人工智能·分布式·python
武子康1 天前
Java-221 RocketMQ 消息存储核心原理:CommitLog、ConsumerQueue、IndexFile 与消息过滤机制
java·大数据·分布式·消息队列·rabbitmq·rocketmq·java-rocketmq