ClickHouse总结
背景
OLAP(联机分析处理) 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP(联机事务处理)系统专注于支持日常业务交易和操作不同,OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。
OLAP场景有以下关键的特征:
主要读请求: 数据库主要用于读取操作,而写入操作相对较少。
大批量更新: 更新操作通常以相当大的批次进行,而非单行更新,并且可能是禁止或较少进行的。
不可修改的数据: 一旦数据添加到数据库,就不能修改。
大量列的宽表: 数据表包含大量列,可能是宽表结构。
查询少,但复杂: 查询数量相对较少,但每个查询可能涉及提取大量行的一小部分列,且查询可能是复杂的。
允许一定的延迟: 对于简单查询,可以接受一定的延迟,约50毫秒。
小型数据: 列中的数据相对较小,包括数字和短字符串。
高吞吐量: 需要处理单个查询时的高吞吐量,每秒可达数十亿行。
非必须事务: 对事务的要求不高,即可容忍一些数据不一致性。
低数据一致性要求: 数据一致性的要求相对较低。
每个查询有一个大表: 通常每个查询涉及一个大表,而其他表规模较小。
结果适合RAM: 查询结果通常经过过滤或聚合,适合于单个服务器的RAM中。
ClickHouse是什么
ClickHouse 是一个用于 联机分析(OLAP
) 的 列式 数据库管理系统(DBMS)。
要用于大规模数据分析的领域,特别是在需要处理海量数据并执行复杂查询的场景中表现出色。以下是一些主要的应用领域:
- 在线广告分析: ClickHouse可以用于分析在线广告的效果,处理大量的点击数据和用户行为,以优化广告投放策略。
- 日志分析: 处理大量的日志数据是ClickHouse的一项强项。它可以用于分析服务器日志、应用程序日志等,帮助识别潜在问题、监控系统性能等。
- 电商数据分析: 针对电子商务平台的大量交易和用户行为数据进行分析,包括销售趋势、用户行为模式等。
- 大数据仪表盘: ClickHouse可以支持创建实时或准实时的大数据仪表盘,用于监控业务指标、数据可视化等。
- 科学研究: 在科学研究领域,特别是需要分析大规模实验数据的情境下,ClickHouse可以用于加速数据处理和分析过程。
- 物联网(IoT)数据分析: 处理大量的物联网设备生成的数据,用于监测、预测和优化物联网系统。
ClickHouse的优缺点
以下是ClickHouse
的一些优点:
优点 | 描述 |
高性能 | ClickHouse专注于高性能的OLAP查询,特别适用于大规模数据集的复杂分析。其列式存储引擎和优化的查询执行计划使其在数据扫描和聚合方面表现卓越 |
列式存储引擎 | ClickHouse采用列式存储引擎,将表按列而不是按行存储。这种存储结构使得在分析查询中只读取所需的列,从而提高了查询性能 |
分布式架构 | ClickHouse是一个分布式系统,可以水平扩展以处理更大的数据集。它支持分布式查询,可以在多个节点上并行执行查询,实现高可用性和负载均衡 |
适用于时序数据 | ClickHouse对时序数据有专门的支持和优化,包括时间窗口、采样、填充等功能。这使其成为处理时间序列数据的理想选择 |
灵活的数据分布和复制策略 | ClickHouse允许用户定义数据分布和复制策略,以适应不同的业务需求。这种灵活性使得在大规模分布式环境中进行高可用性配置和负载均衡变得更为容易 |
支持多种数据格式 | ClickHouse支持多种数据格式的导入和导出,包括CSV、JSON、Parquet等。这使其更适应不同的数据来源和数据处理场景 |
低延迟查询 | ClickHouse在处理大规模数据时能够实现低延迟的查询,这使得它适用于需要快速响应分析查询的应用场景 |
开源和免费 | ClickHouse是开源的,可免费使用,这降低了部署和使用成本 |
尽管ClickHouse
在大规模数据分析和OLAP
场景中表现出色,但仍然有一些潜在的限制和不足,这取决于具体的使用场景和需求。以下是一些ClickHouse
可能存在的不足之处:
缺点 | 描述 |
事务支持有限 | ClickHouse的事务支持相对有限,主要关注于读取和分析性能。对于要求强事务一致性的OLTP场景,可能不是首选 |
写入操作相对较慢 | 尽管ClickHouse在大规模数据的读取和查询方面表现优越,但对于频繁的单行写入(INSERT、UPDATE、DELETE)操作,性能可能相对较慢 |
不适合频繁更新的场景 | ClickHouse的设计更适用于大规模的批量插入和查询,而不是频繁的更新。频繁的更新可能导致性能下降,因为ClickHouse的列式存储引擎更适用于不可变的数据 |
复杂连接操作性能相对较慢 | 在复杂的多表连接操作中,ClickHouse可能表现相对较慢。它的优势主要在于单表和简单连接查询 |
不支持全文搜索 | ClickHouse不支持全文搜索,因此在需要进行全文搜索的场景下,可能需要其他专门的全文搜索引擎的配合 |
存储过程和触发器不支持 | ClickHouse不支持存储过程和触发器,这意味着无法在数据库中实现存储过程式的业务逻辑 |
部分SQL标准的不支持 | ClickHouse实现了大部分SQL标准,但仍然可能存在一些特定SQL功能的不支持或支持有限 |
维护和管理的复杂性 | ClickHouse的配置和管理可能相对复杂,特别是在分布式集群环境中。需要仔细考虑配置、性能调优、数据备份等方面的问题 |
表引擎
ClickHouse的表引擎 定义了数据表的物理存储结构和访问方法,ClickHouse支持多种表引擎,其中一些常见的引擎包括MergeTree系列、Log系列、外部引擎、其它引擎等。
引擎系列 | 引擎 | 用途 | 特点 |
MergeTree 系列 | MergeTree | 大规模数据分析,时序数据 | 列式存储,适用于分析查询,支持分区和索引 |
ReplicatedMergeTree | 高可用性,数据冗余 | 支持数据复制,提高高可用性,支持分区和索引 | |
Distributed | 跨多个节点的分布式查询 | 支持在多个节点之间执行分布式查询 | |
Log 系列 | Log | 记录变更日志 | 用于记录变更日志,通常与其他引擎结合使用 |
外部引擎 | Kafka | 集成 ClickHouse 和 Apache Kafka | 通过 Kafka 主题读取和写入数据 |
MySQL | 在 ClickHouse 中访问 MySQL 数据库的数据 | 用于在 ClickHouse 中访问 MySQL 数据库的数据 | |
ODBC | 通过 ODBC 接口连接到其他数据源 | 通过 ODBC 接口连接到其他数据源 | |
其它引擎 | TinyLog | 记录变更日志,轻量级实现 | 轻量级的 Log 引擎实现,适用于数据量较小的情况 |
TinyMergeTree | 大规模数据分析,轻量级实现 | 轻量级的 MergeTree 引擎实现,适用于数据量较小的情况 |
运行机制
以下是 ClickHouse 更为运行机制的详细描述:
- 表的创建与结构定义:用户通过 SQL 语句在 ClickHouse 中创建表,并定义表的结构,包括列的数据类型、分区方式、索引等。每个表都与一个特定的表引擎关联,决定了数据的存储方式和处理特性。
- 列式存储:ClickHouse 使用列式存储引擎,将相同列的数据存储在一起。这样的存储方式带来了高压缩比和更高的查询性能,尤其适用于大规模数据分析。
- 数据分区:表可以根据指定的字段进行分区,常见的是按照时间进行分区。分区有助于提高查询性能,允许系统更快速地定位和处理特定时间范围内的数据。
- 数据插入与合并:当用户插入新的数据时,数据首先会进入 MergeTree 引擎的“暂存区”(MergeTree 小分区),然后根据配置的合并策略,定期进行数据合并操作。合并操作有助于优化数据存储和提高查询性能。
- 索引的使用:ClickHouse 支持主键索引和辅助索引,提高了查询速度。主键索引用于快速定位唯一行,而辅助索引用于其他查询条件。
- 异步写入:ClickHouse 支持异步写入,插入操作是非常快速的。写入的数据首先进入 MergeTree 引擎的不同分区,然后可以通过周期性的合并操作进行整理。
- 分布式计算:如果运行在分布式集群中,ClickHouse 可以在多个节点上并行执行查询。Distributed 引擎用于在多个 ClickHouse 节点之间执行分布式查询,将查询分发到集群中的多个节点,并将结果合并返回。
- 数据副本和高可用性:ReplicatedMergeTree 引擎支持数据在多个副本之间的复制,提高数据的冗余和高可用性。在集群中的节点之间可以实现故障转移,保障数据的可靠性。
- 查询处理和优化:当执行查询时,ClickHouse 使用内置的优化器和执行引擎,根据查询的结构和表的分布情况进行优化,以提高查询性能。
- 异步更新和删除:ClickHouse 支持异步更新和删除操作。通过 ReplicatedMergeTree 引擎的版本控制机制,可以实现在表中执行条件更新和删除。
- 数据压缩:列式存储以及支持多种压缩算法,帮助减小存储占用,提高 I/O 效率。
编译和运行ClickHouse
ARG OS_VER=22.04
ARG OS_IMAGE=ubuntuFROM ${OS_IMAGE}:${OS_VER}RUN apt-get update && apt-get install -y \git cmake wget curl ccache nasm yasm ninja-build lsb-release wget software-properties-common gnupgWORKDIR /root# Clang
ARG CLANG_VER=17
ARG CLANG_REPO=https://apt.llvm.org
RUN wget ${CLANG_REPO}/llvm.sh \&& sed -i 's/add-apt-repository "${REPO_NAME}"/add-apt-repository -y "${REPO_NAME}"/g' llvm.sh \&& chmod +x llvm.sh \&& ./llvm.sh ${CLANG_VER}
ENV CC=clang-${CLANG_VER}
ENV CXX=clang++-${CLANG_VER}# Clickhouse
ARG CLICKHOUSE_VER=v24.8.2.3-lts
ARG CLICKHOUSE_REPO=https://github.com/ClickHouse/ClickHouse.git
RUN git clone ${CLICKHOUSE_REPO} \&& cd ClickHouse \&& git checkout -b ${CLICKHOUSE_VER} ${CLICKHOUSE_VER} \&& git submodule update --init \&& mkdir build \&& cmake -S . -B build \&& cmake --build build --target clickhouse
#!/bin/bashdocker build --build-arg https_proxy --build-arg http_proxy --build-arg no_proxy -f Dockerfile -t clickhouse_build .
docker create --name temp-clickhouse-build clickhouse_build
docker cp temp-clickhouse-build:/root/ClickHouse/build/programs/clickhouse ./
docker rm temp-clickhouse-build
config.xml
<!-- This file was generated automatically.Do not edit it: it is likely to be discarded and generated again before it's read next time.Files used to generate this file:config.xml --><!-- Config that is used when server is run without config file. -->
<clickhouse><logger><level>trace</level><log>./clickhouse-server.log</log></logger><http_port>8123</http_port><tcp_port>9000</tcp_port><mysql_port>9004</mysql_port><listen_host>0.0.0.0</listen_host><path>/tmp/clickhouse</path><mlock_executable>true</mlock_executable><users><me><password>changeme</password><profile>default</profile><quota>default</quota><access_management>1</access_management><named_collection_control>1</named_collection_control></me></users><profiles><default/></profiles><quotas><default/></quotas>
</clickhouse>
运行Click House:
BASE_DIR=$(pwd) && taskset -c 84-89,196-201 ./clickhouse server -C ${BASE_DIR}/config.xml --daemon
参考
clickhouse学习笔记(四)库、表、分区相关DDL操作_clickhouse创建数据库-CSDN博客
Clickhouse 分布式表&本地表 &ClickHouse实现时序数据管理和挖掘-腾讯云开发者社区-腾讯云
相关文章:
ClickHouse总结
背景 OLAP(联机分析处理) 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP(联机事务处理)系统专注于支持日常业务交易和操作不同,OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。 OLAP场景…...
Guava中Preconditions校验
Guava中Preconditions校验 场景引入Guava 参数校验 Preconditionspom 依赖引入常用的方法 场景引入 提出疑问?为什么不直接使用 jsr330校验注解对实体类进行校验呢? 答:不同的场景,如短信码验证登录,账号密码登录此类…...
容器技术--Docker常用命令
Docker常用命令 镜像的命令 # 查看本地所有镜像 docker images # 向服务端发送请求,服务端处理 # 只获取镜像id docker images -q # 镜像管理 docker image# 查看镜像的详细信息 docker image inspect 镜像id # 查看 容器整体信息 docker info | grep -iE...

【Linux】网络层协议——IP
一、IP协议 在前面,我们学习了应用层和传输层,接下来,我们来学习网络层,网络层的主要功能是在复杂的网络环境中确定一个合适的路由。 1.1 IP协议的基本概念 主机:配有IP地址,有可以进行路由控制的设备路由…...

【Echarts】vue3打开echarts的正确方式
ECharts 是一个功能强大、灵活易用的数据可视化工具,适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用Echarts呢? 这里以vue3为例。 安装echarts pnpm i echarts封装公用方法 // ts-nocheck import * as echarts from echarts; // 我们这里借…...
一些学习three的小记录
这篇主要用来记录我学习3d渲染相关的疑问记录,后续会持续的更新,如果我的理解不对欢迎评论区更正。 目录 1.WebGLRenderer和WebGPURenderer的区别 1.1 WebGLRenderer 1.2 WebGPURenderer 二、scene.background和renderer.setClearColor有什么区别 三、renderer.setAnimat…...

Porcupine - 语音关键词唤醒引擎
文章目录 一、关于 Porcupine特点用例尝试一下 语言支持性能 二、Demo1、Python Demo2、iOS DemoBackgroundService DemoForegroundApp Demo 3、网页 Demo3.1 Vanilla JavaScript 和 HTML3.2 Vue Demos 三、SDK - Python 一、关于 Porcupine Porcupine 是一个高度准确和轻量级…...

