码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Clickhouse分布式表式对本地表的对比


            ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它的表分为两种:一种是分布式表,一种是本地表:

    • 分布式表:一个逻辑上的表,可理解为数据库中的view,一般查询都是分布式表,分布式表的引擎会将读请求路由到本地表进行查询,然后汇总输出。这里强调一点:分布式表本身不存储数据,它只是提供了一个可以分布式访问数据的框架。
    • 本地表:实在存储数据的表

            当然,ClickHouse还有其他形式的表,如

    • 副本表:数据在ck集群上,每个分片有多个副本,在集群中,要保证高可用,数据就必须有冗余——即副本。
    • 外部表:ck中只有元数据,数据在hdfs等外部存储介质中

            在ck中,副本机制其实也称为『复制表』,这是因为它工作在表级别上,而不是集群级别(如HDFS),所以在同一个服务节点中,每张表的引擎选择是相互独立的,他们的分片与副本也是互相独立的。目前支持复制表的引擎是ReplicatedMergeTree引擎族。

     

    下面谈谈数据的写入。

            数据是直接写入本地表还是分布式表呢? 看了相关的文章,都是建议直接写本地表,如

    [Question] insert data via the distributed table or local table · Issue #1854 · ClickHouse/ClickHouse · GitHub

    Sharding key in Distributed table is used only at INSERT.
    For SELECTs, sharding key does not make sense and Distributed tables always query all shards.

    Insertion to local tables is more efficient and more flexible than insertion to Distributed table.
    It is more efficient because it avoids excessive copying of temporary data.
    It is more flexible because you can use any sophisticated sharding schemas, not only simple sharding by modulo of division.

    Insertion to local tables require more logic on your client application and can be more difficult to use. But also it is conceptually more simple.

    If your queries rely on some assumptions on data distribution, like queries that use IN or JOIN (joining co-located data) instead of GLOBAL IN, GLOBAL JOIN, then you have to maintain correctness by yourself.

      正如上面的建议:

    • 分布式表中的sharding key仅在insert中使用,对于查询sharding key是没有意义的,分布式表总要查询所有分片
    • 插入本地表比插入分布式表更加有效、如灵活。
      • 本地表可避免临时数据的过度复制
      • 直接写某个节点的分布式表,需要建立N-1个连接(N是集群节点数)分发数据,导致连接数占用
      • 当每个节点异常,分布式表分把写入的数据放到tmp目录,无限制的重试发送
      • 分布式表的设计主要是读而不是写

        当然插入数据量不大时,本地表与分布式表都可以。

  • 相关阅读:
    全局路由拦截、局部路由拦截
    k8s: 资源需求设定
    基于Java协同算法实现的仿今日头条资讯网站设计
    (面试题) 面试官:如何在forEach的循环里使用break
    简单易懂的 全景图高清下载方法以及原理简要解析(支持下载建E、720yun、酷雷曼、景站、酷家乐、百度街景原图)
    “双新”背景下需家校社协同培养孩子核心素养
    程序分析与优化 - 11 多分支分析
    从代码层面分析STM32 标准库和HAL库的差异
    自媒体从业人员常用软件/工具一览(涵盖视频、思维导图、PPT、问卷调查、H5、公众号、pdf等各方面)
    Linux·字符设备和杂项设备
  • 原文地址:https://blog.csdn.net/shuaisunny/article/details/126171630
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号