clickhouse简介

news2024/12/23 10:50:13

文章目录

    • 1:简介
      • 1.1:CH是什么?
      • 1.2:CH优势
      • 1.3:架构设计
    • 2:CH接口
    • 3:CH引擎
      • 1:数据库引擎
        • 3.1.1:mysql引擎
      • 2:表引擎
        • 3.2.1:MergeTree
        • 3.2.2:集成引擎
          • 1:mysql引擎
          • 2:Hive
          • 2:kafka
    • 4:数据类型
    • 5:性能优化

ClickHouse官网
CH存储原理

1:简介

clickhouse以下简称CH

1.1:CH是什么?

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
常见的行式数据库系统有:MySQL、Postgres和MS SQL Server
常见的行式数据库系统有:ClickHouse、hbase
在这里插入图片描述

存储方式:行式数据库中同行数据被同一个物理存储,列式数据库是不同的列被不同物理存储。

适合场景:列式数据库适合OLAP;行式数据库更适合OLTP事务场景中
关于OLAP和OLTP可以看

1.2:CH优势

1:真正的列式数据库,更精确的数据类型如(Int类型:Int8、 Int16、 Int32、 Int64、 Int128、 Int256)带来更高的存储空间利用和更高的解压缩速度,更好的cpu使用,更高的吞吐量
2:数据存储在磁盘上,低成本
3:分布式,更好的利用每台服务器和集群的性能。
4:索引
按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。
5:适合在线查询
在线查询意味着在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。
6:支持sql
7:向量化执行引擎SIMD(在cpu计算时即用单条指令操作多条数据, CPU 寄存器层面实现数据的并行计算)

1.3:架构设计

Hadoop生态系统技术都采用了Master-Slave主从架构,而ClickHouse则采用Multi-Master多主架构,集群中每个节点角色对等,客户端访问任意一个节点都能达到相同的效果。

ClickHouse的集群由分片 ( Shard ) 组成,而每个分片又通过副本 ( Replica ) 组成
分片: 依赖集群,每个集群由1个或多个分片组成,每个分片对应ClickHouse的1台服务器节点,分片的数量取决于节点数量。
副本(Replica) 为了在异常情况下保证数据的安全性和服务的高可用性,ClickHouse提供了副本机制,将单台服务器的数据冗余存储在2台或多台服务器上。

1、本地表(Local Table)和分布式表(Distribute Table)

  • 一张本地表相当于一份数据分片
  • 分布式表本身不存储数据,它是本地表的访问代理,借助分布式表,能够代理访问多个数据分片,从而实现分布式查询,分布式表只是将数据分散存放了,相当于进行了负载均衡和一定的容错
  • 分布式缺点:存在单点问题,分片故障数据丢失

2、单机表和复制表
单机表:数据只会存储在当前服务器上,不会被复制到其他服务器,即只有一个副本。
复制表:ClickHouse依靠ReplicatedMergeTree引擎族与ZooKeeper实现了复制表机制,来实现CH的高可用,数据被复制到多个服务器上利用副本进行存储。

在创建表时可以通过指定引擎选择该表是否高可用,每张表的分片与副本都是互相独立的。生产上一般都是复制表。

3、CH整体架构
在这里插入图片描述

2:CH接口

提供多种接口用来登录访问CH

3:CH引擎

1:数据库引擎

数据库引擎允许您处理数据表。

默认情况下,ClickHouse使用Atomic数据库引擎

  CREATE DATABASE test[ ENGINE = Atomic];

3.1.1:mysql引擎

MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中(数据实际还在mysql中),并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换

但您无法对其执行以下操作:

  • RENAME
    CREATE TABLE
    ALTER

使用示例:创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

2:表引擎

表引擎(即表的类型)决定了:

  • 1.数据的存储方式和位置,写到哪里以及从哪里读取数据
    2.支持哪些查询以及如何支持。
    3.并发数据访问。
    4.索引的使用(如果存在)。
    5.是否可以执行多线程请求。
    6.数据复制参数,是否可以存储数据副本。
    7.分布式引擎

引擎有MergeTree系列,log系列,集成引擎(kafka,mysql,jdbc等)

  • 目前只有MergeTree、Merge和Distributed这三类表引擎支持 alter 操作。
  • 目前只有MergeTree系列 的表引擎支持数据分区,只有 MergeTree 系列里的表可支持副本:

3.2.1:MergeTree

lickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎

主要特点:

1、存储的数据按主键排序。

2、这使得您能够创建一个小型的稀疏索引来加快数据检索。

3、如果指定了 分区键 的话,可以使用分区。

4、在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。

5、支持数据副本。ReplicatedMergeTree 系列的表提供了数据副本功能。更多信息,请参阅 数据副本 一节。

6、支持数据采样。需要的话,您可以给表设置一个采样方法。

创建表示例

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
    INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
    INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]

比如,toYYYYMM(EventDate) 是按月分区

ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) 
ORDER BY (CounterID, EventDate, intHash32(UserID)) 
SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192

存储结构
在这里插入图片描述
分区目录:partition
余下各类数据文件(primary.idx、 [Column].mrk、[Column].bin等)都是以分区目录的形式被组织存放的,属于相同分区的数据,最终会被合并到同一个分区目录,而不同分区的数据,永远不会被合并在一起。

校验文件:checksums.txt
使用二进制格式存储。它保存了余下各类文件(primary.idx、count.txt等)的size大小及size的哈希值,用于快速校验文件的完整性和正确性。

列信息文件:columns.txt
使用明文格式存储。用于保存此数据分区下的列字段信息。

3.2.2:集成引擎

集成引擎支持hive,hdfs,mysql,kkafka等多种数据管理引擎,此处仅列举几个

1:mysql引擎

MySQL 引擎可以对存储在远程 MySQL 服务器上的数据执行 SELECT 查询。

2:Hive

Hive引擎允许对HDFS Hive表执行 SELECT 查询
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [ALIAS expr1],
name2 [type2] [ALIAS expr2],

) ENGINE = Hive(‘thrift://host:port’, ‘database’, ‘table’);
PARTITION BY expr

2:kafka

CREATE TABLE queue (
timestamp UInt64,
level String,
message String
) ENGINE = Kafka(‘localhost:9092’, ‘topic’, ‘group1’, ‘JSONEachRow’);

4:数据类型

Int类型:Int8、 Int16、 Int32、 Int64、 Int128、 Int256
时间类型:Date32、DateTime64、Date
iP:IPv4、IPv6
小数:Float32、Float64、Decimal32、Decimal64、Decimal128
boolean:
字符串:String、FixedString、UUID
特殊类型:数组Array、枚举Enum8、Enum16、元组tuple(T)、嵌套Nested、位置坐标Point、Ring、Polygon、MultiPolygon

5:性能优化

从跳数索引,主键稀疏索引进行优化,也可以创联合索引。
跳数索引是建立在主键外的索引列,用于提升查询where后有该列时的查询性能。具体使用查看官网。
MergeTree 不是 LSM 树,因为它不包含»memtable«和»log«:插入的数据直接写入文件系统。这使得它仅适用于批量插入数据,而不适用于非常频繁地一行一行插入 - 大约每秒一次是没问题的,但是每秒一千次就会有问题

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

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

相关文章

电子合同签署协议开源版系统开发

电子合同签署协议开源版系统开发 H5TP6mysqlphp 源码开源不加密 以下是电子合同系统可能包含的功能列表: 用户注册和登录:用户可以注册并登录系统,以便创建、签署和管理合同。合同创建:用户可以创建新合同,包括填写合…

Web的基本漏洞--SQL注入漏洞

目录 一、SQL注入介绍 1.SQL注入漏洞原理 2.SQL注入漏洞的类型 3.SQL注入漏洞识别 4.攻击方式 5.SQL盲注 时间盲注 布尔盲注 报错盲注 6.SQL注入漏洞的危害 7.SQL注入漏洞的防范措施 8.SQL注入漏洞的绕过 一、SQL注入介绍 1.SQL注入漏洞原理 Web程序输入的数据传…

使用git rebase合并多次commit

目录 rebase的作用简要概括为:命令:解决冲突:遗留问题: rebase的作用简要概括为: 可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简…

docker安装php

在安装 php 之前,我们可以先查看一下我们的镜像: docker images 我这里是已经存在 php 镜像了,版本就是 TAG 显示的 8.1.16 如果没有镜像,则执行下面的命令,拉取 php 镜像: docker pull php:latest 请注…

MAYLAND HOME官网上线 | LTD家居家装行业案例分享

​一、公司介绍 在MAYLAND HOME,我们为我们对质量和服务的承诺感到自豪。我们相信我们的成功与客户的满意度直接相关,这就是为什么我们努力超越您的期望,我们承担的每一个项目。无论您是想升级您的家庭还是企业,我们都会在这里帮助…

SpringBoot3 CORS跨域访问

目录 Credentials 问题一 问题二 解决方法一 CrossOrigin,最优的方法 解决方法二 通过Filter 设置HTTP 解决方法三 通过实现WebMvcConfigurer设置HTTP HTTP 协议,需要认真的学习每个细节。 allowCredentials(true) 和 allowed-origins: "*&qu…

MySQL--万文长字探究隔离性实现原理

1 隔离性简介 事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。这篇文章旨在讲清楚…

吐血整理 二叉树(链表实现)的基本操作详解!

文章目录 节点设置二叉树的深度优先遍历前序遍历中序遍历后序遍历 二叉树的广度优先遍历层序遍历 节点的个数叶子节点的个数第K层节点的个数值为X的节点树的最大深度翻转二叉树判断两颗二叉树是否相同判断二叉树是否是完全二叉树判断二叉树是否是单值二叉树判断二叉树是否是平衡…

有哪些好用的pdf修改器?思路提供

PDF格式的文档在现代生活中扮演着越来越重要的角色。但是,要编辑或修改PDF文件是一件非常困难的事情,因为PDF文件的格式和内容通常被锁定。为了解决这个问题,出现了PDF修改器这种工具,它可以帮助用户轻松地编辑和修改PDF文件。本文…

RDK X3 Module发布,全新软硬件平台加速实现量产级产品落地

机器人开发是一段美妙的旅程。GEEKROS创始人杨状状是地平线社区的一名开发者,热衷于鼓捣各类机器人,2022年,状状第一时间就拿到了地平线旭日X3派(简称旭日X3派),基于TogetheROS™.Bot机器人操作系统&#x…

Win11集成 ChatGPT,任务栏取消分组真的回来了

时隔两月微软如期发布了 Win11 Moments 3 更新,版本号 22621.1778 。 微软这次更新带来了许多质量更新和功能改进。 直观的改动是任务栏,网络图标在连接加密隧道时会上锁,时间显示到秒也重新回归。 日常会用到的 AltTab 任务选项卡被限制到最…

04_Cenos安装Docker

docker安装文档: ubuntu:https://docs.docker.com/engine/install/ubuntu/ centos:https://docs.docker.com/engine/install/centos/ debian:https://docs.docker.com/engine/install/debian/ cenos安装Docker前提: 必…

深入理解Linux虚拟内存管理(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核(一) 深入理解 Linux 内核(二) Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三&#xf…

生态系统NPP及碳源、碳汇模拟、土地利用变化、未来气候变化、空间动态模拟实践技术

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。碳中和可以从碳排放(碳源)和碳固定(碳汇)这两个侧面来理解。陆地生态系统在全球碳循环过程中有着重要作…

加盐加密算法

文章目录 为什么需要加密?加盐加密MD5盐值加密Spring Security加盐 为什么需要加密? 从下面的图片中,可以看到用户的密码在数据库中存储时,如果不对密码加密,则是以明文的方式存储的,如果被别人获取到数据…

Mobx和Mobx-react:集中式状态管理

一、Mobx (1) Mobx是一个功能强大,上手非常容易的状态管理工具。 (2) Mobx背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。只获取与自己相关的数据,不获取无关数据(redux则相反) (3) Mobx利用getter和setter来收集组…

科技兴警,优云「公安一体化安全运维解决方案」亮相2023警博会

日前,第十一届中国国际警用装备博览会(警博会)在北京首钢会展中心成功举办,600余家企业参展,集中展示国内外前沿警用装备及尖端技术,大力推进警用装备现代化。 国内领先的平台级数字化运维软件服务商广通优…

TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空,直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp,6060/tcp,…

flink的几种source来源

简单的总结了flink的几种source来源,可以参考下 package com.atguigu.apitestimport java.util.Propertiesimport org.apache.flink.api.common.serialization.SimpleStringSchema import org.apache.flink.streaming.api.functions.source.SourceFunction import …

涨点技巧:注意力机制---Yolov8引入Resnet_CBAM,CBAM升级版

1.计算机视觉中的注意力机制 一般来说,注意力机制通常被分为以下基本四大类: 通道注意力 Channel Attention 空间注意力机制 Spatial Attention 时间注意力机制 Temporal Attention 分支注意力机制 Branch Attention 1.1.CBAM:通道注意力和空间注意力的集成者 轻量级…