极客星球|数据分析引擎黑马ClickHouse技术研究与实践

news2025/2/28 3:36:58

ClickHouse 在近几年是大数据分析引擎界的一匹黑马,从默默无闻到一路起飞,在 DB engine Rank 上进入前50名,成为全球数据引擎界耀眼的一颗明星。在全球范围内,ClickHouse 单表查询比其他引擎要快数倍以上,在过去的几年以来未曾有对手。ClickHouse 为什么会这么快?在实际使用当中如何应用这样一个引擎?本文根据MobTech袤博科技Java开发专家墨子的演讲分享整理而成,为大家详尽介绍最新的 ClickHouse Feature 和实战应用。

一、初探OLAP和ClickHouse

在数据科学领域,数据库系统可以分为联机事务处理(OLTP)和联机分析处理(OLAP)两种面向不同领域的数据库,OLAP数据库也被称为数据仓库。在探究ClickHouse之前,我们先了解OLAP和OLTP有何不同。OLAP是数据仓库系统的主要应用,其支持的对象主要是面向分析场景的应用,提供结构化的、主题化的数据给运营,实现业务反馈和辅助决策。同时,在有些场景中,也可以由数据仓库对业务进行支持。OLTP存储的主要是与业务直接相关的数据,强调准确、低时延、高并发,如果没有特别强调,基本上数据库里只会存储与业务相关的数据。

从产品上看,有专门面向OLTP的数据库,例如MySQL、PostgreSQL、Oracle等,也有专门面向OLAP的数据库,例如Presto、Druid、Apache Kylin、Apache Doris、ClickHouse等,本期侧重介绍不同的OLAP系统在应用场景中的表现。

OLAP场景中,已添加到数据库的数据不能修改,绝大多数是读请求。对于读取,从数据库中提取相当多的行,但只提取列的一小部分。数据以相当大的批次(> 1000行)更新,而不是单行更新,或者根本没有更新。宽表,即每个表包含着大量的列,查询相对较少(通常每台服务器每秒查询数百次或更少),对于简单查询,允许延迟大约50毫秒。通常,列中的数据相对较小,一般是数字和短字符串(例如,每个URL 60个字节),处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)。事务不是必须的,对数据一致性要求低。每个查询有一个大表,除了它以外,其他的都很小。查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中。

以下是现行的几款OLAP系统对比:

  • Presto

是在Hadoop 上运行的分布式系统,使用与经典大规模并行处理(MPP) 数据库管理系统相似的架构。 它有一个协调器节点,与多个工作线程节点同步工作。 用户将其SQL 查询提交给协调器,由其使用自定义查询和执行引擎进行解析、计划并将分布式查询计划安排到工作线程节点之间。

评估:Presto优点是基于hadoop生态,存储和计算分离,基于Java开发。缺点是依赖大内存,查询速度比较慢。

  • Druid

Druid专为需要快速数据查询与摄入的工作流程而设计,在即时数据可见性、即席查询、运营分析以及高并发等方面表现非常出色。 在实际中众多场景下数据仓库解决方案中,可以考虑将Druid当做一种开源的替代解决方案。

评估:Druid的数据维度预聚合,没有明细数据。

  • Apache Kylin

Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay 开发并贡献至开源社区。 它能在亚秒内查询巨大的表。 Apache Kylin™ 令使用者仅需三步,即可实现超大数据集上的亚秒级查询。

评估:Kylin优点是查询速度特别快,缺点是基于数据预计算,数据膨胀比较大,无明细数据。

  • Apache Doris

Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等,令您的数据分析工作更加简单高效。

  • ClickHouse

ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询(OLAP) ,能够使用 SQL 查询实时生成分析数据报告。ClickHouse可以做用户行为分析,流批一体,线性扩展和可靠性保障能够原生支持 shard + replication,ClickHouse没有走hadoop生态,采用 Local attached storage 作为存储。

评估:Clickhouse优点是采用列式存储,支持SQL,丰富的表引擎,有索引优化策略,基于cpu向量执行引擎查询速度特别快。缺点是计算和存储在一起,无法大规模搭建集群。

二、ClickHouse现状和核心能力

ClickHouse完美的实现了OLAP和列式数据库的优势,因此在大数据量的分析处理应用中ClickHouse表现很优秀。ClickHouse版本迭代迅速,几乎每个月都有新版本发布,支持表引擎非常多,可达40多种。单机查询性能非常强悍,使用普通机械硬盘,每秒可扫描1亿行记录,数据压缩率比较高。

ClickHouse中最强大的表引擎是MergeTree系列。MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。

MergeTree系列主要特点:

存储的数据按主键排序;

支持数据分区;

支持数据副本;

支持数据采样;

支持轻量级更新和删除操作;

支持表和列TTL。

  • 支持数据修改和删除的MergeTree引擎

VersionedCollapsingMergeTree  

CollapsingMergeTree

ReplacingMergeTree

  • 支持数据聚合的MergeTree引擎

