大数据处理之ClickHouse概述及架构参考(未完)

news2025/4/13 16:27:16

一、概述

中移某业务拨测系统基于业务数据拨测指标及日志的分析需要,随着Clickhouse在OLAP领域的快速崛起,以及一些特性考虑,比如:

数据量会很大,最好需要分布式;
支持实时写入,支持快速计算,在较短时间内能完成计算;
强大的sql能力,实时指标sql化;
人力有限,运维需要简单;
高效的压缩比存储,服务器有限,可以用更少的服务器存储更多的数据;

我们也考虑在环境中引入ClickHouse组件,协助flink加强日志数据分析;

在这里插入图片描述
ClickHouse是由俄罗斯IT公司Yandex为Yandex.Metrica开发的一个列式数据库管理系统,可实现联机分析处理(OLAP);ClickHouse允许使用实时更新的SQL查询生成数据分析报告。该系统以高性能著称。官方称,ClickHouse的性能超过了同类其他列式数据库,单主机每秒可理数十亿行和几十千兆字节的数据。ClickHouse是CPU的,因为它的矢量化查询执行涉及相关的处理器指令和运行时代码生成。它充分利用所有可用的硬件,以最快的速度处理每个查询。单个查询的峰值处理性能超过每秒2 TB。该项目于2016年6月在Apache2许可下作为开源软件发布。它可作为开源SQL数据仓库。它包括以下功能:

处理具有数万亿行和数千列的表的列存储。
由于内置了复制功能,因此具有容错能力和读取扩展能力。可在数百个节点集群上运行,很容易地安装在单个服务器或虚拟机上。
通过物化视图进行出色的聚合。
解决实际问题的功能,如漏斗分析和最后一点查询。

官方网站:https://clickhouse.com/
GitHub:https://github.com/ClickHouse/ClickHouse,版本说明;
安装文档:https://clickhouse.com/docs/en/development/architecture
文档参考:https://clickhouse.com/blog

二、架构说明

在这里插入图片描述
在这里插入图片描述
我们依据数据的流向将Clickhouse的应用架构划分为4个层级。
在这里插入图片描述

2)优势

  • 查询速度快,可高效的使用CPU,利用多核并行处理单个查询数据,不仅仅按列存储,同时还按向量进行处理;
  • 数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行;
  • 索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快;
  • 写入速度非常快,50-200M/s,对于大量的数据更新非常适用。
  • 内置数较多(例如IP转化,URL分析等,预估计算/HyperLoglog等);

3)劣势

  • 不支持事务,不支持真正的删除/更新,不支持UPDATE/DELETE操作
  • 不支持高并发,官方建议qps为100,可以通过修改配置文件增加连接数,但是在服务器足够好的情况下;
  • SQL满足日常使用80%以上的语法,join写法比较特殊;最新版已支持类似SQL的join,但性能不好;
  • 尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能,这个在做实时数据写入的时候要尽量避开;
  • Clickhouse快是因为采用了并行处理机制,即使一个查询,也会用服务器一半的CPU去执行,所以ClickHouse不能支持高并发的使用场景,默认单查询使用CPU核数为服务器核数的一半,安装时会自动识别服务器核数,可以通过配置文件修改该参数。
  • 聚合结果必须小于一台机器的内存大小,否则失败

