ClickHouse浅谈

news2024/11/15 3:33:59

文章目录

  • 前置知识
    • 什么是OLAP与OLTP
    • 行式数据库与列式数据库
      • 什么是行式和列式?
      • 行式和列式的优缺点
  • ClickHouse
    • 什么是clickhouse?
    • clickhouse的使用架构
    • clickhouse的优点和缺点
    • clickhouse的功能特性
      • 计算层
      • 服务层
      • 向量化引擎
    • clickhouse的使用案例
    • 与其他OLAP相比,clickhouse的优势
    • clickhouse与kylin的区别
  • 大数据技术的演变
  • 参考文献

21年笔记迁移

前置知识

什么是OLAP与OLTP

OLAP(OnLine Analytical Processing)联机分析系统;
OLTP(OnLine Transaction Processing)联机事务处理系统;

OLAP主要用来读取数据、分析数据,辅助运营决策分析
数据一次性批量写入后,分析师需要从各种角度出发,对数据进行挖掘分析,以期发现其中的商业价值、业务变化趋势等;
OLAP主要用来做离线分析,对时效性要求不高。
OLAP主要的开源产品包括HDFS、HIVE和Impala等;目标应用场景就是一次写入,多次读取;

OLTP是进行事务的增删改查
比如在电商系统中进行商品的购买、库存减少、购物车下单支付等。
OLTP是传统的关系型数据库的主要应用,也被称为是面向交易的处理系统,一般用于大数据在线业务系统中,要求有实时性。

OLAP:读 + 一次性的写入;
OLTP:实时的读 + 实时的写

如此理解:OLTP可变相视为是OLAP的数据源
前期我们需要通过OLTP来进行数据的累积,当数据累积到一定的程度,我们需要对过去发生的事情做一个统计分析,来为公司的决策提供支持,这时候就是在做OLAP了。

综上,简单地说,OLAP是OLTP的延展,让数据发挥更大价值

再加一点,传统的数据库,主要是面向OLTP,而数据仓库主要面对OLAP,侧重决策分析。
所谓数据仓库,是一个更好的支持企业或者组织的决策分析处理的面向主题的、集成的、不可更新的、随时间不断变化的数据集合。

在这里插入图片描述

行式数据库与列式数据库

什么是行式和列式?

行式数据库:以行相关的存储体系进行数据存储;
列式数据库:以列相关的存储体系进行数据存储;

假设现在我们有下图这样的数据:
在这里插入图片描述
行式存储,会将一行数据串成一串字符,一行一行存储,即:
在这里插入图片描述
列式存储,会将一列字符串成一串,一列一列做存储,即:
在这里插入图片描述
相比来讲,列式存储更适合查询,每一列都是索引。

行式和列式的优缺点

列式数据库:

  • 每一列单独存储,意味着数据本身就是索引,查询快;
  • 每一列数据类型一致,意味着更高效的压缩;
  • 只将select集合中需要的列读入内存,极大降低系统的IO。

列式的优点就是行式的缺点。

行式数据库擅长随机读操作,列式数据库更擅长大批量数据的查询
列式数据库本身就是面向大数据环境下的数据分析而生,适合大量数据而不是小批量数据,适合查询操作而不是增删改
列式数据库在并行查询处理和压缩上更有优势,列式数据库的主要应用场景就是在99%的操作都是查询的应用。很适合OLAP。
列式数据库的代表包括:[HANA], [Sybase IQ]],ParAccel, Sand/DNAAnalytics和 Vertica。

ClickHouse

什么是clickhouse?

俄罗斯第一大搜索引擎Yandex在2016年6月15日开源了一个数据分析的数据库,名字叫做ClickHouse,开源免费,圈内人戏称为“喀秋莎数据库。
其图标:
在这里插入图片描述
这个列式存储数据库的跑分要超过很多流行的商业数据库软件,例如Vertica;
受欢迎程度也比其他的高。
在这里插入图片描述

clickhouse的使用架构

