【ClickHouse】什么是ClickHouse?CK入门

news2025/2/24 6:02:27

文章目录

  • 一、ClickHouse入门
    • 1、列式存储
    • 2、DBMS的功能
    • 3、多样化引擎
    • 4、高吞吐写入能力
    • 5、数据分区与线程级并行
    • 6、性能对比
    • 7、官网
  • 二、ClickHouse安装
    • 1、准备工作
    • 2、单机安装
  • 三、ClickHouse的数据类型
    • 1、整型
    • 2、浮点型
    • 3、布尔型
    • 4、Decimal型
    • 6、枚举类型
    • 7、时间类型
    • 8、数组

一、ClickHouse入门

ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C++语言编写,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。

关键词:

  • 列式存储
  • 查询
  • C++

1、列式存储

行式、列式指的是数据在磁盘上的组织结构。以下表为例:

在这里插入图片描述

采用行式存储时,数据在磁盘上的组织结构是:

在这里插入图片描述
这种存储形式,好处是当查某个人的所有属性时,可以通过磁盘查找加顺序读取就可以。

SELECT * FROM t_user where id = 1;

但当查找所有人的年龄时,就需要不停的查找,或者全表扫描,且遍历的很多数据都是不需要的。

SELECT age FROM t_user ;

采用列式存储时,数据在磁盘上的组织结构是:
在这里插入图片描述
此时:

SELECT age FROM t_user ;

就很效率,把磁盘上的那一串连续数据读出来就行。但相反的,insert一条数据时,就得计算每个Value的存储地址。

两种存储方式,没有优劣,只有适用场景的问题。

列式存储的好处是:

对于列的聚合,计数,求和等统计操作原因优于行式存储

➢ 由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压缩算法,大大提高了数据的压缩比重。

➢ 由于数据压缩比更好,一方面节省了磁盘空间,另一方面对于 cache 也有了更大的
发挥空间。

2、DBMS的功能

几乎覆盖了标准 SQL 的大部分语法,包括 DDL 和 DML,以及配套的各种函数,用户管理及权限管理,数据的备份与恢复。

3、多样化引擎

ClickHouse 和 MySQL 类似,把表级的存储引擎插件化,根据表的不同需求可以设定不同的存储引擎。目前包括合并树、日志、接口和其他四大类 20 多种引擎。

4、高吞吐写入能力

ClickHouse 采用类 LSM Tree的结构,数据写入后定期在后台 Compaction。

通过类 LSM tree 的结构,ClickHouse 在数据导入时全部是顺序 append 写,写入后数据段不可更改,在后台compaction 时也是多个段 merge sort 后顺序写回磁盘。

顺序写的特性,充分利用了磁盘的吞吐能力,即便在 HDD 上也有着优异的写入性能。

官方公开 benchmark 测试显示能够达到 50MB-200MB/s 的写入吞吐能力,按照每行100Byte 估算,大约相当于 50W-200W 条/s 的写入速度。

5、数据分区与线程级并行

ClickHouse 将数据划分为多个 partition,每个 partition 再进一步划分为多个 index granularity(索引粒度),然后通过多个 CPU核心分别处理其中的一部分来实现并行数据处理。

在这种设计下,单条 Query 就能利用整机所有CPU(很吃CPU)。极致的并行处理能力,极大的降低了查询延时。

所以,ClickHouse 即使对于大量数据的查询也能够化整为零平行处理。但是有一个弊端就是对于单条查询使用多 cpu,就不利于同时并发多条查询。所以对于高 qps(query per second) 的查询业务,ClickHouse 并不是强项。

从这儿可以看出ClickHouse不适合做初始的存储,其适用场景是数据已经处理好的、字段特别多的宽表

6、性能对比

  • 单表查询实验数据

在这里插入图片描述

  • 关联查询实验数据

在这里插入图片描述

ClickHouse 像很多 OLAP 数据库一样,单表查询速度优于关联查询,且ClickHouse的两者差距更为明显。因此,在ClickHouse中尽量避免join(适用场景:宽表)。