4)性能数据参考

  • 单个查询吞吐量:如果数据被放置在page cache中,则一个不太复杂的查询在单个服务器上大约能够以2-10GB/s(未压缩)的速度进行处理(对于简单的查询,速度可以达到30GB/s)。如果数据没有在page cache中的话,那么速度将取决于你的磁盘系统和数据的压缩率。例如,如果一个磁盘允许以400MB/s的速度读取数据,并且数据压缩率是3,则数据的处理速度为1.2GB/s。这意味着,如果你是在提取一个10字节的列,那么它的处理速度大约是1-2亿行每秒。对于分布式处理,处理速度几乎是线性扩展的,但这受限于聚合或排序的结果不是那么大的情况下。
  • 处理短查询的延时时间:数据被page cache缓存的情况下,它的延迟应该小于50毫秒(最佳情况下应该小于10毫秒)。 否则,延迟取决于数据的查找次数。延迟可以通过以下公式计算得知: 查找时间(10 ms) * 查询的列的数量 * 查询的数据块的数量。
  • 处理大量短查询:ClickHouse可以在单个服务器上每秒处理数百个查询(在最佳的情况下最多可以处理数千个)。但是由于这不适用于分析型场景。建议每秒最多查询100次。
  • 数据写入性能:建议每次写入不少于1000行的批量写入,或每秒不超过一个写入请求。当使用tab-separated格式将一份数据写入到MergeTree表中时,写入速度大约为50到200MB/s。如果您写入的数据每行为1Kb,那么写入的速度为50,000到200,000行每秒。如果您的行更小,那么写入速度将更高。为了提高写入性能,您可以使用多个INSERT进行并行写入,这将带来线性的性能提升。
  • 其他参考:
    count: 千万级别,500毫秒,1亿 800毫秒 2亿 900毫秒 3亿 1.1秒
    group: 百万级别 200毫米,千万 1秒,1亿 10秒,2亿 20秒,3亿 30秒
    join:千万-10万 600 毫秒, 千万 -百万:10秒,千万-千万 150秒

在这里插入图片描述

2.2、其他应用参考

1)快手应用实践案例
在这里插入图片描述
上图中:通过一个路由进行分流到CH多集群处理,Ps还做一些类似“切面”“网关”做的工作。数据则是通过 mapreduce(无论是 hive、sparksql 还是其他) 和 flink 进入clickhouse。Clickhouse在单表的情况下性能比多表join好很多,快手给出一些实践经验,更多参见:文章1;另外,如果是普通企业,上图结构就满足了,但快手由于业务量大,提出了Clickhouse on Hdfs 的方案,即存储和计算分离,存储使用hadoop hdfs。自己基于接口重写了 HdfsMergeTree实现。
在这里插入图片描述
2)案例2:

在这里插入图片描述
3)案例3:
在这里插入图片描述
4)案例4:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)案例5:

在这里插入图片描述

三、部署配置

在这里插入图片描述

四、使用

五、FAQ

六、附录:

6.1、优化参考

  • 关闭虚拟内存,物理内存和虚拟内存的数据交换,会导致查询变慢。
  • 为每一个账户添加join_use_nulls配置,左表中的一条记录在右表中不存在,右表的相应字段会返回该字段相应数据类型的默认值,而不是标准SQL中的Null值。
  • JOIN操作时一定要把数据量小的表放在右边,ClickHouse中无论是Left Join 、Right Join还是Inner Join永远都是拿着右表中的每一条记录到左表中查找该记录是否存在,所以右表必须是小表。
  • 批量写入数据时,必须控制每个批次的数据中涉及到的分区的数量,在写入之前最好对需要导入的数据进行排序。无序的数据或者涉及的分区太多,会导致ClickHouse无法及时对新导入的数据进行合并,从而影响查询性能。
  • 尽量减少JOIN时的左右表的数据量,必要时可以提前对某张表进行聚合操作,减少数据条数。有些时候,先GROUP BY再JOIN比先JOIN再GROUP BY查询时间更短。
    ClickHouse的分布式表性能性价比不如物理表高,建表分区字段值不宜过多,防止数据导入过程磁盘可能会被打满。
  • CPU一般在50%左右会出现查询波动,达到70%会出现大范围的查询超时,CPU是最关键的指标,要非常关注。

6.2、MySQL VS ClickHouse

MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快;
ClickHouse不支持事务,不存在隔离级别。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。
IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。

6.3、Doris VS ClickHouse

Doris支持Array,ch支持Array/嵌套类型/枚举类型等。

Doris支持事务和幂等性导入数据,ch不支持。

Doris的join性能比较好,ch的单表查询性能好。

