ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【大数据知识】ClickHouse入门 [打印本页]

作者: 小秦哥    时间: 2024-11-30 14:23
标题: 【大数据知识】ClickHouse入门
概述

ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),以下是对其的详细介绍:
一、主要应用场景

ClickHouse主要用于在线分析处理查询(OLAP),能够利用SQL查询实时生成分析数据陈诉。与联机事件处理(OLTP)不同,OLAP专注于分析处理,主要是对数据的查询。
二、技术特点

三、性能体现

ClickHouse的工作速度比传统方法快100~1000倍,性能超过了当前市场上可比的面向列的数据库管理系统。每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。ClickHouse会充分利用所有可用的硬件,以尽大概快地处理每个查询。单个查询的峰值处理性能超过每秒2TB(解压缩后,仅利用的列)。
四、限制与不足

五、利用建议

综上所述,ClickHouse是一款功能强盛、性能卓越的列式存储数据库,特殊适用于在线分析处理查询场景。然而,它也存在一些限制和不足,在利用时必要充分考虑这些因素。
分布式架构

ClickHouse分布式架构是一种高效的数据处理架构,特殊适用于大数据量(TB级别)和高并发查询的场景。以下是对ClickHouse分布式架构的详细剖析:
一、架构特点

二、焦点组件

三、数据组织方式

四、分布式查询原理

五、上风与局限性

综上所述,ClickHouse分布式架构以其高性能、实时性和可扩展性在大数据处理范畴显现出了强盛的上风。然而,在复杂的SQL优化和数据再均衡方面仍存在一定的局限性。因此,在选择和利用ClickHouse时,必要根据具体的应用场景和需求进行衡量和考虑。
焦点架构

ClickHouse的焦点架构主要分为两个部分:ClickHouse执行过程架构和ClickHouse数据存储架构。以下是对这两个部分的详细剖析:
一、ClickHouse执行过程架构

二、ClickHouse数据存储架构

综上所述,ClickHouse的焦点架构通过Parser分析器、Interpreter表明器、IStorage接口、IBlockInputStream和IBlockOutputStream等组件实现了SQL语句的剖析、执行和数据存储等功能。同时,通过Column对象、Field对象、IDataType和Block对象等数据布局实现了数据的列式存储和高效处理。
为什么速度这么快

存储层:并发插入

在 ClickHouse 中,每个表由多个“表部分”构成。每当用户向表中插入数据(INSERT 语句)时,都会创建一个部分。查询始终针对查询开始时存在的所有表部分执行。
为了避免积聚过多的部分,ClickHouse 在配景运行归并操作,将多个(小)部分连续组合成一个更大的部分。
这种方法有几个长处:一方面,单个插入是“当地”的,因为它们不必要更新全局数据布局,即每个表的数据布局。因此,多个同时插入不必要相互同步或与现有表数据同步,因此插入可以几乎以磁盘 I/O 的速度执行。
存储层:并发插入和选择查询隔离

另一方面,归并部分是用户不可见的配景操作,即不会影响并发的 SELECT 查询。事实上,这种架构非常有效地隔离了插入和选择,以至于许多其他数据库都采用了它。
存储层:归并时间可控

与其他数据库不同,ClickHouse 还能够在归并操作期间执行其他数据转换。比方:

这些转换的目的是将工作(计算)从用户查询运行时间转移到归并时间。这很紧张,原因有二:
一方面,如果用户可以利用“转换后的”数据(比方预聚合数据),查询速度大概会变得更快,偶然会提高 1000 倍甚至更多。
另一方面,归并的大部分运行时间都花在加载输入部分和保存输出部分上。在归并期间转换数据的额外工作通常不会对归并的运行时间产生太大影响。所有这些魔法都是完全透明的,不会影响查询的结果(除了它们的性能)。
最先辈的查询处理

最后,ClickHouse 利用矢量化查询处理层,尽大概并行化查询执行,以利用所有资源来实现最高的速度和服从。
“矢量化”意味着查询筹划运算符会批量通报中心结果行,而不是单行通报。这样可以更好地利用 CPU 缓存,并允许运算符应用 SIMD 指令一次处理多个值。事实上,许多运算符都有多个版本-每个 SIMD 指令集生成一个版本。ClickHouse 将根据其运行的硬件的功能自动选择最新和最快的版本。
现代系统有数十个 CPU 焦点。为了利用所有焦点,ClickHouse 将查询筹划睁开为多个通道,通常每个焦点一个。每个通道处理不相交的表数据范围。这样,数据库的性能就会随着可用焦点的数量“垂直”扩展。
对细节的一丝不苟

“ClickHouse 是一个怪异的系统 - 你们有 20 个版本的哈希表。你们拥有所有这些令人惊叹的东西,而大多数系统只有一个哈希表 … ClickHouse 拥有如此惊人的性能,因为它拥有所有这些专门的组件” CMU 数据库教授 Andy Pavlo
ClickHouse 的与众不同之处在于它对底层优化的细致关注。构建一个简单可用的数据库是一回事,但将其筹划为跨各种查询范例、数据布局、分布和索引配置提供速度才是“怪胎系统”艺术的闪光点。
哈希表。我们以哈希表为例。哈希表是毗连和聚合利用的中央数据布局。作为步伐员,必要考虑以下筹划决策:

ClickHouse 中的哈希表实现根据查询和数据的具体情况从30 多个预编译哈希表变体中选择一种。
算法。算法也是如此。比方,在排序中,您大概会考虑:


上风是什么?

ClickHouse的上风主要体现在以下几个方面:
一、高性能


二、列式存储


三、分布式架构


四、丰富的功能和机动的数据模子


五、优化查询引擎


六、易于利用和维护


七、开源与社区支持


综上所述,ClickHouse在大数据分析和处理范畴具有显著的上风,特殊适用于对查询性能要求高、数据量大且以分析为主的应用场景。
缺点是什么?

ClickHouse的缺点主要包括以下几个方面:
一、事件支持不足

ClickHouse不支持ACID(原子性、划一性、隔离性、持久性)事件特性,这意味着在数据划一性、完备性保证方面存在局限。因此,在必要强划一性保证的金融交易、在线事件处理等场景中,ClickHouse大概不是最佳选择。
二、修改和删除操作受限

ClickHouse筹划之初就倾向于批量处理和读操作,对于高频率的修改或删除已存在数据的能力较弱,仅支持批量删除或修改。这在一定程度上限制了它在必要频仍更新或删除数据的业务场景中的应用,同时也不符合GDPR(通用数据保护条例)对于数据修改和删除的机动性要求。
三、行级查询性能不佳

由于ClickHouse采用列式存储,其索引筹划和优化更多针对列级查询,而非行级查询。因此,在根据主键进行行粒度查询时,性能大概不如行式数据库。这使得在必要频仍根据主键检索单行数据的业务场景中,ClickHouse大概不是最优选择。
四、高并发性能受限

在高并发查询场景下,ClickHouse的性能大概会受到较大影响。这是因为ClickHouse在查询时会充分利用服务器资源,但在高并发情况下,资源竞争和调理开销会增加。因此,在必要处理大量并发查询的互联网业务、实时分析系统等场景中,ClickHouse的性能大概无法满意需求。
五、数据范例支持有限

ClickHouse不支持所有数据范例,如JSON和XML等复杂数据范例。这限制了其在处理多样化数据方面的机动性。在必要存储和查询复杂数据布局的业务场景中,ClickHouse大概无法直接支持,必要进行数据转换或预处理。
综上所述,ClickHouse在事件支持、修改和删除操作、行级查询性能、高并发性能以及数据范例支持方面存在一定的缺点。因此,在选择数据库系统时,必要根据具体业务需求进行衡量和选择。
常见SQL语句

ClickHouse是一个用于在线分析处理(OLAP)的列式数据库管理系统(DBMS),其查询语法类似于SQL,但也具有一些独特的特点和函数。以下是一些ClickHouse语句的举例和说明:
一、数据库操作

  1. CREATE DATABASE IF NOT EXISTS my_database;
复制代码
此语句用于创建一个名为my_database的数据库,如果该数据库已存在,则不会重复创建。
  1. DROP DATABASE IF EXISTS my_database;
复制代码
此语句用于删除名为my_database的数据库,如果该数据库存在,则会被删除。
二、表操作

  1. CREATE TABLE IF NOT EXISTS my_table (
  2.     id UInt64,
  3.     name String,
  4.     age UInt8
  5. ) ENGINE = MergeTree() ORDER BY (id);
复制代码
此语句用于创建一个名为my_table的表,并指定了表的列和数据范例,以及利用MergeTree引擎和按id排序。
  1. DROP TABLE IF EXISTS my_table;
复制代码
此语句用于删除名为my_table的表,如果该表存在,则会被删除。
三、数据操作

  1. INSERT INTO my_table (id, name, age) VALUES (1, 'Alice', 30), (2, 'Bob', 25);
复制代码
此语句用于向my_table表中插入两行数据。
  1. ALTER TABLE my_table UPDATE age = 35 WHERE name = 'Alice';
复制代码
此语句用于将my_table表中name为Alice的记录的age修改为35。
  1. ALTER TABLE my_table DELETE WHERE name = 'Bob';
复制代码
此语句用于删除my_table表中name为Bob的记录。
四、高级查询

  1. SELECT t1.id, t1.name, t2.age
  2. FROM my_table1 AS t1
  3. JOIN my_table2 AS t2 ON t1.id = t2.id;
复制代码
此语句用于将my_table1和my_table2两个表按id列进行毗连,并返回毗连后的结果。
  1. SELECT name FROM my_table1 WHERE id IN (SELECT id FROM my_table2 WHERE age > 30);
复制代码
此语句用于查询my_table1表中id在my_table2表中age大于30的记录所对应的name。
  1. SELECT id, name, age, COUNT(*) OVER w
  2. FROM my_table
  3. WINDOW w AS (PARTITION BY age);
复制代码
此语句利用了窗口函数COUNT(*)来计算每个age分组中的行数,并返回每个记录对应的行数。
以上是ClickHouse的一些常用语句和示例,希望能资助你更好地明白和利用ClickHouse数据库。
相关文献

【数据库知识】行式存储与列式存储

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4