中间件--ClickHouse-1--基础介绍(列式存储,MPP架构,分布式计算,SQL支持,向量化执行,亿万级数据秒级查询)

1、概述

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它由俄罗斯的互联网巨头Yandex为解决其内部数据分析需求而开发,并于2016年开源。专为大规模数据分析,实时数据分析和复杂查询设计,具有高性能、实时数据和可扩展性等特点。

2、主要特性

(1)、列式存储

  • 原理:
    将数据按列存储,而非传统的行式存储(如 MySQL)。
    • 优势:
      • 高效查询:仅读取相关列,减少I/O开销,尤其是对于聚合类操作时,性能非常高效。
      • 高压缩率:相同列的数据压缩效率更高(如ZSTD、LZ4算法)。
      • 向量化执行:CPU 可批量处理同一列的多行数据,提升计算速度。

(2)、MPP架构(分布式处理)

  • MPP(大规模集群并行处理):
    支持分布式计算,查询可拆分为多个任务并行执行,具有良好的扩展性。
    • 分布式表:
      将数据分片(Shard)存储在多个节点,查询时自动合并结果。
    • 副本机制:
      每个分片可配置多个副本(Replica),确保高可用性。

(3)、高性能查询引擎

  • 向量化执行:
    以 数据块(Block) 为单位处理数据(默认 8192 行/块),利用 SIMD 指令加速计算。
  • 预计算与索引:
    • Projection(投影):预定义数据的排序、过滤和聚合规则,查询时直接使用预处理数据。
    • 物化视图(Materialized View):预先计算复杂查询结果,实时更新。

(4)、SQL 支持

基本使用类似Mysql,熟悉SQL的用户可以快速上手。

  • 功能丰富:
    • 支持标准 SQL(SELECT、JOIN、GROUP BY 等)。
    • 扩展函数:如数组操作(arrayJoin)、窗口函数(ROW_NUMBER)、聚合函数(quantile)。
  • 实时写入:
    支持批量插入(INSERT)和流式数据(如 Kafka、MySQL Binlog)。

(5)、分布式与扩展性

  • 集群模式:
    通过 Distributed 表引擎管理分片和副本,自动负载均衡。
  • 数据分区(Partition):
    按时间或字段分区(如 PARTITION BY toYYYYMM(date)),加速范围查询。

(6)、安全与权限

  • RBAC(基于角色的访问控制):
    支持用户、角色、行级权限管理。
  • 数据加密:
    支持 SSL/TLS 加密传输,存储加密需依赖外部工具。

(7)、多核并行处理

能够充分利用现代服务器的多核架构,提高查询执行速度。

(8)、外部存储集成

除了本地文件系统之外,还支持从HDFS等多种外部存储系统中读取数据。

3、适用场景

ClickHouse非常适合需要快速响应的大规模数据查询任务。

(1)、大数据分析‌

如用户行为分析、广告点击统计,支持PB级数据的多维分析‌。
特别适合那些需要对大量历史数据进行复杂查询分析的业务场景。

(2)、实时数据分析与监控‌

生成实时业务指标(如电商 GMV、DAU),广告网络及RTB(实时竞价),支持高并发查询‌。

(3)、日志存储与检索‌

高效压缩存储日志数据(如 Nginx 日志),快速检索关键信息,电信行业中的通话记录分析‌。

4、架构特点

(1)、分布式MPP架构‌

通过分片(Sharding)和副本(Replication)实现数据分布式存储与计算,支持跨节点并行查询‌。

(2)、存储引擎‌

  • 核心表引擎:
    • MergeTree 家族:
      • MergeTree:基础引擎,支持排序、分区、数据合并。
      • RepliatedMergeTree:分布式场景下保证数据一致性。
      • TinyLog/StripeLog:简单存储引擎,无并发控制(适合小数据测试)。
  • 其他引擎:
    • Memory:内存表,重启后数据丢失。
    • Distributed:分布式表,协调分片查询。

(3)、高效压缩与数据类型‌

每列独立选择压缩算法(如 LZ4、ZSTD),支持 UInt/Int 系列、日期/时间、字符串等丰富数据类型‌。

(4)、数据写入机制

  • 追加写入(Append-Only):
    数据以 块(Block) 形式追加到磁盘,不可直接更新或删除(需 ALTER TABLE … DELETE 语句,但性能较低)。
  • Merge Tree 合并:
    定期合并小数据块为大块,优化查询性能。

5、使用示例

(1)、查询执行流程:

  • 查询解析:
    SQL 转换为执行计划,优化器选择最优路径。
  • 并行执行:
    查询拆分到多个分片,每个分片在本地执行。
  • 结果聚合:
    各节点返回结果后,协调节点合并最终结果。

