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…...
Hirschmann RS20-0800M4M4SDAE工业以太网交换机
Hirschmann RS20-0800M4M4SDAE 工业以太网交换机产品特点:端口配置:共8个端口,含6个RJ45电口和2个ST光纤接口。端口速率:所有端口均为100Mbps快速以太网。光纤类型:2个光纤端口为多模、ST接头。管理类型:二…...
告别虚频困扰:用VASP+DynaPhoPy搞定高温材料声子谱的保姆级教程
高温材料声子谱计算实战:从虚频困境到非谐解决方案 引言:虚频问题的根源与突破路径 在计算材料学领域,声子谱分析是理解材料动力学稳定性和热力学性质的核心手段。然而许多研究者都遭遇过这样的困境:对实验合成的材料进行简谐近似…...
2026 新视角:化妆品开发的底层逻辑,做好一款产品,从选对原料开始
在化妆品研发链条中,配方架构、生产工艺、包装设计固然重要,但决定一款产品上限的,永远是原料。一款稳定、安全、表现优异的护肤成品,离不开纯净、达标、批次一致的优质原料。对于品牌方、配方师、代工企业而言,原料不…...
如何快速掌握开源UE资产编辑器:UAssetGUI完整配置与实战指南
如何快速掌握开源UE资产编辑器:UAssetGUI完整配置与实战指南 【免费下载链接】UAssetGUI A tool designed for low-level examination and modification of Unreal Engine game assets by hand. 项目地址: https://gitcode.com/gh_mirrors/ua/UAssetGUI UAss…...
FM3773 低功耗离线式恒流/恒压 PSR 控制器
概述 FM3773 是一种高性能的交流/直流用于电池充电器和适配器的电源控制器,内置 850V 功率三极管。该设备采用脉冲频率调制(PFM)的方法来建立非连续导通模式(DCM)反激式电源。 FM3773 提供精确的恒定电压,恒…...
转行网络安全运维:从0到1的可落地指南
转行网络安全运维:从0到1的可落地指南 一、 「3个核心技能:从零起步也能会」 网上学习资料多到爆炸,不用纠结“哪个最好”,记住一句话:**能学会、能上手的就是好的**!不管是免费视频还是付费课,…...
独立站内容分层:一层给 SEO,一层给 GEO
你的内容在喂两个完全不同的"阅读者" 你的博客文章,从来都不只有一个读者。 传统认知里,独立站内容的读者只有两类:真人访客和搜索引擎爬虫。SEO 优化的一切工作,本质上都是在讨好后者,顺带服务前者。 但…...
基于Arduino与nRF24L01+的无线传感器平台设计与部署指南
1. 项目概述与设计思路如果你和我一样,喜欢在阳台或者小院子里种点蔬菜瓜果,那你肯定也遇到过这样的烦恼:出门几天,心里总惦记着家里的番茄苗是不是缺水了,小温室里的温度会不会太高。传统的温湿度计只能让你在现场读数…...
特定任务需求场景下的过约束并联机构构型设计与控制方法【附代码】
✨ 长期致力于曲面加工、构型综合、运动学和动力学建模、性能评价、多目标优化、滑模控制、鲁棒控制、视觉传感技术研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (…...
3步开启Windows 11安卓应用新体验:WSA完整使用指南
3步开启Windows 11安卓应用新体验:WSA完整使用指南 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for Android(简…...
