ClickHouse列存储(十一)—— ClickHouse

这篇具有很好参考价值的文章主要介绍了ClickHouse列存储(十一)—— ClickHouse。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、重点内容:

1.数据库基本概念

2.列式存储

3.clickHouse存储设计

4.clickHouse典型应用场景

二、准备工作:

1、了解数据库基本概念

  1. 数据库
  2. DBMS:数据库管理系统
  3. OLTP 数据库 OLTP(Online transactional processing)
  4. OLAP 数据库:OLAP (Online analytical processing)
  5. SQL (Structured Query Language)
  6. 词法分析
  7. 语法分析
  8. AST (Abstract syntax tree)

2、了解列式存储相关概念

  1. 行式存储

  2. 列式存储

  3. 数据压缩

    a. LZ4

    b. Run-length encoding

    c. Delta encoding

  4. 延迟物化

    a. 物化

    b. Cpu cache

    c. 内存带宽

  5. 向量化

    a. SIMD (single instruction multiple data)

    b. SSE指令集

    c. AVX指令集

3、了解ClickHouse存储设计

  1. Shard key

  2. 索引

    a. 哈希索引

    b. B-Tree

    c. B+Tree

    d. LSM-Tree

4、了解 ClickHouse典型应用场景

  1. Kafka
  2. Spark
  3. Hdfs
  4. Bitmap
  5. 字典编码

三、详细知识点介绍:

1、数据库相关概念

定义:

数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。

数据库的类型:
方式一:

关系数据库:

关系型数据库是把数据以表的形式进行储存,然后再各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。

非关系数据库:

NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据。相比于关系型数据库,NoSQL没有固定的表结构,且数据之间不存在表与表之间的关系,数据之间可以是独立的。

方式二:

单机数据库:

在一台计算机上完成数据的存储和查询的数据库系统。

分布式数据库:

分布式数据库由位于不同站点的两个或多个文件组成。数据库可以存储在多台计算机上,位于同一个物理位置,或分散在不同的网络上。

方式三:

OLTP数据库:

OLTP ( Online transactional processing)数据库是―种高速分析数据库,专为多个用户执行大量事务而设计。

OLAP数据库:

OLAP (Online analytical processing) 数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系

OLAP数据库:
特性:

1、大量数据的读写,PB级别的存储。

2、多维分析,复杂的聚合函数。

3、窗口函数,自定义UDF(User DefineFucntion)

4、离线/实时分析

数据库架构:

ClickHouse列存储(十一)—— ClickHouse

SQL的执行:

步骤:

1、Parser:词法分析,语法分析,生成AST树(Abstract syntax tree)

2、Analyzer:变量绑定、类型推导、语义检查、安全、权限检查、完整性检查等,为生成计划做准备
例如︰

判断a, b是不是类型正确。

a, b是不是来自表t。

group by字段是否合法,是否存在聚合函数。

3、Optimizer: 为查询生成性能最优的执行计划,进行代价评估

4、Executor: 将执行计划翻译成可执行的物理计划并驱动其执行

存储引擎作用:
1.管理内存数据结构

索引

内存数据

缓存:

Query cache

Data cache

lndex cache

2.管理磁盘数据

磁盘数据的文件格式磁盘数据的增删查改

3.读写算子

数据写入逻辑数据读取逻辑

2、列式存储

行式存储:
列式存储:
列式存储的优点:

ClickHouse列存储(十一)—— ClickHouse

数据压缩:

1、数据压缩可以使读的数据量更少.在IO密集型计算中获得更大的性能优势

2、相同类型压缩效率更高

3、排序之后压缩效率更高

4、可以针对不同类型使用不同的压缩算法

常见压缩算法:

1、LZ4:

(5,4)代表向前5个byte,匹配到的内容长度有4,即"bcde"是一个重复。

重复项越多或者越长,压缩率就会越高。

2、Run-length encoding:

压缩重复的数据

可以再压缩数据上直接计算

3、Delta encoding :

将数据存储为连续数据之间的差异,而不是直接存储数据本身

特定算子也能直接在压缩数据上计算

数据选择:

可以选择特定的列做计算而不是读所有列

对聚合计算友好

如图:

延迟物化:

物化:将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算, Join。

延迟物化:尽可能推迟物化操作的发生

3、ClickHouse存储设计

表定义和结构:
集群架构:
引擎架构:
存储架构:
索引设计:
1、Hash lndex

1.将输入的key通过一个HashFunction映射到一组bucket上

2.每个bucket都包含一个指向一条记录的地址

3.哈希索引在查找的时候只适用于等值比较

2、B-Tree

1.数据写入是有序的,支持增删查改

2.每个节点有多个孩子节点

3.每个节点都按照升序排列key值

4.每个key有两个指向左右孩子节点的引用

-左孩子节点保存的key都小于当前key

-右孩子节点的保存的key都大于当前key

ClickHouse列存储(十一)—— ClickHouse

3、B+Tree

1.所有的数据都存储在叶子节点,非叶子节点只保存key值

2.叶子节点维护到相邻叶子节点的引用

3.可以通过key值做二分查找,也可以通过叶子节点做顺序访问

ClickHouse列存储(十一)—— ClickHouse

4、LSM-tree

Log-structured merge-tree (LSM tree)是一种为大吞吐写入场景而设计的数据结构

-着重优化顺序写入

-主要数据结构

1、SSTables

  1. Key按顺序存储到文件中,称为segment
  2. 包含多个segment
  3. 每个segment写入磁盘后都是不可更改的,新加的数据只能生成新的segment

2、Memtable

-在内存中的数据保存在memtable中,大多数实现都是―颗Binary search tree

-当memtable存储的数据到达一定的阈值的时候,就会按顺序写入到磁盘

