Java学习第一百一十七部分——ClickHouse

目录

一、前言简要介绍

二、核心特性优势

三、典型应用场景

四、关键技术架构

五、性能表现优化

六、下载安装使用

七、总结归纳概述


一、前言简要介绍

ClickHouse 是一款由俄罗斯 Yandex 开发的高性能​​列式存储数据库​​,专为 ​​OLAP(在线分析处理)​​ 场景设计,以​​毫秒级响应海量数据查询​​著称。

二、核心特性优势

1.列式存储与高效压缩

  • 数据按列存储,查询仅读取所需列,减少 I/O 开销;同列数据类型一致,压缩率更高(可达 5-10 倍),显著降低存储成本。

  • 支持多种压缩算法(如 LZ4、ZSTD),可根据列数据类型优化选择。

2.向量化执行引擎

  • 利用 CPU 的 ​​SIMD 指令集​​(如 SSE4.2),单指令处理多数据,减少函数调用开销,提升并行计算效率。

3.分布式与水平扩展

  • 采用 ​​Multi-Master 多主架构​​,无单点故障,支持分片(Sharding)与副本(Replication),数据自动均衡。

  • 通过分布式表​​代理查询,实现多节点并行计算,吞吐量线性扩展。

4.灵活的数据模型与SQL兼容

  • 支持嵌套结构(Nested)、数组(Array)、Map 等复杂类型,适配多样化数据。

  • 兼容 ANSI SQL,提供标准 JOIN、GROUP BY 等语法,学习成本低。

5.数据生命周期管理(TTL)

  • 支持行、列、分区级别的自动过期清理,适用于日志、监控等时效性数据。

三、典型应用场景

​​场景​​ ​​案例​​
​​实时日志分析​​ 每秒百万级日志写入,快速分析 Web/App 访问日志,定位异常 。
​​用户行为分析​​ 电商平台追踪用户点击、购买路径,实时计算转化率 。
​​时序数据处理​​ 存储传感器、设备监控指标,支持时间窗口聚合查询 。
​​BI 报表与实时大屏​​ 亿级数据聚合生成多维度报表,响应速度达秒级 。
​​广告效果分析​​ 分析广告点击流,实时计算 ROI 和用户画像 。

⚠️ ​​不适用场景​​:高频事务(OLTP)、键值查询、频繁数据修改(如 UPDATE/DELETE)、ACID 事务需求。

四、关键技术架构

1.表引擎机制不同引擎适配不同场景

​​引擎类型​​ ​​特点​​ ​​适用场景​​
MergeTree 支持分区、排序、索引,基础高性能引擎 通用 OLAP 场景
ReplacingMergeTree 按版本去重,避免重复数据 日志消重
SummingMergeTree 自动合并相同 Key 数据并求和 实时聚合报表
Kafka 直接消费 Kafka 数据写入 流式数据处理

2.数据分区与索引

  • ​​分区(PARTITION BY)​​:按月/周等分区,加速范围查询(如 toYYYYMM(date))。

  • ​​排序键(ORDER BY)​​:数据按排序键存储,优化等值/范围查询(如 ORDER BY (user_id, timestamp))。

3.分布式集群设计

  • 分片策略支持随机、Hash 或自定义表达式,数据分布灵活。

  • 副本通过 ZooKeeper 同步,保障高可用。

五、性能表现优化

1.性能基准

  • ​​查询速度​​:单机每秒处理 ​​1--2 亿行​​,分布式环境下线性扩展。

  • ​​写入吞吐​​:建议批量写入(≥1000 行/次),单机写入速度 ​​50--200 MB/s​​(约 5万--20万行/秒)。

2.优化实践

  • ​​避免高频小写入​​:合并为批量提交,减少 IO 压力。

  • ​​慎用 JOIN​​:大表 JOIN 性能较低,优先用宽表或预聚合。

  • ​​利用物化视图​​:预计算指标,加速聚合查询。

六、下载安装使用