AggregatingMergeTree

SummingMergeTree

  • 分布式表

在ClickHouse中,分布式表是由多个分片组成的逻辑表,分片可以存储在不同的物理节点上。每个分片都包含表的一部分数据,并且可以独立读取和写入数据。这种分片存储的方式有助于实现高扩展性和高可用性,因为当需要增加存储容量或提高性能时,可以通过添加更多的节点来实现。

要创建一个分布式表,首先需要定义该表的模式(即列的名称和类型),然后指定每个分片的位置和复制策略。对于每个分片,可以指定其副本数目和副本放置的位置。

当向分布式表中插入数据时,ClickHouse会根据每个分片配置的比重,把数据插入对应的分片种。查询也可以跨多个分片执行,以便并行化处理大量数据。

总的来说,ClickHouse的分布式表使得数据处理变得非常高效和可扩展,能够应对大规模的数据集合和高并发访问的需求。

  • 集成表:Kafka集成

通过kafka集成方式可以实现数据实时入库。Kafka集成表不存储数据,是一个数据管道。

步骤:

1,创建Kafka集成表。

2,创建业务表。

3,创建物化视图将两张表关联起来。

  • 集成表:Hive集成

通过与Hive集成,可以通过Clickhouse对hive数据进行读写。其本质是通过hive获取Hadoop文件地址进行读写。在该集成模式,Clickhouse扮演计算引擎角色,hive扮演数据存储角色。主要用于离线数据查询。

  • 数据副本的两种方式:ReplicatedMergeTree和Shard配置

ReplicatedMergeTree基于表级别的数据复制,利用zookeeper实现副本间发现和通讯。但是zookeeper不涉及数据查询和传输。所有的MergeTree表前加Replicated即可实现副本功能,每个副本表都有全量数据。

Shard每个ClickHouse节点都是一个分片,可以进行横向扩展。可以配置每个Shard多个副本,基于数据库实例级别的副本。

三、ClickHouse索引介绍

  • 索引

ClickHouse支持主键索引,它将每列数据按照Index granularity进行划分,每个index granularity的开头第一行被称为一个mark行,主键索引存储该mark行对应的primary key值。对于where条件中含有primary key查询,通过对主键索引进行二分查找,能够指定定位到对应的index granularity,避免了全表扫描。 

ClickHouse主键索引,并不对数据去重 。数据是按照Order by字段的顺序存储,primary key字段需要是order by字段的一部分。

  • 稀疏索引

ClickHouse支持对任意列创建任意数量的稀疏索引。之所以叫稀疏索引,是因为它本质上行是对一个完整index   granularity的统计信息,并不会记录具体每一行在文件中的位置。目前支持的稀疏索引类型:

1. minmax。以index granularity为单位,存储指定表达式计算后的min、max值。在等值和范围查询中能够快速跳过不满足要求的块,减少io。  

2.  set(max_rows)。以index granularity为单位,存储指定表达式的distinct value集合,用于快速判断等值查询是否命中该块。  

3. ngrambf_v1。索引对于equals,like和in查询有很大优化。

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

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

相关文章

Vue+Echart实现利用率表盘效果【组件已封装,可直接使用】

效果演示 当利用超过70%(可以自行设置),表盘变红 组件 里面对应两个图片资源,panelBackground_red.png 和 panelBackground_green.png,请前往百度网盘进行下载。如果喜欢其他颜色,可以使用.psd来修改导出…

redis从头开始【一】--面试的小伙伴必看

一 什么是NoSQL? Nosql not only sql(不仅仅是SQL) 关系型数据库:列行,同一个表下数据的结构是一样的。 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。 NoSQL泛指非关系型…

10.Yarn概述

如果说HDFS是存储,则Yarn就是cpu和内存,mapreduce就是程序。 1.基础架构 复习: 1.Container就是一个容器,其中封装了需要使用的内存与cpu 2.每当提交一个job,就会产生一个appMaster(总指挥),app Master负责其他container里面的…

【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的Redis延时队列的功能组件

手把手教你如何开发一个属于自己的延时队列的功能组件 前提介绍解决痛点延时队列组件的架构延时队列组件的初始化流程延时队列组件的整体核心类架构延时队列组件的整体核心类功能 延时队列的开发组件延迟队列的机制配置初始化类源码 - DelayedQueueConfigurationRedission客户端…

排序算法 - 冒泡排序

文章目录 冒泡排序介绍冒泡排序实现复杂度和稳定性冒泡排序时间复杂度冒泡排序稳定性 代码实现核心&注意结尾 每日一道算法提高脑力,今天是第一天,来个最简单的算法–冒泡排序。 冒泡排序介绍 它是一种较简单的排序算法。它会遍历若干次要排序的数列…

jQuery知识点一

一、 jQuery 介绍 1.jQuery的概念: jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。 j 就是 JavaScript; Query 查询; 意思…

学习 Python 之 Pygame 开发魂斗罗(十五)

