14年网站开发经验,泰安网络科技公司,百度推广后台登陆入口,个人网站与企业网站区别背景
OLAP#xff08;联机分析处理#xff09; 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP#xff08;联机事务处理#xff09;系统专注于支持日常业务交易和操作不同#xff0c;OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。
OLAP场景…背景
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_VER22.04
ARG OS_IMAGEubuntuFROM ${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_VER17
ARG CLANG_REPOhttps://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 CCclang-${CLANG_VER}
ENV CXXclang-${CLANG_VER}# Clickhouse
ARG CLICKHOUSE_VERv24.8.2.3-lts
ARG CLICKHOUSE_REPOhttps://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 its read next time.Files used to generate this file:config.xml --!-- Config that is used when server is run without config file. --
clickhouseloggerleveltrace/levellog./clickhouse-server.log/log/loggerhttp_port8123/http_porttcp_port9000/tcp_portmysql_port9004/mysql_portlisten_host0.0.0.0/listen_hostpath/tmp/clickhouse/pathmlock_executabletrue/mlock_executableusersmepasswordchangeme/passwordprofiledefault/profilequotadefault/quotaaccess_management1/access_managementnamed_collection_control1/named_collection_control/me/usersprofilesdefault//profilesquotasdefault//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实现时序数据管理和挖掘-腾讯云开发者社区-腾讯云