LSM-tree的数据查询:
需要从最新的segment开始遍历每个key

也可以为每个segment建一个索引,例如下图:

4、ClickHouse应用场景

1、大宽表存储和查询:
1.大宽表查询

-可以建非常多的列

-可以增加,删除,清空每—列的数据

-查询的时候引擎可以快速选择需要的列

-可以将列涉及到的过滤条件下推到存储层从而加速查询

ClickHouse列存储(十一)—— ClickHouse

2、动态表结构
  • map中的每个key都是一列
  • map中的每一列都可以单独的查询
  • 使用方式同普通列,可以做任何计算

ClickHouse列存储(十一)—— ClickHouse

2、离线数据分析
1.数据导入

-数据可以通过spark生成clickhouse格式的文件

-导入到hdfs上由hive2ch导入工具完成数据导入

-数据直接导入到各个物理节点

2.数据按列导入

保证查询可以及时访问已有数据

可以按需加载需要的列

3、实时数据分析
4、使用memory table减少parts数量

1.数据先缓存在内存中

2.到达—定阈值再写到磁盘

5、复杂类型查询:
1、bitmap索引(构建)
2、bitmap索引(查询)

四、个人总结:

此次学习只要是借ClickHouse存储结构引出整个数据库的概念、原理、设计。终得到以下总结:ClickHouse是标准的列存结构;存储设计是LSM-Tree架构;使用稀疏索引加速查询;每个列都有丰富的压缩算法和索引结构;基于列存设计的高效的数据处理逻辑。文章来源地址https://www.toymoban.com/news/detail-497470.html

到了这里,关于ClickHouse列存储(十一)—— ClickHouse的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python的Requests和BeautifulSoup库来爬取新闻网站的新闻标题、发布时间、内容等信息,并将数据存储到数据库中

    BeautifulSoup是Python的一个HTML/XML解析库,用于从HTML或XML文件中提取数据。结合Python的requests库,可以实现网页爬取和数据提取。 以下是一个简单的使用BeautifulSoup和requests库实现爬虫的示例:   用requests库和BeautifulSoup4库,爬取校园新闻列表的时间、标题、链接、来源。

    2024年02月10日
    浏览(55)
  • ClickHouse(二十一):Clickhouse SQL DDL操作-临时表及视图

      进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情! 👍点赞:赞同优秀创作

    2024年02月12日
    浏览(45)
  • hive重点内容汇总

                这篇文章一方面是帮助我记忆常用函数,如果工作中忘了不用百度,直接翻这篇文章就好。另一方面也想分享给各位,大家一起学习。                   使用格式: from_unixtime(10位时间戳,\\\'想转成的日期格式\\\') 举例: 日期格式写 \\\'年-月-日 时

    2024年02月10日
    浏览(48)
  • 贪心算法重点内容

    4.1 部分背包 按照单位重量的价值排序 4.2 最小生成树 两种算法   4.3 单源最短路径   4.4 哈夫曼树  

    2024年02月15日
    浏览(36)
  • 【C语言】文件操作重点内容梳理

    本文目录 1. 什么是文件 1.1 程序文件 1.2 数据文件 1.3 文件名 2. 文件的打开和关闭 2.1 文件指针 2.2 文件的打开和关闭 3. 文件的顺序读写 3.1 顺序读写函数介绍 4. 文件的随机读写 4.1 fseek 4.2 ftell 4.3 rewind 5. 文本文件和二进制文件 6. 文件读取结束的判定 6.1 被错误使用的 feof  7

    2024年02月14日
    浏览(40)
  • 用Microsoft Access作为DBMS,建立数据库和数据表来实现对一个简易的英汉电子词典进行存储和管理,这个简易电子词典中的内容至少包括:英文单词名、词性、汉语释义

    已完善英语词典词典所有功能,酌情使用 酌情参考 本单元的作业,意在检测学生是否达到以下学习目标: (1)掌握JDBC数据库访问的基本步骤; (2)掌握利用JDBC建立数据库连接的方法; (3)掌握利用JDBC对数据库进行查询的方法; (4)掌握利用JDBC对数据库中的数据进行增、删、]改

    2024年02月04日
    浏览(71)
  • 万应低代码4月重点更新内容速递

    低代码开发能力提升 分布式缓存支持 万应提供了一套分布式的缓存系统,可在多个节点之间共享缓存数据,从而加速数据获取速度,提高应用的性能和效率。包含: 缓存设置节点 :把需要高频访问的数据写入到缓存中,并设置唯一的缓存key标识数据。缓存内容应尽量不超过

    2024年02月11日
    浏览(72)
  • 【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(四)

    BOM(Browser Object Model): 浏览器对象模型 其实就是操作浏览器的一些能力 我们可以操作哪些内容 获取一些浏览器的相关信息(窗口的大小) 操作浏览器进行页面跳转 获取当前浏览器地址栏的信息 操作浏览器的滚动条 浏览器的信息(浏览器的版本) 让浏览器出现一个弹出

    2024年01月18日
    浏览(49)
  • Clickhouse 存储引擎

            这个引擎是在 MergeTree 的基础上,添加了”处理重复数据”的功能,该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。 特点: 1使用ORDERBY排序键作为判断重复的唯一键 2.数据的去重只会在合并的过程中触发 3.以数据分区为单位删除重复数据,不同分

    2024年02月14日
    浏览(74)
  • Clickhouse 数据存储

            数据是以分区目录的形式组织的,每个分区独立分开存储.这种形式,查询数据时,可以有效的跳过无用的数据文件。         分区键的取值,生成分区ID,分区根据ID决定。根据分区键的数据类型不同,分区ID的生成目前有四种规则: (1)不指定分区键 (2)整形 (

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包