源码分析 | ClickHouse和他的朋友们(14)存储计算分离方案与实现

云上 ClickHouse 架构实践:弹性经济下的存算分离与性能优化 云上 ClickHouse 通过云原生技术的赋能,实现了存算分离和弹性扩展,有效解决了传统架构下的扩容难题,同时借助云资源的优势,提高了性能和成本效益。在数据接入和处理方面,通过一系列优化方案,使得 ClickHouse 能够更好地适应实时数据分析的需求。随着云计算和大数据技术的不断发展,云上 ClickHouse 有望在更多领域得到应用。未来,可以进一步探索与 AI 技术的结合,提升数据分析的智能化水平;同时,加强在多云环境下的兼容性和管理能力,为企业提供更灵活的部署选择。 阅读详情

本文首发于 2020-09-21 22:01:12

《ClickHouse和他的朋友们》系列文章转载自圈内好友 BohuTANG 的博客,原文链接:
https://bohutang.me/2020/09/18/clickhouse-and-friends-compute-storage/
以下为正文。

如果多个 ClickHouse server 可以挂载同一份数据(分布式存储等),并且每个 server 都可写,这样会有什么好处呢?

首先,我们可以把副本机制交给分布式存储来保障,上层架构变得简单朴素;

其次,clickhouse-server 可以在任意机器上增加、减少,使存储和计算能力得到充分发挥。

本文就来探讨一下 ClickHouse 的存储计算分离方案,实现上并不复杂。

1. 问题

ClickHouse 运行时数据由两部分组成:内存元数据和磁盘数据。

我们先看写流程:

w1. 开始写入数据
w2. 生成内存part信息,并维护part metadata列表
w3. 把part数据写到磁盘

再来看读流程:

r1. 从part metadata定位需要读取的part
r2. 从磁盘读取part数据
r3. 返回给上层数据

这样,如果 server1 写了一条数据,只会更新自己内存的 part metadata,其他 server 是感知不到的,这样也就无法查询到刚写入的数据。

存储计算分离,首先要解决的就是内存状态数据的同步问题。

在 ClickHouse 里,我们需要解决的是内存中 part metadata 同步问题。

2. 内存数据同步

在上篇 <ReplicatedMergeTree表引擎及同步机制> 中,我们知道副本间的数据同步机制:
首先同步元数据,再通过元数据获取相应part数据。

这里,我们借用 ReplicatedMergeTree 同步通道,然后再做减法,同步完元数据后跳过 part 数据的同步,因为磁盘数据只需一个 server 做更新(需要 fsync 语义)即可。

核心代码:
MergeTreeData::renameTempPartAndReplace

if (!share_storage)
    part->renameTo(part_name, true);

3. 演示demo

demo视频

script:

  1. 首先起 2 个 clickhouse-server,它们都挂载同一份数据 <path>/home/bohu/work/cluster/d1/datas/</path>
  2. 通过 clickhouse-server1(port 9101) 写入一条记录:(111, 3333)
  3. 通过 clickhouse-server2(port 9102) 进行查询正常
  4. 通过 clickhouse-server2(port 9102) truncate 表
  5. 通过 clickhouse-server1(port 9101) 查询正常

4. 代码实现

原型

需要注意的是,这里只实现了写入数据同步,而且是非常 tricky 的方式。

由于 DDL 没有实现,所以在 zookeeper 上的注册方式也比较 tricky,demo 里的 replicas 都是手工注册的。

5. 总结

本文提供一个思路,算是抛砖引玉,同时也期待更加系统的工程实现。

ClickHouse 暂时还不支持 Distributed Query 功能,如果这个能力支持,ClickHouse 存储计算分离就是一个威力无比的小氢弹。


欢迎关注我的微信公众号【数据库内核】:分享主流开源数据库和存储引擎相关技术。