7、官网

https://clickhouse.com/

在这里插入图片描述
这里有文档和一个在线Demo

二、ClickHouse安装

1、准备工作

  • 暂时关闭防火墙
systemctl status firewalld
systemctl stop firewalld
  • CentOS取消打开文件数限制
# 查看Linux系统的一些限制
[root@9527 ~] ulimit -a
...
open files   (-n) 1024  # 文件数
max user processes  (-u)127882  # 最大用户进程数(ClickHouse比较吃CPU)
...
# 打开的文件最大数和某个用户最大的进程数和clickHouse相关
# 和ES调这个参数原因相同
sudo vim /etc/security/limits.conf
# 在末尾加入
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

# *即所有用户的所有组,也可对单独某个用户,则*改为user@groupname
# soft即软限制,就是当前的日常状态
# hard即硬限制,就是最大、上限,soft <= hard
# 也可之间用一个横线 - ,代表软硬一起配置了
# nofile即打开文件数,nproc即用户进程数
# 还要改下limits.d目录下文件的内容,因为它会覆盖上面limits.conf的配置
vim /etc/security/limits.d/20-nproc.conf
# 末尾加
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

# 以上配置生效不用重启。退出当前用户后重新登录即可
ulimit -a # 查看更改是否生效
  • 安装相关依赖
sudo yum install -y libtool
sudo yum install -y *unixODBC*
  • 在CentOS取消SELINUX
# S即安全E即增强
# SELINUX是Linux内核级别的一个系统安全防护,关掉是因为它管的太多了

sudo vim /etc/selinux/config
#改为disabled
SELINUX=disabled
# 这个是内核级别的,想生效得重启Linux
# 实在不想重启可以执行下面指令来临时生效
[root@9527 ~]getenforce
Disabled
[root@9527 ~]setenforce 0  # 0、1即开关

最后,如果是集群的话,别忘了将上面的操作在其他机器上同步一份。

2、单机安装

在这里插入图片描述
支持yum安装。再往下翻,选择下载离线安装包:click here

在这里插入图片描述

下载地址:https://packages.clickhouse.com/rpm/stable/

在这里插入图片描述

  • 创建clickhouse目录
mkdir clickhouse
  • 将四个rpm包拖到这个目录下

在这里插入图片描述

  • 在clickhouse目录直接安装*.rpm
sudo rpm -ivh *.rpm
# 中途会提示:
Enter password for default user:
# 即给clickhouse的默认用户default设置密码,回车默认密码为空即可
  • 查看安装情况
rpm -qa|grep -i clickhouse
# 使用rpm包安装或者yum安装,和tar解压tar.gz包的安装不一样,后者可以直接在解压目录下看到conf等目录
# 而rpm包安装后,配置文件对应路径在/etc/clickhouse按Tab
# 而lib目录常在/var/lib/clickhouse按Tab
# 而bin目录则在usr/bin/按Tab或者usr/local/bin/按Tab
# 而log目录则在/var/log/按Tab

在这里插入图片描述

  • 修改配置文件
ls /etc/clickhouse-server
# 该目录下config.xml主要为服务端配置
# 如数据文件路径:<path>/var/lib/clickhouse/</path>
# 还有日志文件路径:<log>/var/log/clickhouse-server/clickhouse-server.log</log>

# users.xml则主要为一些参数设置,如CPU给多少、最大内存的使用量
vim /etc/clickhouse-server/config.xml
# 把 <listen_host>::</listen_host> 的注释打开
# 这样的话才能让 ClickHouse 被除本机以外的服务器访问
  • 重新启动服务
systemctl restart clickhouse-server
# 或者直接
clickhouse status # 查看状态启动
clickhouse start # 启动
  • 关闭开机自启(可选,enable或者disable看你的需求)
 systemctl disable clickhouse-server
  • 使用client连接server
[root@9527 clickhouse]clickhouse-client -m
# -m即回车可以换行,而不是代表开始执行语句
# 此时语句的结束是封号