Golang | Leetcode Golang题解之第409题最长回文串
题目: 题解: func longestPalindrome(s string) int {mp : map[byte]int{}for i : 0; i < len(s); i {mp[s[i]]}res : 0for _, v : range mp {if v&1 1 {res v - 1} else {res v}}if res<len(s) {res}return res }...

【C++】STL数据结构最全函数详解2-向量vector
关于STL,我们之前浅浅提过:这里 另外对于栈,这里有更加详尽的介绍:CSTL常用数据结构1详解---栈(stack)-CSDN博客 这个系列将会更加深入地从函数原型开始用详细的例子解释用法 首先这一篇介绍的是一个非常…...

阿里云 Quick BI使用介绍
Quick BI使用介绍 文章目录 阿里云 Quick BI使用介绍1. 创建自己的quick bi服务器2. 新建数据源3. 上传文件和 使用4. 开始分析 -选仪表盘5. 提供的图表6. 一个图表的设置使用小结 阿里云 Quick BI使用介绍 Quick BI是一款全场景数据消费式的BI平台,秉承全场景消费…...
LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略
LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略 目录 SuperPrompt的简介 SuperPrompt的使用方法 1、prompt SuperPrompt的案例应用 SuperPrompt的简介 SuperPrompt项目是一个开源项目,旨在通过设计特定的提示词来帮助我们更好…...
Java中的Web服务开发:RESTful API的最佳实践
Java中的Web服务开发:RESTful API的最佳实践 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代Web应用开发中,RESTful API是构建可伸缩、易于维护的Web服务的关键。…...
Linux创建虚拟磁盘并分区格式化
快速创建一个虚拟磁盘 你可以通过以下步骤在Linux上虚拟一个磁盘,并将其挂载到 /mnt/ 目录下: 步骤 1: 创建一个虚拟磁盘文件 使用 dd 命令创建一个虚拟磁盘文件(例如大小为1GB): dd if/dev/zero of/root/virtual_…...

面试经典150题——最后一个单词的长度
目录 题目链接:58. 最后一个单词的长度 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:反向遍历 Java写法: C写法: 解法二:逆天解法 思路 存在的问题 总结 题目链接&…...

【C++】入门基础(上)
Hi,好久不见! 目录 1、C入门小基础 1.1 祖师爷--Bjarne Stroustrup(本贾尼斯特劳斯特卢普) 1.2 C参考文献 1.3 书籍推荐 2、C的第一个程序 3、命名空间 3.1 namespace的价值 3.2 namespace的定义 3.3 命名空间的使…...

Mac中Twig模版安装与SSTI漏洞学习
感谢大佬的文章参考学习。 SSTI:https://www.cnblogs.com/bmjoker/p/13508538.html Homebrew:快速开始 - Homebrew 中文网 Homebrew安装 一键快捷安装:默认使用中科大的源 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homeb…...
【20.5 python中的FastAPI】
python中的FastAPI FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.6 的类型提示。它利用了 Python 3.7 的新特性,如类型提示(Type Hints),来自动生成 A…...

研1日记13
正态分布: toTenor:转数字变为0-1 加载模型: model youmodel() model.load("路径") 测试单个样本:...
Go语言错误处理详解
Go语言以其简洁、高效和并发能力著称。在实际开发中,错误处理是一个不可避免且至关重要的部分。本文将深入探讨Go语言中的错误处理机制,涵盖其原理、使用方法、最佳实践,并提供丰富的代码示例和中文注释。 一、错误处理的基本概念 在Go语言…...

C++基础知识7 list
list 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2.1 模拟实现list 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 l…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...