一、概述
ClickHouse是一种高性能、列式存储的分布式数据库管理系统。它专注于快速数据分析和查询,并且在大规模数据集上表现出色。
在ClickHouse中,数据按列存储而不是按行存储。这种存储方式有许多优点,特别适合分析工作负载。下面是一些与列数据存储相关的关键概念和特点:
列存储:ClickHouse将每一列的数据连续存储在磁盘上,这种存储方式有助于高效地进行压缩和编码。相比之下,传统的行存储数据库会将整行数据存储在一起。
列压缩:ClickHouse使用多种压缩算法来减小列数据的存储空间。这些算法针对不同类型的数据(例如数字、字符串、日期等)进行了优化,可以显著减少存储成本。
列编码:ClickHouse还使用列编码来提高查询性能。列编码是一种将相似值存储在一起的技术,可以减少磁盘读取和解压缩的数据量。
数据分区:ClickHouse支持数据分区,可以将数据划分为更小的部分,以便更高效地执行查询。数据分区可以根据时间、日期、范围或自定义规则进行。
合并树(MergeTree)引擎:ClickHouse的默认存储引擎是MergeTree,它是基于列存储和数据分区的。MergeTree引擎支持高效的数据插入和查询,并且具有自动合并和数据删除的功能。
总的来说,ClickHouse的列数据存储方式以及相关的压缩和编码技术使其在大规模数据分析场景下表现出色。它能够高效地处理海量数据,并提供快速的查询性能。
这里主要侧重使用docker快速部署环境,想了解更多,可以参考我以下几篇文章:
官方文档:https://clickhouse.com/docs/zh
二、ClickHouse 列数据存储优缺点
ClickHouse的列数据存储方式具有许多优点和一些缺点。下面是对ClickHouse列数据存储的主要优缺点的总结:
1)优点
高压缩率:列数据存储允许对每一列使用专门的压缩算法,针对不同类型的数据进行优化,从而实现更高的压缩率。这可以显著减小数据存储的需求,降低硬件成本。
高查询性能:列数据存储适用于分析型工作负载,其中查询通常涉及少量列而涵盖大量行。由于每个查询只需要读取所需的列数据,而不是整行数据,所以列数据存储通常比行存储更快。
数据压缩对查询性能的提升:由于列数据存储的数据压缩,它可以减少磁盘I/O操作和网络传输,提高查询性能。较小的数据量意味着更少的磁盘读取和更快的数据传输速度。
数据分区和合并:ClickHouse支持数据分区和合并树引擎,这使得对大规模数据集的查询和分析更加高效。数据分区允许将数据划分为更小的部分,从而减少需要扫描的数据量。自动合并和数据删除功能确保数据的连续性和性能。
2)缺点
更新和删除操作相对复杂:由于列数据存储的特性,更新和删除操作可能相对复杂。这是因为更新和删除需要定位并修改多个列的数据,而不仅仅是单个行。
不适合高并发的事务处理:ClickHouse的设计目标是快速数据分析和查询,而不是高并发的事务处理。如果应用程序需要大量的并发事务操作和实时写入需求,ClickHouse可能不是最佳选择。
不适合频繁变更的模式:由于列存储的特性,如果数据模式经常发生变化,例如添加或删除列,可能需要进行较大的重建操作。因此,ClickHouse更适合稳定的数据模式和预先定义的查询需求。
总的来说,ClickHouse的列数据存储方式在大规模数据分析场景下具有许多优势,包括高压缩率、高查询性能和灵活的数据分区。然而,它可能不适合需要频繁更新和变更模式的应用程序,并且不是专为高并发的事务处理而设计。
三、ClickHouse 中 Zookeeper 的作用
在 ClickHouse 中,ZooKeeper 扮演着协调和管理分布式集群的角色。它作为一个分布式协调服务,为 ClickHouse 提供了以下功能和作用:
配置管理:ZooKeeper 用于存储和管理 ClickHouse 集群的配置信息,包括集群拓扑、节点信息、数据分片和副本分配等。ClickHouse 节点通过与 ZooKeeper 进行交互,获取集群的配置信息,从而了解集群的拓扑结构和各个节点的角色。
Leader 选举:在 ClickHouse 集群中,每个分片都有一个 Leader 节点负责协调和处理读写请求。ZooKeeper 用于协助进行 Leader 的选举过程,确保在节点故障或重启后能够快速选举出新的 Leader 节点来维持集群的可用性。
监控和健康检查:ZooKeeper 可以用于监控 ClickHouse 集群的健康状态。ClickHouse 节点可以将自身的状态信息注册到 ZooKeeper 上,同时定期向 ZooKeeper 发送心跳信号。这样可以实现集群的实时监控和故障检测,如果节点出现故障或不可用,可以及时做出相应的处理。
分布式锁和协调:ZooKeeper 提供了分布式锁和协调的功能,可以用于在 ClickHouse 集群中实现一致性操作和并发控制。例如,当进行某些需要串行执行的操作时,可以使用 ZooKeeper 的分布式锁来确保只有一个节点可以执行该操作,从而避免冲突和数据不一致的问题。
总的来说,ZooKeeper 在 ClickHouse 中扮演着关键的角色,用于集群的配置管理、Leader 选举、监控和健康检查以及分布式锁和协调。它提供了分布式环境下的协同工作和一致性保证,帮助确保 ClickHouse 集群的稳定运行和可靠性。
四、前期准备
1)部署 docker
2)部署 docker-compose
五、创建网络
六、安装 Zookeeper
七、ClickHouse 编排部署
1)下载 ClickHouse 安装包
这里选择使用yum安装方式,也可以选择离线安装包部署,具体教程可参考官方部署文档:https://clickhouse.com/docs/zh/getting-started/install
2)配置
修改,是本地和远程可登陆,配置文件内容比较多,这里就粘贴出来了。
修改 ,配置密码,其它参数可以根据业务场景进行配置,在行左右
注意上面 配置,上面配置的只是一个占位符,服务启动之前会自动替换。
3)启动脚本 bootstrap.sh
4)构建镜像 Dockerfile
开始构建镜像
5)编排 docker-compose.yaml
文件内容
6)开始部署
7)简单测试验证
8)web 访问
获取对外port
参数说明:
: 集群的命名
: 分片的编号
: 分片的权重
: 副本的编号
: 机器的host名称
: 机器的ip地址
: clickhouse集群的端口
: 是否为你当前查询本地
: 创建用户
领取专属 10元无门槛券
私享最新 技术干货