大数据系列——什么是ClickHouse?ClickHouse有什么用途?

news2025/1/11 19:48:46

目录

一、什么是ClickHouse

二、ClickHouse有什么用途

三、ClickHouse的不足

四、适用场景

五、ClickHouse特点

六、ClickHouse VS MySQL

七、类SQL 语句 

八、核心概念


一、什么是ClickHouse

  • clickHouse是俄罗斯的 Yandex 公司于 2016 年开源的列式存储数据库,使用 C++ 语言编写;

  • 一款面向 OLAP 的数据库
  • ClickHouse支持类SQL语言,提供了传统关系型数据的便利

二、ClickHouse有什么用途

专门用于 OLAP(联机分析处理),其性能惊人;

什么是 OLAP? 联机分析处理,又可以称之为多维分析处理。它指的是通过多种不同的维度审视数据,进行深层次分析。

三、ClickHouse的不足

高性能面向 OLAP 的数据库,不擅长的方面:

  • 不支持事务
  • 不擅长根据主键按行粒度进行查询(虽然支持),所以不应该把 ClickHouse 当做键值对数据库使用
  • 不擅长按行删除数据(虽然支持)

对于 OLAP 数据库而言,上述这些能力不是重点,只能说这是为了极致的查询性能所做的权衡。

四、适用场景

  • 绝大多数请求都是读取访问权限。
  • 数据以相当大的批次(> 1000行)更新,而不是单行更新; 或者它根本没有更新。
  • 数据已添加到数据库,但未进行修改。
  • 读取数据时,会从数据库中提取出大量的行,但只用到一小部分列 列式存储
  • 数据一致性要求较低

五、ClickHouse特点

  • 完备的DBMS功能
  • 列式存储和数据压缩

    列式存储,在扫描指定列时,不用按行组织其他非指定列的数据,避免多余的数据扫描。

    数据压缩,按照一定步长对数据进行匹配扫描,当发现重复部分的时候就进行编码转换,降低IO和存储的压力。

  • 向量化执行引擎

    简单理解就是消除程序循环的优化,堆机器加快速度,数据级并行。

  • 关系模型与SQL查询

        其他数据库迁移到CK的成本很低

  • 多样化的表引擎

    CK的最初架构是基于MySQL实现的,表引擎设计就与MySQL类似,存储引擎作为一层独立的接口。种类繁多,根据业务场景自行选择

  • 多线程与分布式

        多线程处理就是通过线程级并行的方式实现了性能的提升。

        预先将数据分布到各台服务器,将数据的计算查询直接下推到数据所在的服务器,因为计算移动比数据移动更加划算。

  • 多主架构

Multi-Master多主架构,集群中的每个节点角色对等,天然规避单点故障问题,适用于多数据中心、异地多活场景

  • 在线查询,CK又快又免费

与其他分析型数据库对比,存在许多相似之处,例如都支持海量查询场景、支持列式存储、数据分片、计算下推等特效,说明CK在设计上吸取了各路优点。

价格方面:其他开源系统慢,商用系统贵。CK又快又免费。

  • 数据分片和分布式查询

        CK有本地表(Local Table)和分布式表(Distributed Table),一张本地表等同于一份数据的分片,而分布式表不存储数据,只是本地表的访问代理。

        分布式表类似分库中间件,代理访问多个数据分片,实现分布式查询。

六、ClickHouse VS MySQL

  • MySQL单条SQL是单线程的,只能跑满一个core,ClickHouse相反,有多少CPU,吃多少资源,所以飞快;
  • ClickHouse不支持事务,不存在隔离级别。ClickHouse的定位是分析性数据库,而不是严格的关系型数据库。
  • IO方面,MySQL是行存储,ClickHouse是列存储,后者在count()这类操作天然有优势,同时,在IO方面,MySQL需要大量随机IO,ClickHouse基本是顺序IO。

七、类SQL 语句 

1、 客户端登陆命令 : clickhouse-client -u user --password 123456 --port 9000


2、利用system数据库中的parts_columns表进行查询。

select distinct column from system.parts_columns 
where database='表所属的数据库名称' and table='所需要查询的表名'

