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 限制​​等特性,通过合理选择表引擎、预聚合和分区分片优化性能。

相关推荐
二狗哈4 分钟前
制作一款打飞机游戏87:最后冲刺
java·前端·游戏
Chesnut.16 分钟前
【2025.08.06最新版】Android Studio下载、安装及配置记录(自动下载sdk)
android·java
jackson凌41 分钟前
IDEA快捷键壁纸分享
java·ide·intellij-idea
曼波の小曲1 小时前
运维学习Day20——MariaDB数据库管理
运维·数据库·学习
静谧之心1 小时前
分层架构下的跨层通信:接口抽象如何解决反向调用
java·开发语言·设计模式·架构·golang·k8s·解耦
摸鱼一级选手1 小时前
Java 集合框架深层原理:不止于 “增删改查”
java·开发语言·后端
Derek_Smart1 小时前
从零构建高并发锁工具:基于AOP与ReentrantLock的轻量级分布式锁实践
java·jvm·spring boot
小李同学_LHY4 小时前
Redis一站式指南二:主从模式高效解决分布式系统“单点问题”
java·数据库·redis·缓存
chenglin0165 小时前
ClickHouse、Doris、OpenSearch、Splunk、Solr系统化分析
clickhouse·solr·lucene