⬇️ 一、下载安装

  1. Windows系统
  • ​​下载​​:访问官网下载64位安装包。

  • ​​安装​​:双击安装程序,可选添加环境变量。

  • ​​配置环境变量​​:

    • 将ClickHouse的bin目录(如C:\Program Files\ClickHouse\bin)加入系统PATH。
  • 启动服务:

    复制代码
    clickhouse-server   # 启动服务
    clickhouse-client   # 连接客户端
  • ​​验证​​:浏览器访问http://localhost:8123/,显示欢迎页即成功。

  1. Linux系统(Ubuntu/CentOS)
  • ​​APT安装(Debian/Ubuntu)​​:

    复制代码
    sudo apt-get install apt-transport-https ca-certificates dirmngr
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
    echo "deb https://repo.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
    sudo apt-get update
    sudo apt-get install clickhouse-server clickhouse-client
    sudo service clickhouse-server start  # 启动服务
  • ​​YUM安装(CentOS/RHEL)​​:

    复制代码
    sudo yum install yum-utils
    sudo rpm --import https://repo.clickhouse.com/CLICKHOUSE-KEY.GPG
    sudo yum-config-manager --add-repo https://repo.clickhouse.com/rpm/clickhouse.repo
    sudo yum install clickhouse-server clickhouse-client
    sudo systemctl start clickhouse-server  # 启动服务
  • ​​Tgz包安装(通用)​​:

    • 阿里云镜像下载4个组件包:

      复制代码
      clickhouse-common-static、clickhouse-server、clickhouse-client、clickhouse-common-static-dbg(可选)
    • 按顺序解压并执行安装脚本:

      复制代码
      tar -xzvf clickhouse-common-static-*.tgz
      sudo ./clickhouse-common-static-*/install/doinst.sh
      # 重复解压并安装其他组件包
  1. Docker安装(跨平台)

    docker run -d --name clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server
    docker exec -it clickhouse-server clickhouse-client # 连接客户端

⚙️ ​​二、关键配置​​

  1. ​​允许远程访问​​

    • 修改/etc/clickhouse-server/config.xml

      复制代码
      <listen_host>0.0.0.0</listen_host>  <!-- 取消注释 -->
    • 重启服务:sudo systemctl restart clickhouse-server

  2. ​​目录结构​​

    • 配置文件:/etc/clickhouse-server/(含config.xmlusers.xml

    • 数据存储:/var/lib/clickhouse/

    • 日志文件:/var/log/clickhouse-server/

🖥️ 三、基本使用

​​1. 命令行操作​​

复制代码
clickhouse-client -m  # 启动客户端(支持多行语句)
  • 示例查询:

    复制代码
    SELECT * FROM system.tables LIMIT 10;  -- 查看系统表
    CREATE TABLE test (id UInt32, name String) ENGINE = MergeTree ORDER BY id;  -- 建表

​​2. JDBC连接(Java)​​

  • Maven依赖:

    复制代码
    <dependency>
        <groupId>ru.yandex.clickhouse</groupId>
        <artifactId>clickhouse-jdbc</artifactId>
        <version>0.2.6</version>
    </dependency>
  • 连接代码:

    复制代码
    Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
    Connection conn = DriverManager.getConnection("jdbc:clickhouse://localhost:8123/test");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT 1");  // 执行查询

​​3. 图形化工具​​

  • ​​DBeaver​​:

    创建连接时选择ClickHouse驱动,填写IP、端口(默认8123),无密码可留空。

⚠️ ​​四、注意事项​​

1.​​系统要求​​

  • CPU需支持SSE 4.2指令集(验证命令:grep -q sse4_2 /proc/cpuinfo)。

  • 避免Windows生产部署(官方未优化支持)。

2.​​安全配置​​

  • 默认无密码,生产环境需在users.xml设置密码及权限。

3.​​性能优化​​

  • 批量写入(≥1000行/次)提升吞吐;

  • 使用MergeTree引擎时合理设计分区键(如PARTITION BY toYYYYMM(date))。

🔄 五、服务管理

​​操作​​ ​​命令(Linux)​​ ​​命令(Windows)​​
​​启动服务​​ sudo systemctl start clickhouse-server clickhouse-server
​​停止服务​​ sudo systemctl stop clickhouse-server Ctrl+C 或关闭终端
​​状态查询​​ sudo systemctl status clickhouse-server 任务管理器查看进程

💡 ​​总结​​:ClickHouse安装需匹配操作系统类型(推荐Linux),通过配置开放远程访问后,可使用客户端、JDBC或图形工具操作数据。注意生产环境的安全设置与性能优化,避免高频小写入和复杂JOIN。

七、总结归纳概述

ClickHouse 凭借列式存储、向量化引擎与分布式架构​​,成为实时分析场景的首选,尤其适合​​读多写少、数据量大、低延迟查询的需求。使用时需注意其​​弱事务支持、JOIN 限制​​等特性,通过合理选择表引擎、预聚合和分区分片优化性能。

相关推荐
想进部的张同学9 小时前
hilinux-3599---设备学习---以及部署yolo
学习·yolo·海思
HyperAI超神经10 小时前
【vLLM 学习】Rlhf
人工智能·深度学习·学习·机器学习·vllm
奋进的芋圆10 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin10 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model200510 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉11 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国11 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824811 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈11 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9912 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc