ClickHouse的分布式查询流程

简介: ClickHouse的分布式查询流程

ClickHouse的分布式查询流程涉及多个步骤和组件,以下是其主要流程和相关概念的详细说明:

  1. 副本选择
    ClickHouse通过load_balancing参数控制副本的选择策略,主要有以下几种方式:

    • random:默认值,选择错误次数最少的副本,如果多个副本错误次数相同,则随机选择一个。
    • nearest_hostname:选择错误次数最少的副本,如果多个副本错误次数相同,则选择与客户端主机名差异最小的副本。
    • in_order:选择错误次数最少的副本,如果多个副本错误次数相同,则按照配置文件中定义的副本顺序选择。
    • first_or_random:选择错误次数最少的副本,如果多个副本错误次数相同,则首先选择配置文件中定义的第一个副本,如果第一个不可用,则随机选择一个。
  2. 多分片查询流程
    当在ClickHouse集群中执行分布式查询时,查询语句会被发送到各个分片节点。每个分片节点会执行本地查询,并将结果返回给发起查询的节点,最后由发起节点进行结果合并。例如:

    SELECT * FROM distribute_test_all;
    

    这条查询语句会在各个分片节点上执行SELECT * FROM distribute_test_local,然后将结果合并返回。

  3. global in
    global in是一种特殊的查询操作,它允许在分布式表中进行跨分片的子查询。例如:

    SELECT * FROM distribute_test_all WHERE name = '一' AND id GLOBAL IN (SELECT id FROM distribute_test_all WHERE name = 'yi');
    

    这条查询语句首先在各个分片节点上执行子查询,获取满足条件的id,然后将这些id在所有分片节点上进行查询,最后合并结果。

  4. global join
    global join是另一种跨分片的查询操作,它允许在分布式表中进行跨分片的连接操作。例如:

    SELECT * FROM distribute_test_all a GLOBAL JOIN distribute_score_all b ON a.id = b.id;
    

    这条查询语句首先在各个分片节点上执行连接操作,然后将结果合并返回。具体的查询流程包括:

    1. 在各个分片节点上执行连接操作。
    2. 将连接结果在所有分片节点上进行合并。
  5. 分布式表的写入流程
    分布式表的写入流程包括以下步骤:

    1. 数据先写入一个分片(例如:分片1)。
    2. 属于本分片的数据写入本地表,属于其他分片的数据先写入本分片的临时目录。
    3. 该分片与集群中其他分片建立连接。
    4. 将写入本地临时文件的数据异步发送到其他分片。
  6. 分布式表的读取流程
    分布式表的读取流程包括以下步骤:

    1. 集群多副本时根据负载均衡选择一个副本。
    2. 将分布式查询语句转换为本地查询语句。
    3. 将本地查询语句发送到各个分片节点执行查询。
    4. 再将返回的结果执行合并。
  7. 分布式表的数据写入方案

    • 直接写入:直接对ClickHouse的分布式表执行写入操作,ClickHouse会按照分片键和权重通过网络向各个分片写入数据。
    • 自行决定数据分布并直接将数据写入本地表:用户可以按照自己的业务需求自行决定数据如何分布,并直接对本地表执行写入操作。
  8. 分布式表中副本的处理方式

    • 底层表为普通表:由分布式表负责将数据复制到所有的副本上。
    • 底层表为复制表:由复制表负责将数据同步到副本上,分布式表会忽略副本的数据复制过程。

通过以上步骤和机制,ClickHouse能够实现高效的分布式查询和数据管理。

相关文章
|
3月前
|
存储 关系型数据库 分布式数据库
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
PolarDB 并行查询问题之分布式查询执行过程中的数据分发如何解决
45 1
|
23天前
|
分布式计算 Hadoop 网络安全
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-08-HDFS集群 基础知识 命令行上机实操 hadoop fs 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
26 1
|
23天前
|
存储 机器学习/深度学习 缓存
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
Hadoop-07-HDFS集群 基础知识 分布式文件系统 读写原理 读流程与写流程 基本语法上传下载拷贝移动文件
37 1
|
3月前
|
存储 运维 NoSQL
分布式表的写入流程
分布式表的写入流程
|
3月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
103 1
|
3月前
|
存储 运维 NoSQL
分布式表的写入流程
分布式表的写入流程
|
5月前
|
存储 关系型数据库 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替"Greater Seattle Area"),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
55 6
|
6月前
|
存储 Cloud Native 关系型数据库
PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
【5月更文挑战第14天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
302 2
|
5月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
45 0
|
5月前
|
SQL JSON NoSQL
【DDIA笔记】【ch2】 数据模型和查询语言 -- 关系模型与文档模型
【6月更文挑战第6天】关系模型是主流数据库模型,以二维表形式展示数据,支持关系算子。分为事务型、分析型和混合型。尽管有其他模型挑战,如网状和层次模型,但关系模型仍占主导。然而,随着大数据增长和NoSQL的出现(如MongoDB、Redis),强调伸缩性、专业化查询和表达力,关系模型的局限性显现。面向对象编程与SQL的不匹配导致“阻抗不匹配”问题,ORM框架缓解但未完全解决。文档模型(如JSON)提供更自然的嵌套结构,适合表示复杂关系,具备模式灵活性和更好的数据局部性。
49 0