标题网址
GitHubhttps://dbkernel.github.io
知乎https://www.zhihu.com/people/…
思否(SegmentFault)https://segmentfault.com/u/db…
掘金https://juejin.im/user/5e9d3e…
开源中国(oschina)https://my.oschina.net/dbkernel
博客园(cnblogs)https://www.cnblogs.com/dbkernel
Shopee ClickHouse 冷热数据分离存储架构与实践 本文首发于微信公众号“Shopee技术团队”。 摘要 Shopee ClickHouse 是一款基于开源数据库 ClickHouse 做二次开发、架构演进的高可用分布式分析型数据库。本文将主要介绍 Shopee ClickHouse 的冷热分离存储架构和支持公司业务的实践。 Shopee ClickHouse 的冷热分离存储架构使用 JuiceFS 客户端 mount 远端对象存储到本地机器路径,通过编写 ClickHouse 的存储策略,如同使用多卷存储一样使用远端对象存储。因为我们用同一个 Cl. 阅读详情

相关推荐

万字详解:ClickHouse 存算分离架构与数据一致性事务机制实现

成本效益存储成本降低60%,计算资源利用率提升40%弹性扩展支持秒级扩容千核计算资源数据强一致金融级事务支持能力云原生融合无缝集成现代云基础设施未来随着软硬协同优化技术的发展,ClickHouse有望在实时分析、HTAP等领域开创新的技术范式。多云/混合云部署环境需要弹性伸缩的SaaS应用强一致性要求的财务分析系统PB级历史数据交互式查询本文介绍的是如何实现ClickHouse的存算分离架构和数据一致性的事务机制,需要万字详解。首先,我得先理解存算分离是什么。

AI天才研究院 691

ClickHouse 实现存算分离:与 Amazon S3 结合使用的三种方式

ClickHouse 实现存算分离:与 Amazon S3 结合使用的三种方式 - 掘金

weixin_35843253的博客 574

万字详解:OLAP 计算引擎存算分离架构实现原理与应用(以 Clickhouse 为例)

存算分离架构通过解耦存储与计算,为ClickHouse等OLAP引擎提供了成本、弹性与性能的平衡方案。实际落地中需结合业务特点设计分层策略、优化数据生命周期管理,并利用缓存与分布式查询技术弥补网络延迟短板。未来随着云原生技术的成熟,存算分离将成为大规模数据分析的标配架构。存算分离架构是一种将数据存储和计算资源解耦的系统设计思想。在这种架构中,数据存储和计算处理由不同的物理或逻辑资源独立承担,通过网络进行交互。

AI天才研究院 808

ClickHouse源码简析

ClickHouse源码简析

driftingman的专栏 1787

瑞萨RH850/U2A8以太网模块mcal说明

如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。

至道无难,唯嫌拣择。 1864

86 arduino 电机yl_(八)arduino入门:直流电机控制

一、本节介绍在本实验中,您将学习如何使用驱动芯片L293D和SunFounder Uno板控制小型直流(DC)电机的方向和速度。为了使初学者更容易,我们将让直流电机左右旋转,自动加速和减速。二、材料准备1 *小型直流电机1 * L293D1 * Arduino Uno板1 *面包板1 * USB数据线杜邦线三、原理讲解L293D这是一个非常实用的芯片,可以独立控制两台直流电机。在这个实验中,只有一...

weixin_29163857的博客 3571

Shopee x JuiceFS:ClickHouse 冷热数据分离存储架构与实践

本文来自 shoppee 技术团队公众号 摘要 Shopee ClickHouse 是一款基于开源数据库 ClickHouse 做二次开发、架构演进的高可用分布式分析型数据库。本文将主要介绍 Shopee ClickHouse 的冷热分离存储架构和支持公司业务的实践。 Shopee ClickHouse 的冷热分离存储架构使用 JuiceFS 客户端 mount 远端对象存储到本地机器路径,通过编写 ClickHouse 的存储策略,如同使用多卷存储一样使用远端对象存储。因为我们用同一个 ClickHo.

