当前位置: 首页 > news >正文

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(正在更新!)

章节内容

上节我们完成了如下的内容:

  • Flink SQL
  • Flink SQL Hello World

请添加图片描述

简要概述

ClickHouse 是一个快速开源的OLAP数据库管理系统,它是面向列的,允许使用SQL查询实时生成分析报告。

随着物联网IOT时代的来临,IOT设备感知和报警存储数据越来越大,有用的价值数据需要数据分析师去分析。大数据分析成了非常重要的环节,开源也为大数据分析工程师提供了十分丰富的工具,但这也增加了开发者选择适合的工具的难度,尤其是新入行的开发者来说。

框架的多样化和复杂度成了很大的难题,例如:Kafka、HDFS、Spark、Hive等等组合才能产生最后的分析结果,把各种开源框架、工具、库、平台人工整合到一起所需的工作之复杂,是大数据领域开发和数据分析师常有的抱怨之一,也就是他们支持大数据分析简化和统一化的首要原因。

在这里插入图片描述
从业务维度来分析,用户需求会反向促使技术发展。

OLTP

OLTP:On-Lineage Transaction Processing:联机事务处理过程。

应用场景

  • ERP:Enterprise Resource Planning 企业资源计划
  • CRM:Customer Relationship Management 客户关系管理

流程审批、数据录入、填报等

具体特点

线下工作线上化,数据保存在各自的系统中,互不相同(数据孤岛)

OLAP

OLAP:On-Line Analytical Processing:联机分析系统

分析报表、分析决策等。

应用场景

方案1:数仓

在这里插入图片描述
如上图所示,数据实时写入HBase,实时的数据更新也在HBase完成,为了应对OLAP需求,我们定时(通常是T+1或者T+H)将HBase数据写成静态的文件(如:Parquet)导入到 OLAP引擎(如HDFS,比较常见的是Impala操作Hive)。这一架构又能满足随机读写,又可以支持OLAP分析的场景,但是有如下缺点:

  • 架构复杂:从架构上看,数据在HBase、消息队列、HDFS间流转,涉及到的环节过多,运维成本也很高,并且每个环节需要保证高可用,都需要维护多个副本,存储空间也有一定的浪费。最后数据在多个系统上,对数据安全策略、监控都提出了挑战。
  • 时效性低:数据从HBase导出静态文件是周期性的,一般这个周期一天(或者一小时),有时效性上不是很高。
  • 难以应对后续的更新:真实场景中,总会有数据是延迟到达的,如果这些数据之前已经从HBase导出到HDFS,新到的变更数据更难以处理了,一个方案是把原有数据应用上新的变更后重写一遍,但这代价又很高。

方案2:ClickHouse、Kudu

实现方案2就是 ClickHouse、Kudu

发展历史
Yandex在2016年6月15日开源了一个数据分析数据库,叫做ClickHouse,这对保守的俄罗斯人来说是个特大事件。更让人惊讶的是,这个列式数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。如果你没有Vertica,那你一定听过Michael Stonebraker,2014年图灵奖的获得者,PostgreSQL和Ingres发明者(Sybase和SQL Server都是继承Ingres而来的),Paradigm4和SciDB的创办者。Micheal StoneBraker于2005年创办的Vertica公司,后来该公司被HP收购,HP Vertica成为MPP列式存储商业数据库的高性能代表,Facebook就购买了Vertica数据用于用户行为分析。

ClickHouse技术演变之路

Yandex公司在2011年上市,它的核心产品是搜索引擎。
我们知道,做搜索引擎的公司营收非常依赖流量和在线广告,所以做搜索引擎公司一般会并行推出在线流量分析产品,比如说百度的百度统计,Google的Google Analytics等,Yandex的Yandex.Metricah。ClickHouse就是在这种背景下诞生的。

  • ROLAP:传统关系型数据库OLAP,基于MySQL的MyISAM表引擎
  • MOLAP:借助物化视图的形式实现数据立方体,预处理的结果存在HBase这类高性能的分布式数据库中
  • HOLAP:R和M的结合体H
  • ROLAP:ClickHouse

ClickHouse 的核心特点

超高的查询性能

  • 列式存储:只读取查询所需的列,减少了磁盘 I/O。
  • 向量化计算:批量处理数据,提高了 CPU 使用效率。
  • 数据压缩:高效的压缩算法,降低了存储成本。

水平可扩展性

  • 分布式架构:支持集群部署,轻松处理 PB 级数据。
  • 线性扩展:通过增加节点提升性能,无需停机。

实时数据写入

  • 高吞吐量:每秒可插入数百万行数据。
  • 低延迟:数据写入后立即可查询,满足实时分析需求。