例如:
select distinct column from system.parts_columns where database='test' and table='table1'


3、利用system数据库中的columns表进行查询。

select distinct name from system.columns 
where database='表所属的数据库名称' and table='所需要查询的表名'

例如:
select distinct name from system.columns where database='test' and table='table1'
ps :–推荐使用第二种方式来查询表的所有列名。

4、

 alter table 表名称 ON 集群名称 add column 列名称;        --添加列
 alter table 表名称 ON 集群名称 drop column 列名称;       --删除列
 alter table 表名称 ON 集群名称 modify column 列名称 数据类型;   --修改数据类型
 alter table 表名称 ON 集群名称 COMMENT COLUMN 列名称 注解;     --修改注释

5、建表
CREATE TABLE test.table1(
    `id` String COMMENT '主键',
    `chinese_name` Nullable(String) COMMENT '中文名称',
    `english_name` Nullable(String) COMMENT '英文名称',
    `update_time` Nullable(DATETIME) COMMENT '更新时间',
    `create_time` Nullable(DATETIME) COMMENT '创建时间'
)
ENGINE = MergeTree
order by id

6、删除表
//删除本地表
DROP table ti.java4al_base on cluster ck;
//删除分布式表
DROP table ti.java4al_base_all on cluster ck;

7、删除数据: 
方法1: 删除分区 alter table  name drop partition 分区;
方法:alter 语句 : alter table  name delete where 
ALTER TABLE <table_name> UPDATE col1 = expr1, ... WHERE <filter>
方法:
索引列不能进行更新


8、查询表容量及压缩
select
    table as "表名",
    sum(rows) as "总行数",
    formatReadableSize(sum(data_uncompressed_bytes)) as "原始大小",
    formatReadableSize(sum(data_compressed_bytes)) as "压缩大小",
    round(sum(data_compressed_bytes) / sum(data_uncompressed_bytes) * 100, 0) "压缩率"
from system.parts
    group by table;    

八、核心概念

几个概念:

1、Column与Field:一列中的某一行(具体数值)用Field对象表示;一列数据用一个Column对象表现

2、DataType : 负责数据的序列化和反序列化相关工作,但是并不直接负责数据的读取,而是转由Column或Field对象获取。在DataType的实现类中,聚合了相应数据类型的Column对象和Field对象。

3、Block对象CK的数据操作是面向Block对象进行的,并且是采用流的形式。Block=数据对象(Column/Feild) + DataType + 列名称字符串。

4、Table:

在数据表的底层设计中并没有所谓的Table对象,它直接使用 IStorage接口指代数据表

表引擎是ClickHouse的一个显著特性, 不同的表引擎由不同的子类实现,例如IStorageSystemOneBlock (系统表)、StorageMergeTree(合并树表引擎)和 StorageTinyLog(日志表引擎)等。

5、Parser和Interpreter

Parser分析器负责创建AST对象,而Interpreter解释器则负责解释AST,并进一步创建查询的执行管道。它们与IStorage一起,串联起了整个数据查询的过程。

Parser分析器可以将一条SQL语句以递归下降的方法解析成 AST语法树的形式

不同的SQL语句,会经由不同的Parser实现类解析。

6、Functions与Aggregate Functions

  • 普通函数,例如四则运算、日前转换、网址提取函数、IP地址脱敏函数。没有状态,函数效果作用于每行数据之上。在函数具体执行过程中,采用向量化的方式直接作用于一整列数据,而不是一行一行计算。
  • 聚合函数,有状态的,例如COUNT聚合函数,AggregateFunctionCount的状态用整型UInt64记录。聚合函数 的状态支持序列化与反序列化,所以能够在分布式节点之间进行传 输,以实现增量计算。

7、Cluster与Replication

集群由分片(Shard)组成,分片由副本(Replica)组成。

CK的1个节点只能拥有一个分片,如果要实现1分片、1副本,至少需要部署两个服务节点。

分片是逻辑概念,物理承载由副本承担

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

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

相关文章

win11系统用户名称为中文导致文件夹出现繁体字文件夹、系统路径配置错误修改教程(博主亲测,基于win11,系统文件保留)