# 连接其他主机
[root@9527 clickhouse]clickhouse-clinet -h 主机名 -P端口 -u -p

# 还可以后面跟一个查询语句,不进去直接查结果
[root@9527 clickhouse]clickhouse-client --query ""

三、ClickHouse的数据类型

1、整型

固定长度的整型,包括有符号整型或无符号整型。

整型范围(-2^n-1~2^n-1 -1):
Int8 - [-128 : 127]  #  8位,对应Java中的byte
Int16 - [-32768 : 32767]  # 16位,对应Java中的short
Int32 - [-2147483648 : 2147483647]
Int64 - [-9223372036854775808 : 9223372036854775807]

无符号整型范围(0~2^n-1):
UInt8 - [0 : 255]
UInt16 - [0 : 65535]
UInt32 - [0 : 4294967295]
UInt64 - [0 : 18446744073709551615]

使用场景: 个数、数量、也可以存储型 id。

2、浮点型

Float32 - float # 32位,4字节
Float64 – doubl

使用场景:一般数据值比较小,不涉及大量的统计计算,精度要求不高的时候

在这里插入图片描述

3、布尔型

没有单独的类型来存储布尔值。可以使用 UInt8 类型,并将取值限制为 0 或 1。

# 无符号INT
UInt8 - [0 : 255]

4、Decimal型

有符号的浮点数,可在加、减和乘法运算过程中保持精度。有三种声明:

➢ Decimal32(s),相当于 Decimal(9-s,s),有效位数为 1~9
➢ Decimal64(s),相当于 Decimal(18-s,s),有效位数为 1~18
➢ Decimal128(s),相当于 Decimal(38-s,s),有效位数为 1~38

# s即小数位数
举例:
Decimal32(5),即整数+小数一共9位,小数部分5位

使用场景: 一般金额字段、汇率、利率等字段为了保证小数点精度,都使用 Decimal
进行存储。

6、枚举类型

包括 Enum8 和 Enum16 类型。Enum 保存 'string'= integer 的对应关系。

Enum8 用 'String'= Int8 对描述。
Enum16 用 'String'= Int16 对描述。

创建一个表,其中x列是枚举类型