丰富的功能支持

  • 多样的数据类型:支持从基本类型到复杂类型的数据。
  • 高级 SQL 特性:窗口函数、子查询、JOIN 等。
  • 物化视图:预计算和存储查询结果,进一步提升查询性能。

典型应用场景

  • 用户行为分析:电商、游戏、社交平台的实时用户行为跟踪。
  • 日志和监控数据存储:处理服务器日志、应用程序日志和性能监控数据。
  • 商业智能(BI):支持复杂的报表和数据分析需求。

请添加图片描述

部署与运维

  • 单机部署:适合测试和小规模应用。
  • 集群部署:用于生产环境,可通过 Zookeeper 进行协调。
  • 运维工具:提供了监控和管理工具,如 clickhouse-client、clickhouse-copier。

最佳实践

  • 数据分区:根据时间或其他字段进行分区,提高查询效率。
  • 索引优化:使用主键和采样键,加速数据定位。
  • 硬件配置:充分利用多核 CPU、高速磁盘和大内存。

ClickHouse支持特性

ClickHouse具体有哪些特性呢:

  • 真正的面向列的DBMS
  • 数据高效压缩
  • 磁盘存储的数据
  • 多核并行处理
  • 在多个分布式服务器上分布式处理
  • SQL语法支持
  • 向量化引擎
  • 实时数据更新
  • 索引
  • 适合在线查询
  • 支持近似预估计算
  • 支持嵌套的数据结构
  • 支持数组作为数据类型
  • 支持限制查询复杂性以及配额
  • 复制数据和对数据完整性的支持

ClickHouse和其他对比

商业OLAP

例如:

  • HP Vertica
  • Actian the Vector

区别:

  • ClickHouse 是开源而且免费的

云解决方案

例如:

  • 亚马逊 RedShift
  • 谷歌 BigQuery

区别:

  • ClickHouse 可以使用自己机器部署,无需云付费

Hadoop生态

例如:

  • Cloudera Impala
  • Spark SQL
  • Facebook Presto
  • Apache Drill

区别:

  • ClickHouse 支持实时的高并发系统
  • ClickHouse不依赖于Hadoop生态软件和基础
  • ClickHouse支持分布式机房的部署

开源OLAP数据库

例如:

  • InfiniDB
  • MonetDB
  • LucidDB

区别:

  • 应用规模小
  • 没有在大型互联网服务中蚕尝试

非关系型数据库

例如:

  • Druid
  • Apache Kylin

区别:

  • ClickHouse 可以支持从原始数据直接查询,支持类SQL语言,提供了传统关系型数据的便利。

真正的面向列DBMS

如果你想要查询速度变快:

  • 减少数据扫描范围
  • 减少数据传输时的大小
    在一个真正的面向列的DBMS中,没有任何无用的信息在值中存储。
    例如:必须支持定长数值,以避免在数值旁边存储长度数字,10亿个Int8的值应该大约消耗1GB的未压缩磁盘空间,否则这将强烈影响CPU的使用。由于解压的速度(CPU的使用率)主要取决于未压缩的数据量,即使在未压缩的情况下,紧凑的存储数据也是非常重要的。

因为有些系统可以单独存储独列的值,但由于其他场景的优化,无法有效处理分析查询,例如HBase、BigTable、Cassandra和HypeTable。在这些系统中,每秒可以获得大约十万行的吞吐量,但是每秒不会到达数亿行。

另外,ClickHouse是一个DBMS,而不是一个单一的数据库,ClickHouse允许运行时创建表和数据库,加载数据和运行查询,而不用重新配置或启动系统。

在这里插入图片描述

在这里插入图片描述
之所以称作 DBMS,因为ClickHouse:

  • DDL
  • DML
  • 权限管理
  • 数据备份
  • 分布式存储
  • 等等功能

数据压缩

一些面向列的DBMS(InfiniDB CE 和 MonetDB)不使用数据压缩,但是数据压缩可以提高性能。

磁盘存储

许多面向列的DBMS(SAP HANA和GooglePower Drill)只能在内存中工作,但即使在数千台服务器上,内存也太小,无法在Yandex.Metrica中存储所有浏览和会话。

多核并行

多核并行进行大型的查询。

在多个服务器上分布式处理

上面列出的DBMS几乎不支持分布式处理,在ClickHouse中,数据可以驻留不同的分片上,每个分片可以是用于容错的一组副本,查询在所有分片上并行处理,这对用户来说是透明的。

SQL支持

  • 支持的查询包括 GROUP BY、ORDER BY
  • 子查询在FROM、IN、JOIN子句中被支持
  • 标量子查询支持
  • 关联子查询不支持
  • 真是因为ClickHouse提供了标准协议的SQL查询接口,使得现有可视化分析系统能够轻松的与它集成对接