JuiceFS的博客 894

永久关闭Windows更新的5种方法

很多家用电脑,如果系统自动更新的话,会变得越来越卡顿,且硬件型号兼容也并不完美。那么我们该如何彻底关闭Win11的自动更新呢?以下准备了5种方法,您可以根据自身实际情况选择合适的方法!

qq_43652793的博客 1万+

Clickhouse源码分析

继承IFunctionpublic::定义返回类型:实现函数逻辑继承IStoragepublic:read:定义数据读取逻辑write:定义数据写入逻辑(可选)alter:支持表结构修改});继承IDataTypepublic::序列化逻辑:反序列化逻辑:创建对应列类型});

Made In SQL 1286

深入解析SAP MM模块OBYC自动科目分配机制:从T030表到实战配置

本文深入解析SAP MM模块中OBYC自动科目分配机制,阐明其作为连接物流与财务核心桥梁的作用。文章以T030表为核心,详细拆解其字段结构与检索逻辑,并通过采购收货、生产发料等实战场景,手把手演示配置步骤与关键要点,帮助读者掌握从原理到实践的完整知识体系,实现业财无缝对接。

nft7creator的博客 358

05、基于ALV表报实现复选框、全选、取消全选等功能

基于Function ALV实现复选框、全选及取消全选等功能

wo520yl1314的博客 2372

源码分析 | ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制

本文首发于 2020-09-15 20:15:14在 MySQL 里,为了保证高可用以及数据安全性会采取主从模式,数据通过 binlog 来进行同步。在 ClickHouse 里,我们可以使用 ReplicatedMergeTree 引擎,数据同步通过 zookeeper 完成。本文先从搭建一个多 replica 集群开始,然后一窥底层的机制,简单吃两口。搭建一个 2 replica 测试集群,由于条件有限,这里在同一台物理机上起 clickhouse-server(2个 replica) + zookee

dbkernel 的博客 603

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验

摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。

AlphaNil的博客 1088

如何利用ClickHouse实现高性能地理空间数据实时分析

在大数据时代,地理位置数据处理正面临着前所未有的挑战。传统数据库在处理百万级空间数据时往往出现性能瓶颈,查询响应时间从数秒到数分钟不等,难以满足实时业务需求。而ClickHouse作为专为OLAP场景优化的列式数据库,通过原生地理空间函数与高效存储引擎,为空间数据分析提供了全新的解决方案。 ## 传统空间数据分析的痛点 **性能瓶颈**:PostGIS等传统空间数据库在处理海量数据时,复杂的空

gitblog_00372的博客 820

(论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)

论文及源码见个人主页:https://download.youkuaiyun.com/download/qq_45874683/84118637?spm=1001.2014.3001.5503 (论文加源码)基于CNN和LSTM的脑电情绪识别(数据集为DEAP和seed)4D-CRNN 目录 目录: 运行过程: 1. 运行1D文件(没有什么bug): 2. 再运行3D文件(没有出现bug): 3. 最后运行main文件(出现了两个bug)(前提需要配置好tensorflow的框架): 第一个bug是..

qq_45874683的博客 6366

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ClickHouse版本管理深度解析:架构演进与生产环境实战指南

ClickHouse版本管理是企业级实时分析数据库运维的核心技能,直接关系到生产环境的稳定性、数据安全性和系统性能。随着ClickHouse版本的快速迭代,如何制定科学的升级策略、规避兼容性风险、确保数据一致性,成为数据库管理员面临的关键挑战。ClickHouse版本升级不仅仅是软件包的替换,更是一次系统架构的优化过程,需要从底层存储引擎到上层查询优化的全方位考量。 ## 🔍 ClickHou

gitblog_00253的博客 613

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

诺禾-ClickHouse