# 列名x
# 类型 Enum8('hello' = 1, 'world' = 2)
CREATE TABLE t_enum
(
 x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;

这个枚举类型保存了两个String和和Int的对应关系。这个 x 列只能存储类型定义中列出的值:‘hello’或’world’

INSERT INTO t_enum 
VALUES ('hello'), ('world'), ('1');

在这里插入图片描述
存入其他的值,则报错。

INSERT INTO t_enum
VALUES ('a');

在这里插入图片描述
想看到String对应的INT,需做转换:

SELECT CAST(x ,'INT8') FROM t_enum;

在这里插入图片描述
使用场景:对一些状态、类型的字段算是一种空间优化,也算是一种数据约束。但是实际使用中往往因为一些数据内容的变化增加一定的维护成本,甚至是数据丢失问题。

7、时间类型

目前 ClickHouse 有三种时间类型

Date 接受年-月-日的字符串比如 ‘2019-12-16’

Datetime 接受年-月-日 时:分:秒的字符串比如 ‘2019-12-16 20:50:10’

Datetime64 接受年-月-日 时:分:秒.亚秒的字符串比如‘2019-12-16 20:50:10.66’

8、数组

Array(T):由 T 类型元素组成的数组。T 可以是任意类型,也可以套一个数组类型。 但不推荐使用多维数组,ClickHouse 对多维数组的支持有限。

  • 创建数组的方式1:使用array函数
# toTypeName(x) 函数,获取当前字段的类型
# array(1, 2) AS x即1、2两个数字放这个数组里,起名x
SELECT array(1, 2) AS x, toTypeName(x) ;

在这里插入图片描述

SELECT array(1,2,'hahhahaha' AS x,toTypeName(x);
# 这种数组里类型不统一的,就会报错
DB::Exception:There is no supertype for types UInt8,String....
  • 创建数组的方式2:使用方括号
SELECT [1, 2] AS x, toTypeName(x);

在这里插入图片描述

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

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

相关文章

好程序员:女生学Java好学吗?女生学Java有什么优势?

小源经常会听到女生咨询适不适合学习Java开发的问题&#xff0c;提出这种问题归根结底还是缺乏性别自信&#xff0c;默认女性比男性弱。实际上这个问题并不存在&#xff0c;男女平等才是正确的思维&#xff0c;当然&#xff0c;也为了解开女生们的心结&#xff0c;这里好程序员…

开发微信公众号本地调试+-+cpolar内网穿透

文章目录 前言1. 配置本地服务器2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道 3. 测试公网访问4. 固定域名4.1 保留一个二级子域名4.2 配置二级子域名 5. 使用固定二级子域名进行微信开发 转载自cpolar内网穿透的文章&#xff1a;微信公众号开发&#xff1a;对接本地开发…

股票?看我用python采集数据制作成交量图表

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境 & 第三方模块: 解释器版本: python 3.8 代码编辑器: pycharm 2021.2 requests: pip install requests 爬虫 pyecharts: pip install pyecharts 数据分析 pandas: pip install pandas 数据分析 基本流…

C++常用的支持中文的GUI库Qt 6之一:下载、安装与简单使用

C常用的支持中文的GUI库Qt 6之一&#xff1a;下载、安装与简单使用 因为Qt发展变化较快&#xff0c;网上许多介绍Qt的下载、安装与使用已过时&#xff0c;初学者常因行不通而受挫&#xff0c;故此发布本文&#xff0c;以Qt 6.2.4开源版在Windows 10安装与使用为例介绍。 C好用…

Kubernetes 之7大CNI 网络插件用法和对比

Kubernetes 它需要网络插件来提供集群内部和集群外部的网络通信。以下是一些常用的 k8s 网络插件&#xff1a; Flannel&#xff1a;Flannel 是最常用的 k8s 网络插件之一&#xff0c;它使用了虚拟网络技术来实现容器之间的通信&#xff0c;支持多种网络后端&#xff0c;如 VXLA…

SpringSecurity权限管理基本概念和整体架构介绍

文章目录 一、权限管理1、认证2、授权3、对权限控制&#xff0c;现有的解决方案 二、SpringSecurity简介1、官方定义2、历史 三、整体架构1、认证AuthenticationManagerAuthenticationSecurityContextHolder 2、授权AccessDecisionManagerAccessDecisionVoterConfigAttribute 一…

SQL注入:sqli第一关详细讲解

一、实验环境&#xff1a; Apache2.4.39 FTP0.9.60 MySQL5.7.26 PHP 5.3.29(注意PHP的版本不应过高&#xff0c;否则会导致sqli安装失败) sqli 二、实验步骤 第一步&#xff1a;在id1后加入一个闭合符号&#xff0c;如果报错&#xff0c;再在后面加上 -- qwe将后面注释掉…

vivado中的FPGA时钟管理单元PLL学习记录

vivado中的FPGA时钟管理单元PLL学习记录 CMT简介一、PLL IP的使用1、ip调用 2、生成的频率限制二、PLL实现原理 三、使用过程中的问题程序注意事项 CMT简介 FPGA中时钟管理模块&#xff08;CMT&#xff09;包括PLL和MMCM&#xff0c;用于将时钟倍频(比如输入时钟25M&#xff0…

第三方实验室云LIS系统

本套云LIS系统基于B/S架构的实验室管理系统&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问。SaaS服务&#xff0c;无需部署&#xff0c;开通账号接口快速入门使用&#xff0c;集齐前处理、检验、报告、质控、统计分析…

测试自动化_Katalon

测试自动化_Katalon 1.概述 ​ Katalon界面的自动化测试工具&#xff0c;简称KS&#xff0c;于2015年推出。是开源的&#xff0c;提供的版本有免费的版本&#xff0c;还有企业版是收费的。如下图。其中的服务台功能应该是持续继承的支持。可试用一个月。 ​ 最初是支持Web UI…

Baumer工业相机堡盟工业相机通过BGAPISDK使用图像回调函数全帧率保存图像 (C#)

Baumer工业相机堡盟工业相机通过BGAPISDK使用图像回调函数全帧率保存图像 &#xff08;C#&#xff09; Baumer工业相机Baumer工业相机全帧率保存的技术背景Baumer工业相机通过BGAPISDK使用相机图像回调函数1.引用合适的类文件2.通过BGAPISDK在相机图像回调函数全帧率保存 Baume…

2023年湖北建筑电工报名需要什么资料 ?报考条件是什么?启程别

2023年湖北建筑电工报名需要什么资料 &#xff1f;报考条件是什么&#xff1f;启程别 建筑电工证&#xff0c;适合在建筑工地上、建筑公司里面使用&#xff0c;和应急管理局的电工证是不同的&#xff01;建筑电工证也称之为建筑特操&#xff0c;统称建筑施工特种作业操作资格证…

如何成为ITSMS、ISMS审核员

一、管理体系审核员的注册领域 管理体系审核员包括质量管理体系&#xff08;QMS&#xff09;、环境管理体系&#xff08;EMS&#xff09;、职业健康安全管理体系&#xff08;OHSMS&#xff09;、食品安全管理体系&#xff08;FSMS&#xff09;、危害分析与关键控制点&#xff0…

Scala学习(六)---apply方法和单例对象

文章目录 1.Apply方法2.单例模式 1.Apply方法 Scala中实例化一个类&#xff0c;可以不用new &#xff0c; 其原因 其实就是 apply 方法 apply方法的调用约定&#xff1a; 用括号传递给类实例或者单例对象名一个或者多个对象的时候 scala会在对应的类或者对象中查找apply方法 且…

TortoiseSvn和TortoiseGit的安装(超详细带汉化)

前言 TortoiseSvn和TortoiseGit都是针对代码进行版本管理的工具&#xff0c;又俗称小乌龟&#xff0c;简洁而可视化的操作界面&#xff0c;免去繁琐的命令行输入。只需要记住常用的几个操作步骤就能快速上手。工欲善其事必先利其器&#xff0c;我一向奉行的就是复杂的问题简单化…

Promise面试题

Promise面试题&#xff0c;带你搞懂同步异步执行顺序 前置知识面试题面试题一面试题二面试题三面试题四 分析面试题一分析面试题二分析面试题三分析面试题四分析 前置知识 Promise中的then方法 then&#xff1a;指定用于得到成功value的成功回调和用于得到失败reason的失败回调…

openldap2.4版本管理员文档中文翻译版

OpenLDAP2.4管理员指南 文章目录 1.OpenLDAP介绍2.快速开始指南1.获得软件2.解压压缩包3.阅读文档4.运行configure5.编译软件6.测试编译结果7.安装软件8.编辑配置文件9.导入数据库配置10.启动slapd11.添加初始条目到目录中12.检测添加结果 3.大图片-配置选择1.本地目录服务2.带…

抓取微信小程序源码教程,扒微信小程序文件等

前言&#xff1a; 想成为一名微信小程序的开发者&#xff0c;前端思路的学习和安全意识是非常有必要的&#xff0c;故务必掌握小程序反编译技能。这里用到了2个工具《包解密》与《反编译》&#xff08;非原创&#xff0c;均来自网上的大佬&#xff09;&#xff0c;特别适合新手…

5.23黄金是否会继续下跌?多单被套怎么办?

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周二&#xff08;5月23日&#xff09;亚市盘中&#xff0c;现货黄金小幅走弱&#xff0c;一度刷新两日低点至1960美元/盎司&#xff0c;美国明尼亚波利斯联储主席卡…

redis的主从复制、哨兵、集群

主从复制&#xff1a; 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 原理&#xff1a; 主从关系确定…