当前位置: 首页 > news >正文

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 更为运行机制的详细描述:

  1. 表的创建与结构定义:用户通过 SQL 语句在 ClickHouse 中创建表,并定义表的结构,包括列的数据类型、分区方式、索引等。每个表都与一个特定的表引擎关联,决定了数据的存储方式和处理特性。
  2. 列式存储:ClickHouse 使用列式存储引擎,将相同列的数据存储在一起。这样的存储方式带来了高压缩比和更高的查询性能,尤其适用于大规模数据分析。
  3. 数据分区:表可以根据指定的字段进行分区,常见的是按照时间进行分区。分区有助于提高查询性能,允许系统更快速地定位和处理特定时间范围内的数据。
  4. 数据插入与合并:当用户插入新的数据时,数据首先会进入 MergeTree 引擎的“暂存区”(MergeTree 小分区),然后根据配置的合并策略,定期进行数据合并操作。合并操作有助于优化数据存储和提高查询性能。
  5. 索引的使用:ClickHouse 支持主键索引和辅助索引,提高了查询速度。主键索引用于快速定位唯一行,而辅助索引用于其他查询条件。
  6. 异步写入:ClickHouse 支持异步写入,插入操作是非常快速的。写入的数据首先进入 MergeTree 引擎的不同分区,然后可以通过周期性的合并操作进行整理。
  7. 分布式计算:如果运行在分布式集群中,ClickHouse 可以在多个节点上并行执行查询。Distributed 引擎用于在多个 ClickHouse 节点之间执行分布式查询,将查询分发到集群中的多个节点,并将结果合并返回。
  8. 数据副本和高可用性:ReplicatedMergeTree 引擎支持数据在多个副本之间的复制,提高数据的冗余和高可用性。在集群中的节点之间可以实现故障转移,保障数据的可靠性。
  9. 查询处理和优化:当执行查询时,ClickHouse 使用内置的优化器和执行引擎,根据查询的结构和表的分布情况进行优化,以提高查询性能。
  10. 异步更新和删除:ClickHouse 支持异步更新和删除操作。通过 ReplicatedMergeTree 引擎的版本控制机制,可以实现在表中执行条件更新和删除。
  11. 数据压缩:列式存储以及支持多种压缩算法,帮助减小存储占用,提高 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&#xff08;联机分析处理&#xff09; 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP&#xff08;联机事务处理&#xff09;系统专注于支持日常业务交易和操作不同&#xff0c;OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。 OLAP场景…...

Guava中Preconditions校验

Guava中Preconditions校验 场景引入Guava 参数校验 Preconditionspom 依赖引入常用的方法 场景引入 提出疑问&#xff1f;为什么不直接使用 jsr330校验注解对实体类进行校验呢&#xff1f; 答&#xff1a;不同的场景&#xff0c;如短信码验证登录&#xff0c;账号密码登录此类…...

容器技术--Docker常用命令

Docker常用命令 镜像的命令 # 查看本地所有镜像 docker images # 向服务端发送请求,服务端处理 # 只获取镜像id docker images -q # 镜像管理 docker image# 查看镜像的详细信息 docker image inspect 镜像id # 查看 容器整体信息 docker info | grep -iE...

【Linux】网络层协议——IP

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

【Echarts】vue3打开echarts的正确方式

ECharts 是一个功能强大、灵活易用的数据可视化工具&#xff0c;适用于商业报表、数据分析、科研教育等多种场景。那么该如何优雅的使用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题最长回文串

题目&#xff1a; 题解&#xff1a; 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&#xff0c;我们之前浅浅提过&#xff1a;这里 另外对于栈&#xff0c;这里有更加详尽的介绍&#xff1a;CSTL常用数据结构1详解---栈&#xff08;stack&#xff09;-CSDN博客 这个系列将会更加深入地从函数原型开始用详细的例子解释用法 首先这一篇介绍的是一个非常…...

阿里云 Quick BI使用介绍

Quick BI使用介绍 文章目录 阿里云 Quick BI使用介绍1. 创建自己的quick bi服务器2. 新建数据源3. 上传文件和 使用4. 开始分析 -选仪表盘5. 提供的图表6. 一个图表的设置使用小结 阿里云 Quick BI使用介绍 Quick BI是一款全场景数据消费式的BI平台&#xff0c;秉承全场景消费…...

LLMs之SuperPrompt:SuperPrompt的简介、使用方法、案例应用之详细攻略

LLMs之SuperPrompt&#xff1a;SuperPrompt的简介、使用方法、案例应用之详细攻略 目录 SuperPrompt的简介 SuperPrompt的使用方法 1、prompt SuperPrompt的案例应用 SuperPrompt的简介 SuperPrompt项目是一个开源项目&#xff0c;旨在通过设计特定的提示词来帮助我们更好…...

Java中的Web服务开发:RESTful API的最佳实践

Java中的Web服务开发&#xff1a;RESTful API的最佳实践 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在现代Web应用开发中&#xff0c;RESTful API是构建可伸缩、易于维护的Web服务的关键。…...

Linux创建虚拟磁盘并分区格式化

快速创建一个虚拟磁盘 你可以通过以下步骤在Linux上虚拟一个磁盘&#xff0c;并将其挂载到 /mnt/ 目录下&#xff1a; 步骤 1: 创建一个虚拟磁盘文件 使用 dd 命令创建一个虚拟磁盘文件&#xff08;例如大小为1GB&#xff09;&#xff1a; dd if/dev/zero of/root/virtual_…...

面试经典150题——最后一个单词的长度

目录 题目链接&#xff1a;58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;反向遍历 Java写法&#xff1a; C写法&#xff1a; 解法二&#xff1a;逆天解法 思路 存在的问题 总结 题目链接&…...

【C++】入门基础(上)

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

Mac中Twig模版安装与SSTI漏洞学习

感谢大佬的文章参考学习。 SSTI&#xff1a;https://www.cnblogs.com/bmjoker/p/13508538.html Homebrew&#xff1a;快速开始 - Homebrew 中文网 Homebrew安装 一键快捷安装&#xff1a;默认使用中科大的源 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homeb…...

【20.5 python中的FastAPI】

python中的FastAPI FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;基于 Python 3.6 的类型提示。它利用了 Python 3.7 的新特性&#xff0c;如类型提示&#xff08;Type Hints&#xff09;&#xff0c;来自动生成 A…...

研1日记13

正态分布&#xff1a; toTenor&#xff1a;转数字变为0-1 加载模型&#xff1a; model youmodel() model.load("路径") 测试单个样本&#xff1a;...

Go语言错误处理详解

Go语言以其简洁、高效和并发能力著称。在实际开发中&#xff0c;错误处理是一个不可避免且至关重要的部分。本文将深入探讨Go语言中的错误处理机制&#xff0c;涵盖其原理、使用方法、最佳实践&#xff0c;并提供丰富的代码示例和中文注释。 一、错误处理的基本概念 在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…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...