写在前面&#xff1a;很多人在拿到新电脑激活那会&#xff0c;命名就是简单的中文&#xff0c;但是中文命名电脑系统名称&#xff0c;会导致系统用户文件夹自动命名为中文&#xff0c;在后期使用中会导致c盘系统用户文件夹下面出现不知名繁体字文件夹&#xff0c;甚至有的朋友会…

终难逃一阳

阳了&#xff0c;抗原试剂显示我阳了。每天都带口罩的我还是未能逃过此劫。真是覆巢之下&#xff0c;焉有完卵。 ​ 1.背景 12月初国家逐步放开防疫&#xff0c;随之而来的就是奥秘克戎肆虐全国。身边同事和朋友一个接着一个倒下&#xff0c;朋友圈里更是哀嚎一片。好在专家…

《CSAPP》笔记——链接、异常控制流、虚拟内存

文章目录传送门链接基础链接器的意义编译器驱动程序静态链接ELF目标文件格式可重定位目标文件符号和符号表链接过程符号解析解析规则静态链接库带有静态链接库的解析过程重定位重定位条目重定位节重定位符号引用重定位相对引用重定位绝对引用加载可执行目标文件动态链接共享库库…

Kafka 消费者组开发

Kafka consumer - 消费者组 上一篇文章学习到kafka消费者、消费者组之间处理消息的差异&#xff0c;总结起来就是&#xff1a; 同一个消费组的不同消费实例 共同消费topiic的消息, 一个消息只会消费一次&#xff1b; 也叫做集群消费同一个消息被不同的消费组同时消费&#xf…

机器学习基石1(ML基本概念和VC dimension)

文章目录一、什么是机器学习?二、什么时候可以使用机器学习?三、感知机perceptron四、机器学习的输入形式五、机器真的可以学习吗&#xff1f;六、vc dimension一、什么是机器学习? 其实第一个问题和第二个问题是穿插到一块儿回答的&#xff0c;首先机器学习要解决的是常规的…

RedisTemplate操作redis

目录 Redis Repositories方式 a、启用 Repository 功能 b、注解需要缓存的实体 c、创建一个 Repository 接口 d、测试类中测试 Redis Repositories方式 Spring Data Redis 从 1.7 开始提供 Redis Repositories &#xff0c;可以无缝的转换并存储 domain objects&#xff0…

TOPSIS法(熵权法)(模型+MATLAB代码)

TOPSIS可翻译为逼近理想解排序法&#xff0c;国内简称为优劣解距离法 TOPSIS法是一种常用的综合评价方法&#xff0c;其能充分利用原始数据的信息&#xff0c;其结果能精确地反映各评价方案之间的距离 一、模型介绍 极大型指标&#xff08;效益型指标&#xff09; &#xff…

OR-Tools工具介绍以及实战(从入门到超神Python版)

目录前言0、安装一、什么是优化问题&#xff1f;1-1、优化问题介绍1-2、举例1-2-1、导入所需要的库1-2-2、声明求解器1-2-3、创建变量1-2-4、定义约束条件1-2-5、定义目标函数1-2-6、调用求解器&#xff0c;并且显示结果。二、python有关于各种优化问题示例2-1、简单的线性编程…

AlexNet 深度学习奠基作之一(1)

2012年发表 imagenet 一百二十万的图片 1000个种类 cv 对于刷榜 是非常在意的 AlexNet 有六千万的参数&#xff0c;和65000的神经元 为了减少过拟合 我们使用了dropout 很work 很有效 而且 这篇文章没有conclusion 只有 讨论 当他发现 从5个层里面去掉一个 performence会降…

ubuntu设置core文件

长久不写代码&#xff0c;突然发现ubuntu当前运行目录下没有生成core文件&#xff0c;记录如下&#xff0c;避免下次重找。 1、首先开启core文件权限&#xff1a; ulimit -c 如果结果为0&#xff0c; 则表示没有开启&#xff0c;需要开启&#xff0c;如下&#xff1a; 通过u…

【Linux】Linux系统SSH客户端断开后保持进程继续运行配置方法;Python等脚本在终端后台运行的方法