向量化引擎

数据不仅案列存储,而且由矢量-列的部分进行处理,这使我们能够实现高CPU性能。
向量化执行时寄存器硬件层面上的特性,可以理解为消除程序中循环的优化。
为了实现向量化执行,需要利用CPU的SIMD指令(Single Instrution Multiple Data),即用单条指令处理多条数据。现代计算机系统概念中,它是利用数据并行度来提高性能的一种实现方式,它的原理是在CPU寄存器层面实现数据并行的实现原理。

实时数据更新

ClickHouse支持主键表,为了快速执行对主键范围的查询,数据使用合并树(MergeTree)进行递增排序,由于这个原因,数据可以不断的添加到表中,添加数据时无锁处理。

索引

例如,带有主键可以在特定的时间范围内为特定的客户端(Metrica计数器)抽取数据,并且延迟事件小于几十毫秒。

支持在线查询

我们可以使用该系统作为Web界面的后端,低延迟意味着可以无延迟的实时的处理查询。

支持近似计算

  • 系统包含用于近似计算各种值,中位数和分位数的集合函数
  • 支持基于部分(样本)数据运行查询并获得近似结果,在这种情况下,从磁盘检索比例较少的数据。
  • 支持为有限数量的随机秘钥(而不是所有秘钥)运行聚合,在数据中秘钥分发的特定场景下,这提供了相对准确的结果,同时使用较少的资源。

数据复制和对数据完整性支持

使用异步多主复制,写入任何可用的副本后,数据将分发到所有剩余的副本,系统在不同的副本上保持相同的数据。
要注意的是,ClickHouse并不完美:

  • 不支持事务
  • 不支持Update、Delete操作
  • 支持有限的操作系统

最后总结

在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终效果,在人力成本、技术能力、硬件成本、维护成本上,让大数据分析变成了很昂贵的事情,很多中小企业非常痛苦,不得不被迫租赁第三方大型数据分析服务。
ClickHouse开源的出现让许多想做大数据且想做大数据分析的很多公司和企业都耳目一新。ClickHouse正是以不依赖Hadoop生态、安装维护简单、查询快速、支持SQL等特点,在大数据领域越走越远。

相关文章:

大数据-133 - ClickHouse 基础概述 全面了解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

第1步win10宿主机与虚拟机通过NAT共享上网互通

VM的CentOS采用NAT共用宿主机网卡宿主机器无法连接到虚拟CentOS 要实现宿主机与虚拟机通信,原理就是给宿主机的网卡配置一个与虚拟机网关相同网段的IP地址,实现可以互通。 1、查看虚拟机的IP地址 2、编辑虚拟机的虚拟网络的NAT和DHCP的配置,…...

Python学习——【2.3】for循环