(2)、具体示例:

1. 创建表

– 使用 MergeTree 引擎,按日期分区,按订单ID排序

CREATE TABLE orders (order_id UInt32,customer_id UInt32,product_id UInt32,order_date Date,order_amount Float32
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(order_date)
ORDER BY order_id;
2. 数据插入

– 批量插入提升效率

INSERT INTO orders VALUES
(1, 101, 1001, '2024-07-01', 500.0),
(2, 102, 1002, '2024-07-01', 300.0),
(3, 103, 1003, '2024-07-02', 700.0);
3. 复杂查询

– 订单金额按日期聚合

SELECT order_date,COUNT(order_id) AS order_count,SUM(order_amount) AS total_amount
FROM orders
GROUP BY order_date
ORDER BY order_date;

6、使用建议

(1)、性能优化

  • 分区表:
    按时间或高频查询字段分区(如 PARTITION BY toYYYYMM(date))。

  • Projection(投影):
    预定义数据排序和过滤规则,加速特定查询。
    sql示例:
    CREATE PROJECTION orders_projection
    (order_date, customer_id, order_amount)
    PARTITION BY toYYYYMM(order_date)
    ORDER BY (customer_id, order_date)
    SETTINGS index_granularity = 8192;

  • 批量插入:
    减少单次插入数据量,避免频繁小批量操作。

  • 合理索引:
    使用 MARK 或稀疏索引(如 index_granularity)加速范围查询。

(2)、分布式配置

  • 分片策略:
    根据查询热点合理分配分片,避免数据倾斜。
  • 副本机制:
    每个分片至少 3 个副本,确保高可用性。

(3)、资源管理

  • 内存控制:
    调整 max_memory_usage 防止查询 OOM。
  • 日志与监控:
    使用 system.parts、system.merges 监控数据合并状态。

7、局限性和适用场景

(1)、局限性

  • 不支持复杂事务:
    仅保证单行写入原子性,不支持 ACID 事务。
  • 数据更新与删除:
    通过 ALTER TABLE … DELETE 语句实现,但性能较低(建议通过新数据覆盖旧数据)。
  • 索引限制:
    仅支持基于主键的排序索引,不支持 B-Tree 索引。

(2)、适用场景

  • OLAP 场景:
    高并发查询、实时分析、大数据量(TB/PB 级)。
  • 读多写少:
    适合批量写入、频繁读取的场景(如日志分析、报表生成)。

(3)、不适用场景

  • OLTP 场景:
    高频事务性操作(如订单系统)。
  • 复杂事务:
    需要多行事务或细粒度更新的场景。

8、与其他数据库的对比

在这里插入图片描述

9、社区与生态

  • 开源社区:
    GitHub 仓库:https://github.com/ClickHouse/ClickHouse。
  • 企业支持:
    ClickHouse Inc. 提供云服务(ClickHouse Cloud)和企业版(高级功能、技术支持)。
  • 工具生态:
    • 客户端:clickhouse-client、DBeaver。
    • ETL 工具:Airflow、Kafka、Debezium。

10、ClickHouse总结

ClickHouse是一款专为高性能OLAP分析设计的列式数据库,凭借列式存储、分布式架构和实时分析能力,特别适合处理海量数据的实时查询和复杂分析。

不过,其局限性在于不支持事务和行级更新,更适用于读多写少、批量写入的分析型业务‌。
在选择使用ClickHouse之前,也需要考虑其相对复杂的配置(如:表结构、使用Projection、分布式配置)和调优过程,以及与其他系统集成时可能遇到的挑战。

逆风翻盘,Dare To Be!!!

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

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

相关文章

Go之Slice和数组:深入理解底层设计与最佳实践

在Go语言中,数组(Array)和切片(Slice)是两种看似相似却本质不同的数据结构。本文将深入剖析它们的底层实现机制,并结合实际代码示例,帮助开发者掌握核心差异和使用场景。 一、基础概念&#xff…

力扣热题100——普通数组(不普通)

普通数组但一点不普通! 最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 最大子数组和 这道题是非常经典的适用动态规划解决题目,但同时这里给出两种解法 动态规划、分治法 那么动态规划方法大家可以在我的另外一篇博客总结中看到&am…

矩阵基础+矩阵转置+矩阵乘法+行列式与逆矩阵

GPU渲染过程 矩阵 什么是矩阵(Matrix) 向量 (3,9,88) 点乘:计算向量夹角 叉乘:计算两个向量构成平面的法向量。 矩阵 矩阵有3行,2列,所以表示为M32 获取固…

MySQL之text字段详细分类说明

在 MySQL 中,TEXT 是用来存储大量文本数据的数据类型。TEXT 类型可以存储非常长的字符串,比 VARCHAR 类型更适合存储大块的文本数据。TEXT 数据类型分为以下几个子类型,每个子类型用于存储不同大小范围的文本数据: TINYTEXT: 可以…

超详细!Android 面试题大汇总与深度解析

一、Java 与 Kotlin 基础 1. Java 的多态是如何实现的? 多态是指在 Java 中,同一个行为具有多个不同表现形式或形态的能力。它主要通过方法重载(Overloading)和方法重写(Overriding)来实现。 方法重载&a…

如何提高webrtc操作跟手时间,降低延迟

第一次做webrtc项目,操作延迟,一直是个问题,多次调试都不能达到理想效果。偶尔发现提高jitterBuffer时间可以解决此问题。关键代码 const _setJitter (values: number) > { const receives peerConnection.getReceivers();receives.f…

语音合成(TTS)从零搭建一个完整的TTS系统-第一节-效果演示

一、概述 语音合成又叫文字转语音(TTS-text to speech ),本专题我们记录从零搭建一个完整的语音合成系统,包括文本前端、声学模型和声码器,从模型训练到系统的工程化实现,模型可以部署在手机等嵌入式设备上…

实验三 I/O地址译码

一、实验目的 掌握I/O地址译码电路的工作原理。 二、实验电路 实验电路如图1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器, Y0:280H~287H&…

Linux 使用Nginx搭建简易网站模块

网站需求: 一、基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab ​ 二、给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com/student](http://www.openlab.com/stud…

MyBatis 如何使用

1. 环境准备 添加依赖&#xff08;Maven&#xff09; 在 pom.xml 中添加 MyBatis 和数据库驱动依赖&#xff1a; <dependencies><!-- MyBatis 核心库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId&g…

ArkTS组件的三个通用(通用事件、通用属性、通用手势)

文章目录 通用事件点击事件 onClick触摸事件 onTouch挂载、卸载事件拖拽事件按键事件 onKeyEvent焦点事件鼠标事件悬浮事件组件区域变化事件 onAreaChange组件尺寸变化事件组件可见区域变化事件组件快捷键事件自定义事件分发自定义事件拦截 通用属性尺寸设置位置设置布局约束边…

智慧城市像一张无形大网,如何紧密连接你我他?

智慧城市作为复杂巨系统&#xff0c;其核心在于通过技术创新构建无缝连接的网络&#xff0c;使物理空间与数字空间深度融合。这张"无形大网"由物联网感知层、城市数据中台、人工智能中枢、数字服务入口和安全信任机制五大支柱编织而成&#xff0c;正在重塑城市运行规…

【python】django sqlite版本过低怎么办

方法一&#xff1a;下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…

PyTorch - Tensor 学习笔记

上层链接&#xff1a;PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…

【技术派后端篇】ElasticSearch 实战指南:环境搭建、API 操作与集成实践

1 ES介绍及基本概念 ElasticSearch是一个基于Lucene 的分布式、高扩展、高实时的基于RESTful 风格API的搜索与数据分析引擎。 RESTful 风格API的特点&#xff1a; 接受HTTP协议的请求&#xff0c;返回HTTP响应&#xff1b;请求的参数是JSON&#xff0c;返回响应的内容也是JSON…

从标准九九表打印解读单行表达式的书写修炼(Python)

解读单行表达式书写&#xff0c;了解修习单行捷径。 笔记模板由python脚本于2025-04-16 23:24:17创建&#xff0c;本篇笔记适合喜欢单行喜好python的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述…

深入解析布尔注入:原理、实战与防御

目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例&#xff1a;获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入&#xff08;Boolean-Based Blind SQL Injection&#xff09;是一种…

OpenGL学习笔记(几何着色器、实例化、抗锯齿)

目录 几何着色器爆破物体法向量可视化 实例化&#xff08;偏移量存在uniform中&#xff09;实例化数组&#xff08;偏移量存在顶点属性中&#xff09;小行星带 抗锯齿SSAA&#xff08;Super Sample Anti-aliasing&#xff09;MSAA&#xff08;Multi-Sampling Anti-aliasing&…

idea报错java: 非法字符: ‘\ufeff‘解决方案

解决方案步骤以及说明 BOM是什么&#xff1f;1. BOM的作用2. 为什么会出现 \ufeff 错误&#xff1f;3. 如何解决 \ufeff 问题&#xff1f; 最后重新编译&#xff0c;即可运行&#xff01;&#xff01;&#xff01; BOM是什么&#xff1f; \ufeff 是 Unicode 中的 BOM&#xff0…

open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。

AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…