Doris更优的方面1. 使用更简单,如建表更简单,SQL标准支持更好, Join性能更好,导数功能更强大2. 运维更简单,如灵活的扩缩容能力,故障节点自动恢复,社区提供的支持更好3. 分布式更强,支持事务和幂等性导入数据,物化视图自动聚合,查询自动路由,全面元数据管理

ClickHouse更优的方面1. 性能更佳,导入性能和单表查询性能更好,同时可靠性更好2. 功能丰富,非常多的表引擎,更多类型和函数支持,更好的聚合函数以及庞大的优化参数选项3. 集群管理工具更多,更好多租户和配额管理,灵活的集群管理,方便的集群间迁移工具;

那么两者之间如何选择呢?1. 业务场景复杂数据规模巨大,希望投入研发力量做定制开发,选ClickHouse2. 希望一站式的分析解决方案,少量投入研发资源,选择Doris;

参看:https://zhuanlan.zhihu.com/p/421469439

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库管理-第四十九期 Exadata的存储节点管理(20221223)

数据库管理 2022-12-23第四十九期 Exadata的存储节点管理1 咋个查看数据是否被缓存到闪存卡了没2 EM13.5的Exadata监控3 存储降级总结第四十九期 Exadata的存储节点管理 本周二,抗原终于阴性了,星期三开始就回到现场开始办公。上周既然说了Exadata关于存…