文章目录 【2.3】for循环一、for循环基础语法(一)基础语法※、练习 (二)range语句※、练习 (三)变量作用域 二、for循环嵌套使用※、练习 【2.3】for循环 一、for循环基础语法 (一&#xff09…...

Element UI:初步探索 Vue.js 的高效 UI 框架

Element UI:初步探索 Vue.js 的高效 UI 框架 一 . ElementUI 基本使用1.1 Element 介绍1.2 Element 快速入门1.3 基础布局1.4 容器布局1.5 表单组件1.6 表格组件1.6.1 基础表格1.6.2 带斑马纹表格1.6.3 带边框表格1.6.4 带状态的表格 1.7 导航栏组件讲解 二 . 学生列…...

React Native防止重复点击

项目中遇到了点击按钮重复提交的问题,防止重复点击首先是想到的是给点击事件一个定时,下次触发的条件是要距离上一次点击的时间大于N秒的之后才能再执行。 // 防重复点击函数 export const preventRepeatPress {lastPressTi1me: 0, // 上次点击时间…...

如何将Git本地代码推送到Gitee云端仓库

如何将Git本地代码推送到Gitee云端仓库 在使用Git进行版本控制时,将本地代码推送到远程仓库是一个基本且重要的操作。本文将详细介绍如何将你的Git本地代码推送到Gitee(码云)云端仓库。Gitee是一个国内非常流行的代码托管平台,类…...

架构师论文备考-论云原生架构及其应用

摘要 2022年3月,我有幸参与了公司的新智慧公交系统的研发工作。该系统基于B/S架构设计,并以多租户SaaS平台化为发展目标,旨在创建一个功能更全面、性能更卓越、稳定性更强、用户体验更佳的公交调度一体化平台。在这一项目中,我主要…...

12.java面向对象:java构造器

构造器 一个类即使什么都不写,也会存在一个方法。 假如我创建了一个类叫Student里面什么都不写,然后使用StudentDemo创建对象,运行没有结果,也没有报错。 public class Student {}public class StudentDemo {public static voi…...

微服务之间的安全通信

在微服务架构中,服务之间的通信是系统的核心部分。然而,由于服务的分布式和独立性,确保它们之间的通信安全至关重要。如果没有适当的安全机制,微服务系统可能会暴露在各种网络攻击和安全漏洞中。本文将讨论几种常见的微服务间安全…...

全面掌握 Jest:从零开始的测试指南(下篇)

在上一篇测试指南中,我们介绍了Jest 的背景、如何初始化项目、常用的匹配器语法以及钩子函数的使用。这一篇篇将继续深入探讨 Jest 的高级特性,包括 Mock 函数、异步请求的处理、Mock 请求的模拟、类的模拟以及定时器的模拟、snapshot 的使用。通过这些技…...

如何利用UML进行领域建模

如何利用UML进行领域建模 领域建模是通过创建抽象模型来反映业务领域中的核心概念、实体及其之间的关系。UML(统一建模语言)是进行领域建模的常用工具,它能帮助我们可视化地设计系统架构和业务逻辑。在这篇讲解中,我们将详细解释…...

Vue实用操作篇-1-第一个 Vue 程序

安装 Vue 非常的简便&#xff0c;只需下载好 Vue 对应的 .js 文件&#xff0c;在 html 中引入 vue.js 即可使用 Vue 下载好了 vue.js 我们便可以编写我们的第一个 vue 程序了 <!doctype html> <html lang"zh-CN"><head><meta charset"utf…...

Qwen2-VL的微调及量化

一、Qwen2-VL简介 Qwen2-VL是Qwen-VL的升级版本&#xff0c;能力更强&#xff0c;性能全面提升。尤其是72B参数的版本更是取了惊人的成绩。它可以读懂不同分辨率和不同长宽比的图片&#xff0c;在 MathVista、DocVQA、RealWorldQA、MTVQA 等基准测试创下全球领先的表现&#xf…...

[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;299 标注数量(xml文件个数)&#xff1a;299 标注数量(txt文件个数)&#xff1a;299 标注类别…...

自动泊车系统中的YOLOv8 pose关键点车位线检测

自动泊车系统中的YOLOv8关键点车位线检测技术解析 引言 随着智能驾驶技术的快速发展&#xff0c;自动泊车功能成为了现代汽车的重要组成部分。它不仅能够提高驾驶的安全性&#xff0c;还能在一定程度上解决城市停车难的问题。在自动泊车系统中&#xff0c;准确识别停车位的位置…...

Java html生成pdf和图片

在 Java 项目中将 HTML 生成图片是一项常见需求&#xff0c;特别是用于生成报告、预览页面截图等。不同的库和工具在渲染能力、性能以及支持的功能上有所不同。以下是几种主流的技术选型和对比&#xff0c;帮助你选择适合的解决方案。 技术对比总结 技术名称优点缺点适用场景…...

JavaWeb笔记整理——Redis

目录 Redis数据类型 各种数据类型的特点 Redis常用命令 字符串操作命令 哈希操作命令 列表操作命令 集合操作命令 有序集合操作命令 通用命令 在Java中操作Redis Spring Data Redis的使用方式 操作字符串类型的数据 ​编辑操作hash类型的数据 ​编辑 操作列表类…...

数据库(mysql)常用命令

一.常见的数据库端口号 Mysql默认端口:3306 oracle 默认端口:1521 Sql server 默认端口:1433 注:Mysql采用 的是C/S(客户端/服务器端)架构 二.sql 语法基础 服务器,数据库,数据表,记录,字段之间的关系: 一台Mysql服务器可以管理多个数据库 一个数据库可以存在多张二维表…...

源网荷储一体化新型电力系统解决方案

风光装机快速增长&#xff0c;加剧电力系统不可控性。截至2023H1&#xff0c;我国风电装机389.21GW&#xff0c;太阳能装机470.67GW&#xff0c;风光合计占总装机的31.76%。其中&#xff0c;2023年H1我国风电新增装机22.99GW&#xff0c;对比22年同期新增12.94GW&#xff0c;同…...

树莓派安装 OpenCV 教程

以下是在树莓派上安装 OpenCV 的教程&#xff1a; 笔者当前Python版本&#xff1a;3.7.3 一、更新树莓派系统 在终端中运行以下命令&#xff1a; sudo apt update sudo apt upgrade二、安装必要的依赖项 安装构建工具和图像 I/O 库&#xff1a; sudo apt install build-e…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...