腾讯的ClickHouse使用架构:
在这里插入图片描述
头条的一个基于Clickhouse集群的架构:
在这里插入图片描述
可以看到,围绕clickhouse集群,有很多数据源,包括离线的数据、实时的消息中间件数据,也有些业务的数据等,外围也提供一个数据ETL的Service,定期把数据迁移到clickhouse local storage上,最后再在clickhouse集群上架几个分析系统。

clickhouse的优点和缺点

clickhouse的三大特点:跑分快、功能多、限制多
为什么说它跑分快?
一亿数据:
ClickHouse比Vertica约快5倍,比Hive快279倍,比My SQL快801倍;
十亿数据:
ClickHouse比Vertica约快5倍,MySQL和Hive已经无法完成任务了;

ClickHouse的快是因为采用了并行处理机制,在默认情况下,即使一个查询,也会占用服务器一半的CPU去执行,这也是ClickHouse不能支持高并发的原因。(当然,这个占用核数是可以配置的)
另外,它的压缩率高,目前clickhouse的数据压缩能够达到30%~40%。

为什么说限制多?
据说,clickhouse生来就是为小资服务的。

  • 目前只支持Ubuntu系统。windows下需要Ubuntu虚拟环境;
  • 不支持高并发,官方建议QBS(每秒查询率)为100;
  • 不提供设计和架构文档,设计很神秘的样子,只有开源的C++源码;
  • 不理睬Hadoop生态,采用 Local attached storage 作为存储,走自己的路,自我实现分布式部署。
  • 不支持事务,不存在隔离级别;
  • 写入慢;
  • 上手存在难度,老毛子做的有些粗犷(所谓的喀秋莎数据库,有一部分是源于这里);
  • join性能欠佳,远不如其在单表上的表现,所以建议多使用宽表来代替join。(clickhouse支持列宽到一万列左右)

clickhouse的功能特性

计算层

多核并行、分布式计算、近似计算和复杂数据类型支持等;
多核并行:在clickhouse中数据被分成了多个分区,查询某条数据时通过多分区的数据,利用CPU的多核同时并行处理获取数据,降低了查询时长;
分布式计算:ClickHouse将查询任务拆分成多个子任务下发到多个集群中进行多机并行处理,最后汇聚结果给到用户,提供最近hostname规则(即将任务下发到机器最近的hostname节点)、inorder(即按顺序进行分发,当某个分片不可用时,下发到下一个分片)
近似计算:指的是牺牲一定的精确度获取数据,在海量数据的分析中,其实并不需要非常精准的数据,近似数据足以分析决策,ClickHouse提供了中位数、分位数(二分位数即中位数、四分位数等)等多种聚合函数,极大的提高了查询性能,减轻了计算压力。所谓的近似计算,实际上就是提供了一堆写好的聚合函数是吗,可提供迅速的近似计算。支持对数据进行抽样处理。
复杂数据类型支持:ClickHouse还提供了array、json、tuple、set等复合数据类型,也是极为有效的;

服务层

在存储层它实现了数据有序存储、主键索引、稀疏索引、数据分区分片、主备复制、有限支持delete和update等功能。

数据的有序存储指的是数据在建表时可以将数据按照某些列进行排序,排序之后,相同类型的数据在磁盘上有序的存储,在进行范围查询时所获取的数据都存储在一个或若干个连续的空间内,极大的减少了磁盘IO时间;
所谓数据分区分片,指的是在ClickHouse的部署模式上支持单机模式和分布式集群模式,在分布式中会把数据分为多个分片,并且分布到不同的节点上,它提供了丰富的分片策略,包含random随机分片(将写入数据随机分发到集群中的某个节点)、constant固定分片(将写入数据分发到某个固定节点)、columnvalue分片(将写入数据按某一列的值进行hash分片)、自定义表达式分片(将写入数据按照自定义的规则进行hash分片)
主备复制,可为一个主库配置多个副本,且默认配置下,任何副本都处于active模式,可以对外提供查询服务。

向量化引擎

ClickHouse实现了向量执行引擎(Vectorized execution engine),可以充分发挥CPU的性能。

对内存中的列式数据,一个batch调用一次SIMD(单指令多数据流)指令(而非每一行调用一次),不仅减少了函数调用次数、降低了cache miss,而且可以充分发挥SIMD指令的并行能力,大幅缩短了计算耗时。向量执行引擎,通常能够带来数倍的性能提升。