[C++: 引用】

To shine,not be illuminated. 目录 1 引用概念 2 引用特性 3 常引用 4 使用场景 4.1 引用做参数 4.2 做返回值 5 传值、传引用效率比较 6 引用和指针的区别 7 总结 1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为…

Java+Swing+mysql会员卡管理系统

JavaSwingmysql会员卡管理系统一、系统介绍二、功能展示1.主页页面2.会员信息查询3.会员信息删除三、系统实现1.members.java四、其它1.其他系统实现一、系统介绍 使用 Java 技术开发一个会员卡管理系统,具体实现功能如下: 1. 程序启动显示主界面&#…

Vue:从组件开始学习

文章目录Vue组件生命周期根据官网文档,我们可以快速使用vue3创建自己的应用代码:npm init vuelatest,然后根据自己的需要来选择对应的配置: 默认使用vite来配置项目的。 在main.ts入口文件中,我们可以看到&#xff0…

非零基础自学Golang 第17章 HTTP编程(上) 17.5 知识拓展

非零基础自学Golang 文章目录非零基础自学Golang第17章 HTTP编程(上)17.5 知识拓展17.5.1 curl工具详解第17章 HTTP编程(上) 17.5 知识拓展 17.5.1 curl工具详解 【1】curl 简介 curl是一个利用URL语法在命令行下工作的文件传输工具,于1997年首次发行。它支持文…

Java+MySQL基于ssm的互助救援车队管理系统

此项目能够更全面的为社会贡献爱心,更及时的帮助求助人,然后在后台完成整个过程最后在通过广播好人好事,在高考爱心送子、养老院奉献爱心等活动更能做到统一化,更有序让注册的私家车主有的放矢,供献爱心。现在社会的信…

MyBatis-Plus(实用篇)

文章目录一、基础组件&#xff08;接口和实现类&#xff09;1、BaseMapper\<T>2、IService\<T>3、链式查询与修改4、调用Service层操作数据二、常用注解1、TableName2、TableId3、TbaleField4、TableLogic三、条件构造器1、wapper介绍2、构造器常用方法3、组装条件…

编程艺术之变成原则

编程有一个原则&#xff0c;就是尽可能去避免重复的代码。 类的开闭原则&#xff0c;类做好后&#xff0c;就尽量不要再在类上面在修改代码&#xff0c; 耦合度&#xff1a;简单的一个例子&#xff0c;活字印刷术在之前是整版印刷&#xff0c;导致&#xff0c;如果有一个字要…

作一回白嫖怪:写一个脚本自动获取ST官网积分,用积分领取奖品

环境&#xff1a;Python、selenium、ubuntu22.04 网址&#xff1a;STMCU中文官网 chrome: 版本 108.0.5359.124&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; chromeDriver: CNPM Binaries Mirror 这两个文件我打包起来了&#xff0c;0积分方便大家…

【表格合并与底纹】vue-elementul表格简单实现合并单元格,与列和行给底纹颜色

前言 这是一个很常见的需求啊&#xff0c;因为很多公司都会涉及到写表格展示数据 那么在某些公司内就会出现为了让数据更直观的感受到 而让你给某些行和列用颜色标出来。使得看起来更方便 那么这里就汇总一下常用的横竖合并以及横竖颜色底纹如何实现 效果图 这是写的一个dem…

小米便签维护过程记录——可能出现问题解决方案

在对小米便签开源代码进行研究和维护及新功能开发的同时&#xff0c;会遇到很多问题&#xff0c;将以本文进行记录总结。 导入项目 若不导入直接Open会导致默认为Project&#xff0c;不为Android。 小米标签菜单栏不显示的问题 先来看NotesListActivity类&#xff0c;这个类创…

Zookeeper 4 Zookeeper JavaAPI 操作 4.5 Curator API 常用操作【修改节点】

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.5 Curator API 常用操作4.5.1 修改节点4 Zookeeper JavaAPI 操作 4.5 Curator API 常用操作 4.5.1 修改节点 直接开干 修改之前app1 的数据是本机…

PS1文件执行

PS1文件执行目录概述需求&#xff1a;设计思路实现思路分析1.power shell 管理2.shell 管理执行参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for ch…

软件需求说明书(GB856T——88)基于协同的在线表格forture-sheet

软件需求说明书的编写提示 1引言 1.1产品目的 制造一个功能丰富&#xff0c;配置简单的在线表格组件&#xff0c;开箱即用&#xff0c;产品对位所有办公用户&#xff0c;可以大量用户同时在线进行协同合作办公&#xff0c;可以大大的提高工作效率。 1.2产品范畴 产品为软件…

Javaweb会话跟踪技术(Cookie和Session)

目录 一、会话跟踪技术概述 二、Cookie 1.Cookie基本原理 2.Cookie基本使用 3.Cookie存活时间 4.cookie存储中文 三、Session 1.Session钝化、活化 2.Session基本使用 3.sesion销毁 四Cookie和Sesion区别 一、会话跟踪技术概述 1.会话&#xff1a;用户打开浏览器&…

Java和vue开发的橱柜定制系统家具定制系统

简介 橱柜定制家具定制系统。用户查看家具样本&#xff0c;进行预约下单&#xff0c;后台人员根据用户的要求给出效果图和方案&#xff0c;以及报价&#xff0c;填写上门时间。管理员上门测量和用户确定好需求后上传协议&#xff0c;此时订单变成待开工订单&#xff0c;后台人…

过半985、单岗位2K+简历!速腾聚创如何开展校园招聘?

在半导体、芯片等新兴科技产业&#xff0c;人才短缺和人才培养已经成为全球性问题。 速腾聚创是国内激光雷达领域的龙头企业&#xff0c;在庞大人才实力的助推下&#xff0c;构建起激光雷达硬件、感知软件和芯片三大核心技术闭环&#xff0c;通过领先的技术实力和过硬的产品质量…

VB实现火焰的效果

Option Explicit 锁定指定窗口&#xff0c;禁止它更新。同一时刻间只能有一个窗口处于锁定状态&#xff0c;可用在界面作大弧度布局改变时。 Private Declare Function LockWindowUpdate Lib “user32” (ByVal hwndLock As Long) As Long 在指定的设备场景中设置一个像素的RGB…

机器学习多分类二分类回归问题数据集分享

数据集&#xff1a; https://download.csdn.net/download/qq_38735017/87336921

DocuWare 文档管理软件在医疗保健行业的应用

DocuWare 文档管理软件在医疗保健行业的应用 尽管技术在其他领域取得了很大进步&#xff0c;但许多医院、门诊机构和医疗保健提供商仍然使用过时的系统来管理计费、财务和人力资源等文档密集型流程。借助快速、安全、灵活的 DocuWare 文档管理软件&#xff0c;可以节省您的时间…