0. 概述 在Linux系统中&#xff0c;通常我们在执行一些运行时间比较长的任务时&#xff0c;必须等待执行完毕才能断开SSH连接或关闭客户端软件&#xff0c;否则可能会导致执行中断。本文介绍几种保障程序在用户退出登录后持续运行的方法。 一、方法 1. 使用nohup执行 nohup…

网络编程 事件选择模型

目录 1.概念分析 2.事件选择代码逻辑 1.WSACreateEvent函数 2.WSACloseEvent函数 3.WSAEventSelect函数 4.WSAWaitForMultipleEvents()函数 5.WSAEnumNetworkEvents函数 事件分类 3.##模型代码样例 1.概念分析 本质上是操作系统处理用户行为&#xff0c;详细如下 事件选…

目标检测之YOLOv5算法分析

YOLOv5共有5个版本的网络模型及其权重文件&#xff0c;即&#xff08;n,s,m,l,x&#xff09;。 &#xff08;下图来自github上yolov5官方开源项目的性能截图&#xff09; 其中n,s,m,l,x网络模型结构如出一辙&#xff0c;差异在参数上。另外的n6,s6,m6,l6,x6模型是对于更大分辨…

人生黄金十年,你有考虑来社科院与杜兰大学金融管理硕士项目汲取能量吗

在人生长河中&#xff0c;你觉得黄金的十年是哪个阶段呢&#xff1f;在一篇文章中看到人生最宝贵的十年&#xff0c;就是30岁到40岁这十年&#xff0c;一切都未确定&#xff0c;一切都还有机会&#xff0c;这个年龄段&#xff0c;寸阴寸金&#xff0c;流金年华&#xff0c;应该…

FFmpeg学习笔记--视频传输的基本概念

目录 1--容器&#xff08;container&#xff09;和文件&#xff08;file&#xff09; 2--媒体流&#xff08;stream&#xff09; 3--数据帧&#xff08;frame&#xff09;和数据包&#xff08;packet&#xff09;&#xff1a; 4--编解码器&#xff08;Codec&#xff09; 5…

7万人随访发现,每周高强度运动15分钟,死亡风险降低24%

*仅供医学专业人士阅读参考我们已经知道&#xff0c;无论是日常规律运动&#xff0c;还是周末集中一两天运动&#xff0c;只要每周能完成至少75-150分钟的高强度有氧运动&#xff0c;都可以降低全因死亡率和特定原因死亡率[1]。每周300-600分钟中强度运动或150-300分钟高强度运…

RocketMQ原理篇

文章目录broker与NameServerMessageQueue与Topic的关系生产者、消费者写入读取 消息CommitLog生产者消费者组broker与NameServer 基于 Dledger 实现 RocketMQ 高可用自动切换 broker 会每隔 30 秒向 NameServer 发送一个的心跳 &#xff0c;NameServer 收到一个心跳 会更新对…

kafka再浅析

在日常开发中&#xff0c;经常使用kafka&#xff0c;对它是既熟悉又陌生&#xff0c;下面继续聊&#xff0c;继续总结。 1、消息中间件 分布式消息是一种通信机制&#xff0c;和RPC、HTTP不一样&#xff0c;消息中间件采用分布式中间代理的方式进行通信。采用消息中间件后&…

MarkDown语法(自用)

目录结构展示 tree -a 显示所有tree -d 只显示文档夹tree -L n 显示项目的层级&#xff0c;n表示层级数&#xff0c;比如想要显示项目三层结构&#xff0c;可以用tree -l 3&#xff1b;tree -I pattern 用于过滤不想要显示的文档或者文档夹。比如你想要过滤项目中的 node_modu…

Linux之(17)系统服务

Linux之(17)系统服务 Author&#xff1a;onceday Date&#xff1a;2022年12月24日 漫漫长路&#xff0c;有多少人对你笑过… 参考文档&#xff1a; Systemd 入门教程&#xff1a;命令篇 - 阮一峰的网络日志 (ruanyifeng.com)可能是史上最全面易懂的 Systemd 服务管理教程&a…