clickhouse提供了一个MySQL数据引擎,可以将MySQL中的表直接映射成自己的表(所以底层有时候会搞MySQL做底层),除此之外,clickhouse也有一个自己的数据引擎,可以执行正常的sql;

clickhouse的使用案例

今日头条用ClickHouse来做用户行为分析,内部一共几千个ClickHouse节点,单集群最大1200节点,总数据量几十PB,日增原始数据300TB左右。

腾讯内部用ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。

携程内部从18年7月份开始 接入试用,目前80%的业务都跑在ClickHouse上。每天数据增量十多亿,近百万次查询请求。

快手内部也在使用ClickHouse,存储总量大约10PB, 每天新增200TB, 90%查询小于3S。

在国外,Yandex内部有数百节点用于做用户点击行为分析,CloudFlare、Spotify等头部公司也在使用。Yandex有十几个项目在使用ClickHouse,它们包括:Yandex数据分析,电子邮件,广告数据分析,用户行为分析等等。

2012年,欧洲核子研究中心使用ClickHouse保存粒子对撞机产生的大量实验数据,每年的数据存储量都是PB级别,并支持统计分析查询。

在这里插入图片描述

与其他OLAP相比,clickhouse的优势

整体来讲:
相比商业的OLAP数据库,click house是开源免费的;
相比云解决方案,click house可以使用自己的机器部署,可不需要云付费;
相比Hadoop生态的DBMS们,click house不依赖Hadoop生态,自己就可以实现实时的高并发系统,也支持分布式机房的部署。
相比几个开源的OLAP数据库,clickhouse发展的更加成熟,稳定性更高,应用的场景更大。
相比非关系型数据库,ClickHouse可以支持从原始数据的直接查询,ClickHouse支持类SQL语言,提供了传统关系型数据的便利。

clickhouse与kylin的区别

  • Kylin 适合高并发,固定模式查询场景
  • ClickHouse 适合低并发,灵活即席查询场景

固定模式查询
预先将客户的需求计算好以结果的形式存下来,当客户提出需求后,找到对应结果返回即可。
特点是当命中需求后返回非常快,同等资源下支持的数据体量更大,支持的并发更多;
不足则是当表的维度越多,越复杂,其所需的磁盘存储空间则越大,构建cube也需要一定的时间。

灵活即席查询
实时根据用户提出的需求对数据进行计算后返回给用户,所以用户使用相对比较灵活,可以随意选择维度组合来进行实时计算。

另外,原理上,Kylin 是基于Hadoop平台,通过预计算, 定义cube模型的MOLAP分析(多维联机分析处理),即以空间换时间
而clickhouse是关系型联机分析处理(ROLAP),主张通过极致使用CPU的性能达到高性能的OLAP分析。

相同点上, Kylin 和 ClickHouse 都能通过 SQL 的方式在 PB 数据量级下,亚秒级(绝多数查询 5s内返回)返回 OLAP(在线分析查询) 查询结果。

大数据技术的演变

一开始大家发现原生的MapReduce实在太难写了,大家迫切的需要一种高级语言层来描述数据的计算过程(这个过程就好比,你有了汇编之后,虽然什么都能干了,但是真的是太繁琐了,于是衍生了一堆C++和Java等高级语言)。

于是便有了pig和hive。

pig是以接近脚本的方式去描述MapReduce,而Hive用的是类SQL语言,即HQL。
pig和hive分别将脚本和HQL翻译成MapReduce程序,丢给计算引擎来计算,这使得开发人员从繁琐的MapReduce程序中解脱出来,降低了使用门槛。
而有了Hive之后,人们发现SQL是真的简单,于是Hive逐渐成长了大数据仓库的核心组件。

但是人们发现Hive在MapReduce上跑的太慢,于是诞生了Impala、Presto,Drill等交互SQL引擎,牺牲了通用性、稳定性来换取处理速度。(似乎,并没有完整替换MapReduce,只是做了一些优化)。
然后这些交互式引擎并没有完全符合人类的预期,于是大家决定用新一代通用的计算引擎Tez或者Spark(代替MapReduce)来跑SQL,于是诞生了Hive on Tez / Spark和SparkSQL。

上面的介绍,基本就是一个成型的数据仓库的框架了。
底层是HDFS,上面跑MapReduce/Tez/spark做计算,然后高级语言层跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了大部分中低速数据处理的需求。

参考文献

原稿遗失了。。所以参考文献这部分找不到了。。。

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

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

相关文章

如何打开远程电脑的任务管理器?

关于任务管理器 任务管理器可以显示远程计算机后台运行的进程和应用程序及其使用状态。通过任务管理器提供的信息,您可以了解是否有程序或进程占用过多的CPU和内存,然后您可以选择结束应用程序或结束进程以提高远程电脑的运行速度。 如何访问远程电脑上…

SD 系统自动计算的税额 有差异

SD 系统自动计算的税额 有差异 1,002,000.00 * 13% 115,274.34 产生了0.03的价格舍入差异 (保存前是正确的,保存后产生差异) 解决办法:取消条件类型组条件即可

辅助行走机器人开发 —— 下位机控制

文章目录 总体设计硬件选型控制模式程序流程1 初始化2 FreeRTOSBalance_taskMPU6050_taskShow_taskLed_taskPs2_taskData_task 3 中断串口中断 辅助行走机器人开发项目总结 总体设计 项目分为语音模式、导航模式和手动模式。 语音模式、导航模式为ROS下发控制指令&#xff1…

java.lang.UnsupportedOperationException 异常处理

通过 json 字符串转化成的 asList &#xff0c;对该 List 进行 add 时&#xff0c;抛出异常 java.lang.UnsupportedOperationException 处理方案 List string new ArrayList<>(asList);

企业邮箱的多重用途:了解企业邮箱在工作中的重要作用

邮箱已经成为商务交流不可或缺的一部分。在企业界&#xff0c;邮箱被用于各种各样的任务&#xff0c;从内部沟通到客户服务。虽然许多组织已经转向更现代的通信方式&#xff0c;如即时消息&#xff0c;企业邮箱仍然是任何成功的商业运作的重要组成部分。以下是公司邮箱的一些主…

【小程序上传报错】message:Error: 系统错误,错误码:80058,desc of scope.userLocation is empty

根据错误信息 “Error: 系统错误&#xff0c;错误码&#xff1a;80058,desc of scope.userLocation is empty”&#xff0c;这是一个系统错误&#xff0c;错误码为80058。错误信息中提到了 scope.userLocation 的描述为空。 可能是因为在小程序中使用了 scope.userLocation 权…

5.4 服务器编程基本框架和两种高效的事件处理模式

5.4 服务器编程基本框架和两种高效的事件处理模式 服务器编程基本框架 虽然服务器种类繁多&#xff0c;但其基本框架都一样&#xff0c;不同之处在于逻辑处理&#xff08;比如开发Web服务器项目&#xff0c;浏览器客户端向服务端发送http请求&#xff0c;服务器对请求报文进行…

高压线路零序电流方向保护程序逻辑原理(三)

四、零序保护故障处理程序原理 零序保护逻辑程序可分为三个模块&#xff1a;快速动作部分、全相循环和非全相循环模块。这是根据零序保护的特点而设计的。任何一种高压线路保护都要求快速处理I段范围内的严重故障&#xff0c;所以零序保护与距离保护一样配有快速动作部分程序模…

分不清楚蝴蝶的种类,让AI来告诉你,基于YOLOv5开发构建轻量级蝴蝶细粒度目标检测识别系统

小时候有时间就很喜欢趁着下课放学的时间去抓蝴蝶玩&#xff0c;五彩多样的蝴蝶让人应接不暇&#xff0c;现在早就过了那个天真玩耍的年纪了&#xff0c;如今看到蝴蝶的第一反应就是这是什么蝴蝶&#xff0c;没有专业的知识支撑很难识别出来具体的种类&#xff0c;本文的主要目…

电脑bios使用的uefi启动,系统盘使用的mbr格式,为什么安装完系统无法进入?

概要 在电脑的安装系统过程中&#xff0c;我们会遇到一些问题&#xff0c;比如说使用UEFI启动但是磁盘分区使用MBR格式&#xff0c;导致系统安装完成之后无法引导。这是因为UEFI启动只支持GPT格式的磁盘分区。 在本文中&#xff0c;我们将探讨如何将磁盘转换成GPT格式&#xf…

一种新的程序在线升级的实现(学习)

介绍一种新的程序在线升级方法&#xff0c;以及程序在线升级在嵌入式系统中的应用和实现。设计将从系统原理和实现介绍该程序在线升级方法。利用串口作为通讯方式&#xff0c;自定义通讯协议。 上位机将升级文件传给下位机&#xff0c;下位机将数据解析后存储在内部Flash中。解…

用矩阵处理3D变换

Rotation 也可以把三个旋转矩阵合并为一个综合旋转矩阵: 平移和旋转结合 有时我们想要将平移和旋转结合起来&#xff0c;这样我们就可以在一次操作中同时进行两者&#xff0c;但是我们不能用3x3矩阵来做3D平移&#xff0c;只能用4x4矩阵来做&#xff0c;如下所定义&#xff1a…

尚硅谷Docker实战教程-笔记07【Docker常规安装简介】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

嵌入式基础知识-总线带宽

带宽&#xff0c;最容易想到的是上网用的网络带宽&#xff0c;在嵌入式软件开发中&#xff0c;也会用到带宽&#xff0c;这个带宽的含义就不一样了&#xff0c;区别是什么&#xff1f;本篇就来介绍一下&#xff0c;并通过一些例子来进行带宽的计算。 先来简单看下不同领域的带…

交叉熵和softmax

交叉熵cross-entropy loss 最大化似然函数&#xff0c;最小化负的似然对数函数 最终的交叉熵损失函数&#xff0c;最小化该loss&#xff1a; nn.BCELoss def criterion(yhat, y):out -1 * torch.mean(y*torch.log(yhat) (1-y) * torch.log(1-yhat))return outsoftmax

51单片机一氧化碳烟雾报警器mq2MQ7ADC0832采集

实践制作DIY- GC0152--- 一氧化碳烟雾报警器 基于51单片机设计------- 一氧化碳烟雾报警器 二、功能介绍&#xff1a; STC89C52单片机lcd1602adc0832mq2烟雾传感器mq7烟雾传感器蜂鸣器2个按键设定烟雾报警阈值 2个按键设定一氧化碳报警阈值 1.通过ADC0832采集MQ2烟雾输出的电…

嵌入式系统中STM32时钟系统详解

1. STM32的时钟源主要有&#xff1a; 内部时钟 外部时钟 锁相环倍频输出时钟 1.1 详细介绍 HSI(内部高速时钟) 它是RC振荡器&#xff0c;频率可以达到8MHZ&#xff0c;可作为系统时钟和PLL锁相环的输入 HSE&#xff08;外部高速时钟&#xff09; 接入晶振范围是4-16MHZ&a…

数据结构--线性表(顺序表、单链表、双链表、循环链表、静态链表)

前言 学习所记录&#xff0c;如果能对你有帮助&#xff0c;那就泰裤辣。 目录 1.线性表概念 定义 基本操作 2.顺序表 定义 顺序表的实现--静态分配 动态分配 顺序表的特点 顺序表的插入和删除 顺序表的查找 按位查找 按值查找 3.单链表 定义 单链表的初始化 不带…

112.(cesium篇)cesium地球自转+文字上下滚动

地图之家总目录(订阅之前必须详细了解该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 112.(cesium篇)cesium地球自转+文字上下滚动 下面献上完整代码…

Kubernetes(k8s)集群搭建,完整无坑,不需要科学上网~

文章目录 写在前面一、准备三个centos7虚拟机1、创建Vagrantfile2、启动三台虚拟机3、配置centos7支持ssh登录&#xff08;所有机器&#xff09;4、修改 linux 的 yum 源&#xff08;所有机器&#xff09;5、更新并安装依赖&#xff08;所有机器&#xff09;6、安装docker&…