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

ClickHouse基本原理

什么是ClickHouse

ClickHouse是一款开源的面向联机分析处理的列式数据库,其独立于Hadoop大数据体系,最核心的特点是极致压缩率和极速查询性能。同时,ClickHouse支持SQL查询,且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据库速度快一个数量级。

ClickHouse核心的功能特性介绍如下:

完备的DBMS功能

ClickHouse拥有完备的DBMS数据库管理系统(Database Management System),基本功能如下所示。

  • DDL (数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
  • DML(数据操作语言):可以动态查询、插入、修改或删除数据。
  • 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
  • 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
  • 分布式管理:提供集群模式,能够自动管理多个数据库节点。

列式存储与数据压缩

ClickHouse是一款使用列式存储的数据库,数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会由不同的文件分别保存。

在执行数据查询时,列式存储可以减少数据扫描范围和数据传输时的大小,提高了数据查询的效率。

例如在传统的行式数据库系统中,数据按如下表1顺序存储:

表1 行式数据库

row

ID

Flag

Name

Event

Time

0

12345678901

0

name1

1

2020/1/11 15:19

1

32345678901

1

name2

1

2020/5/12 18:10

2

42345678901

1

name3

1

2020/6/13 17:38

N

行式数据库中处于同一行中的数据总是被物理的存储在一起,而在列式数据库系统中,数据按如下表2顺序存储:

表2 列式数据库

row:

0

1

2

N

ID:

12345678901

32345678901

42345678901

Flag:

0

1

1

Name:

name1

name2

name3

Event:

1

1

1

Time:

2020/1/11 15:19

2020/5/12 18:10

2020/6/13 17:38

该示例中只展示了数据在列式数据库中数据的排列方式。对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储,列式数据库更适合于OLAP(Online Analytical Processing)场景。

向量化执行引擎

ClickHouse利用CPU的SIMD指令实现了向量化执行。SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据,通过数据并行以提高性能的一种实现方式 ( 其他的还有指令级并行和线程级并行 ),它的原理是在CPU寄存器层面实现数据的并行操作。

关系模型与SQL查询

ClickHouse完全使用SQL作为查询语言,提供了标准协议的SQL查询接口,使得现有的第三方分析可视化系统可以轻松与它集成对接。

同时ClickHouse使用了关系模型,所以将构建在传统关系型数据库或数据仓库之上的系统迁移到ClickHouse的成本会变得更低。

数据分片与分布式查询

ClickHouse集群由1到多个分片组成,而每个分片则对应了ClickHouse的1个服务节点。分片的数量上限取决于节点数量(1个分片只能对应1个服务节点)。

ClickHouse提供了本地表 (Local Table)与分布式表 (Distributed Table)的概念。一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。

ClickHouse应用场景

ClickHouse是Click Stream + Data WareHouse的缩写,起初应用于一款Web流量分析工具,基于页面的点击事件流,面向数据仓库进行OLAP分析。当前ClickHouse被广泛的应用于互联网广告、App和Web流量、电信、金融、物联网等众多领域,非常适用于商业智能化应用场景,在全球有大量的应用和实践,具体请参考:https://clickhouse.tech/docs/en/introduction/adopters/。


http://www.kler.cn/news/361789.html

相关文章:

  • Docker安装Mysql5.7,解决无法访问DockerHub问题
  • 【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)
  • centos 安装达梦数据库
  • 【已解决】【Hadoop】 Shell命令易错点及解决方法
  • 政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行
  • 基于vue框架的的地铁站智慧管理系统的设计n09jb(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 全面解析P2P网络
  • python-docx -- Text文本的操作
  • 《嵌入式最全面试题-Offer直通车》目录
  • 原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
  • 7-7 求整数均值(C++)
  • 工业自动化为什么依赖光耦隔离器 --- 腾恩科技
  • 5G NR:BWP入门
  • Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)
  • 复习:React 中的 Diff 算法,原理是什么
  • 间充质干细胞疗法迎来快速发展:国内新药申请超93项,全球临床试验超1300项
  • Dataset(helpers文件中dataset_classes文件的datasets.py)
  • Flutter Image图片组件
  • 2024-NewStarCTF-WEEK2
  • Git安装与配置(2.47.0版本超详细)
  • HTTP cookie 与 session
  • Linux 安装 JDK 环境
  • 什么是Linux?
  • 【Linux-进程间通信】vscode使用通信引入匿名管道引入
  • 前100+大型语言模型(LLMs)面试问题和路线图
  • HarmonyOS Next应用开发——图像PixelMap变换