ClickHouse源码笔记1:聚合函数的完成 由于工作的需求,后续笔者工作需求和开源的OLAP数据库ClickHouse打交道。ClickHouse是Yandex在2016年6月15日开源了一个剖析型数据库,以强悍的单机处置才能被称道。 笔者在实践测试ClickHouse和阅读ClickHouse的源码过程之中,对"战役民族"开发的数据库非常观赏。ClickHouse不只是一个很好的数据库学习资料,而且同时应用了大量的CPP17的新特性停止开发,也是一个大型的Modern CPP的教诲材料。 笔者接下来会

yyone123的博客 491

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

干货来袭!熬夜一周整理的ClickHouse源码笔记,我就不信看完你还不会?

前言 在文章的开始作者为大家整理了很多资料!包括java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书等等! 在此声明分享资料只为帮助到更多人,大家点击这里直接下载就好,下载码:csdn 笔者在源码笔记1之中分析过ClickHouse的聚合函数的实现,但是对于各个接口函数的实际如何共同工作的源码,回头看并没有那么明晰,主要原因是没有结合Aggregator的类来一起分析聚合函数的是如果工作

weixin_53170684的博客 586

干货!京东架构师整理的ClickHouse源码笔记,聚合函数的源码再梳理!

前言 在文章的开始作者为大家整理了很多资料!包括java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书等等! 在此声明分享资料只为帮助到更多人,大家点击这里直接下载就好,下载码:csdn 笔者在源码笔记1之中分析过ClickHouse的聚合函数的实现,但是对于各个接口函数的实际如何共同工作的源码,回头看并没有那么明晰,主要原因是没有结合Aggregator的类来一起分析聚合函数的是如果工作

欢迎您访问我的公众号【前程有光】 1472

ClickHouse核心设计

ClickHouse核心设计列式存储数据压缩向量化执行引擎关系模型表引擎多线程和分布式多主架构在线查询数据分片和查询 列式存储 数据压缩 向量化执行引擎 关系模型 表引擎 多线程和分布式 多主架构 在线查询 数据分片和查询 ...

dhylanyu1的博客 231

设置默认tts引擎_【ClickHouse内核】MergeTree表引擎语法结构

“摘要: 本文主要讲述ClickHouse开源数据库MergeTree表引擎语法结构相关知识点。主要内容如下:概述MergeTree表引擎ReplacingMergeTree表引擎SummingMergeTree表引擎AggregatingMergeTree表引擎GraphiteMergeTree表引擎CollapsingMergeTree表引擎VersionedCollapsingM...

weixin_33531560的博客 329

【ClickHouse源码】物化视图的写入过程

本文对 ClickHouse 物化视图的写入流程源码做个详细说明,基于 v22.8.14.53-lts 版本。

一只努力的微服务 771

2023-01-28 clickhouse-聚合函数的源码再梳理

笔者在源码笔记1之中分析过的聚合函数的实现,但是对于各个接口函数的实际如何共同工作的源码,回头看并没有那么明晰,所以决定重新再完成一篇聚合函数的源码梳理的文章,帮助大家进一步的理解ClickHouse之中聚合函数的工作原理。本系列文章的源码分析基于ClickHouse v19.16.2.2的版本。

悟世之路 1257

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第七

来源:华章计算机(hzbook_jsj)转载请标明出处DB-Engines最近发布了2020年9月份的数据库排名。该网站根据数据库管理系统的受欢迎程度对其进行排名,实时统计了358种数据...

华章IT官方博客 3392

DB-Engines 9月数据库排名:ClickHouse一路猛冲,Redis坐稳第7

导读:DB-Engines最近发布了2020年9月份的数据库排名。该网站根据数据库管理系统的受欢迎程度对其进行排名,实时统计了358种数据库的排名指数。来源:华章计算机(hzbook_j...

大数据 875
上一篇: 源码分析 | ClickHouse和他的朋友们(13)ReplicatedMergeTree表引擎及同步机制
下一篇: 源码分析 | ClickHouse和他的朋友们(15)Group By 为什么这么快
dbkernel
博客等级 码龄4年 60粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值