当前位置: 首页 > article >正文

clickhouse--本地表和分布式表,副本机制,分片集群

1、本地表和分布式表

ck的表分为两种:

  • 分布式表
      一个逻辑上的表,可以理解为数据库中的视图,一般查询都查询分布式表。分布式表引擎会将我们的查询请求路由本地表进行查询,然后进行汇总最终返回给用户。
  • 本地表
      实际存储数据的表。

Distributed Table & Distributed Engine

  ClickHouse分布式表的本质并不是一张表,而是一些本地物理表(分片)的分布式视图,本身并不存储数据。分布式表建表的引擎为Distributed。
Distrbuted_table

Copy Highlighter-hljs
CREATE TABLE IF NOT EXISTS {distributed_table} as {local_table} 
ENGINE = Distributed({cluster}, '{local_database}', '{local_table}', rand())

Distributed引擎需要以下几个参数:

  • 集群标识符
  • 本地表所在的数据库名称
  • 本地表名称
  • 分片键(sharding key) - 可选
      该键与config.xml中配置的分片权重(weight)一同决定写入分布式表时的路由, 即数据最终落到哪个物理表上. 它可以是表中一列的原始数据(如site_id), 也可以是函数调用的结果, 如上面的SQL语句采用了随机值rand(). 注意该键要尽量保证数据均匀分布, 另外一个常用的操作是采用区分度较高的列的哈希值, 如intHash64(user_id).

数据查询的流程

在这里插入图片描述

  1. 各个实例之间会交换自己持有的分片的表数据;
  2. 汇总到同一个实例上返回给用户。

2、基于表的副本机制

① 特点

  • 副本策略表级别
      ClickHouse 的副本机制由表引擎(如 ReplicatedMergeTree)实现,用户可以为每张表单独配置副本数。
  • 最终一致性
      数据写入时,ClickHouse 异步复制到其他副本,可能存在短暂的数据不一致。
  • 依赖 ZooKeeper
      副本之间的协调通过 ZooKeeper 实现(如副本状态、任务分配)。

② 优点

  • 灵活性高
      用户可根据业务需求为不同表配置不同的副本策略。

  • 存储成本可控
      可以为重要表配置多副本,非重要表减少副本。

  • 适合 OLAP 场景
      高吞吐写入、实时查询。

③ 缺点

  • 依赖外部组件(如 ZooKeeper),增加了系统复杂性。
  • 数据一致性较弱(最终一致性)。

④ 与HDFS副本机制的区别

基于集群的副本机制(HDFS)

  • 特点

    • 副本策略全局化:HDFS 的副本机制是集群级别的,所有文件默认存储 3 个副本,用户无法针对单个文件或目录单独配置副本数。
    • 强一致性:数据写入时,HDFS 会同步写入所有副本,确保数据强一致性。
    • 数据块管理:HDFS 将文件切分为固定大小的数据块(如 128MB),每个块独立存储副本。
  • 优点

    • 简单易用,用户无需关心副本管理。
    • 适合通用文件存储场景(如 Hadoop 生态)。
  • 缺点

    • 灵活性差,无法针对特定数据单独配置副本策略。
    • 存储成本高(默认 3 副本)。
总结

在这里插入图片描述

3、分片集群

  副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量数据,对数据的横向扩容没有解决。
  要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,再通过 Distributed 表引擎把数据拼接起来一同使用。
  Distributed 表引擎本身不存储数据,有点类似于 MyCat 之于 MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。
  注意:ClickHouse 的集群是表级别的,实际企业中,大部分做了高可用,但是没有用分片,避免降低查询性能以及操作集群的复杂性。

  • 集群写入流程(3 分片 2 副本共 6 个节点)
    在这里插入图片描述

  • 集群读取流程(3 分片 2 副本共 6 个节点)
    在这里插入图片描述
    详细配置参考


http://www.kler.cn/a/560265.html

相关文章:

  • DeepSeek-R1蒸馏模型与其他模型的区别
  • 【Linux知识】Linux上从源码编译到软件安装全过程详细说明
  • 冒泡排序:简单又易于实现的排序算法
  • 智能生成ER图工具。使用 SQL 生成 ER 图:让数据库设计更高效
  • C/C++高性能Web开发框架全解析:2025技术选型指南
  • 快手弹幕 websocket 分析
  • 用Deepseek直接在word中完成论文的润色(中-中,中-英, 英-中)
  • VantUI官网更新2025,移动端前端开发
  • Python在实际工作中的运用-CSV转XLSX的几个方法
  • 【多模态】46、通俗理解 RLHF/PPO/DPO/GRPO
  • Linux-SaltStack配置
  • Plantsimulation中机器人怎么通过阻塞角度设置旋转135°
  • 基于Python和Neo4j开发的医疗辅助诊断系统的详细实现步骤和代码示例
  • 网页制作08-html,css,javascript初认识のhtml使用框架结构,请先建立站点!
  • RocketMq\Kafka如何保障消息不丢失?
  • 腾讯云大模型知识引擎×DeepSeek赋能文旅
  • ssh被暴力访问了,怎么拦截ip
  • matlab数学建模
  • 11_17日项目笔记——制作“全屏播放页面”
  • 数仓搭建实操(传统数仓oracle):[构建数仓层次|ODS贴源层]