学习 Python 之 Pygame 开发魂斗罗(十五) 给魂斗罗游戏加入Boss1. 分析boss2. 创建boss类3. 在主类中加载Boss4. 修改子弹类逻辑,让boss可以开火5. 修改主类逻辑,让boss正常开火 给魂斗罗游戏加入Boss 在上次的博客学习 Python 之…

如何在不重装系统的情况下换固态硬盘?

随着固态硬盘的价格不断下降,越来越多的计算机用户希望用固态硬盘替换老旧的机械硬盘以获得更好的性能。 但是常规方法就避免不了重装系统,用户配置文件、系统设置、个人文件和已安装的程序又需要重新配置一遍。此外,还可能重新遇到很多问题…

城市“一网统管”平台—智慧平安小区的场景应用

随着城市建设进程的不断加快,关于城市的智能化治理需求也随之增多。在国家发布的“十四五”规划中,已经明确指出,推进新型城市建设,推行城市运行一网统管。作为推动城市治理体系和治理能力现代化的重要探索,“一网统管…

Linux/Unix常见IO模型

阻塞(Blocking I/O)、非阻塞(Non-Blocking I/O)、IO多路复用(I/O Multiplexing)、 信号驱动 I/O(Signal Driven I/O)(不常用)和异步(Asynchronous…

智能家居“落地者”:三翼鸟用场景方案持续链接大众消费

互联网分析沙龙(techxue)原创 作者 | 锡海 编辑 | 七喜 从上海车展再到AWE2023展会,只要有大型活动的地方,都能看到人潮汹涌的景象,久违的烟火气又回来了。数据显示,社会消费已出现较为强劲反弹&#xff0…

长知识了,mongo的时间居然这个样子

1、前言 最近一直在使用mongo数据库,前面文章也介绍了一直在做数据过期的事情, mongo中的数据过期时间之前在程序中增加了一个字段 【Springboot系列】项目启动时怎么给mongo表加自动过期索引 之前看到时间字段没有时区的信息,没有关注&a…

微服务注册中心选型:Zookeeper、Eureka、Nacos、Consul和Etcd

注册中心基本概念 什么是注册中心? 注册中心主要有三种角色: 服务提供者(RPC Server):在启动时,向 Registry 注册自身服务,并向 Registry 定期发送心跳汇报存活状态。 服务消费者&#xff08…

怎么知道网站服务器有没有被攻击?

​  一个网站服务器遭到攻击可能会给企业带来巨大的金融损失,因此,企业需要及时发现服务器是否被攻击。但是,企业如何知道自己的服务器是否被攻击呢?下面,我们来看一些服务器被攻击的警告信号。 1.网络延迟增加 在网络攻击中&a…

记一次运气非常好的渗透到服务器的经历

平平无奇的客服平台 这个客服平台是有RCE的,如果上传到的不是oss服务器,存储在本地服务器的话 在返回端口的url是存在st2 root权限,由于是客服后台服务器,没有啥有用价值的信息 直接替换私钥连服务器 继续翻找有用的信息 配置文件…

Django性能监视工具django-silk的使用

django-silk 是一个轻量级的 Django 应用性能监视工具,可帮助您了解 Django 应用的性能瓶颈、数据库查询等问题。它可以使用在django前后端分离的项目中,直接通过请求后台API接口即可对性能进行监视。以下是 django-silk 的使用步骤: 1.安装…

资本认可 | 开源网安成为中国未来独角兽企业,引领软件安全不断发展

4月11日,第七届万物生长大会中国未来独角兽大会盛大召开,本次大会中国投资发展促进会创投专委会联合微链共同发布了《2023中国未来独角兽TOP100榜单》,开源网安成功入选榜单。 《2023中国未来独角兽TOP100榜单》瞄准近两年融资较为活跃或融资…

快速简单制作macOS Ventura系统ISO格式镜像

ISO格式的镜像其实没有什么制作难度,下面苹果系统之家教大家怎么快速简单制作ISO格式的镜像,教程使用到的都是Mac官方的命令。制作好的ISO格式镜像可以用于虚拟机安装或者制作到U盘或者直接在Mac里面打开安装升级。 准备系统镜像 首先下载好macOS 镜像…

上海亚商投顾:沪指延续反弹涨0.67% AI概念股掀跌停潮

指数今日低开高走,沪指午后一度涨超1%,以保险为首的大金融板块拉升,中国平安在一季报驱动下,迎来久违涨停,成交超120亿元。医药股全天强势,何氏眼科、金石亚药、普蕊斯、天宇股份20CM涨停,第一医…

约翰霍普金斯大学诺奖得主涉嫌造假,撤回5篇PNAS论文

2019年,约翰霍普金斯大学的著名基因医学科学家Gregg L. Semenza博士因为“发现细胞如何感知和适应氧气供应”,和另外两名科学家( William Kaelin Jr. and Peter J. Ratcliffe)分享当年的生理医学诺贝尔奖。 近期,Gregg…