面试杂谈之clickhouse

作者 : admin 本文共1117个字,预计阅读时间需要3分钟 发布时间: 2024-06-10 共1人阅读

clickhouse

之前定时任务读取binlog 批量同步clickhouse

kafka 批量给clickhouse灌数据

  • clickhouse列式数据库,运行时创建库表,加载数据查询
  • 数据压缩,磁盘存储,向量化引擎,利用CPU多核并行处理
  • 缺少完整的update/delete,不支持事务,不适合k-v blob等文档型数据库

基础

column和field:接口和实现 icolumn对数据的各种运算

dataType序列化反序列化,二进制/文本列/值  直接与表的数据类型

   idataType存储元数据,数据的序列化和反序列化由dataType负责,对应的数据类型实现

   数据读取交给column和field获取

块:block 内存中表的子集的容器,icolumn/idataType/列名 构成的集合

  数据操作面向block进行的,流的形式

blockStream:读取 数据转换 写入

  iblockInputStream数据读取和关系运算,read 下一块数据

      数据定义DDL/关系运算/表引擎对应

  iblockOutputStream数据输出到下一个环节,write 

数据读写:readBuffer/writeBuffer 抽象类 面向字节输入输出

    连续缓冲区/指向缓冲区某个位置的指针:处理文件 描述符 网络套接字 压缩

表table:istorage接口,表引擎

   read方法返回iblockInputStream 并行处理数据,多块输入流一个表并行读取 

   ast查询被传递给read方法,表引擎用它判断是否使用索引,表中读取更少的数据

解析器parser:递归解析

解释器Interpreter:ast 创建流水线  块输入 输出流,将sql 递归下降 解析ast语法树

函数:functions 

  普通函数:不改行数 独立处理每行数据,block为单位 向量查询一整列

  聚合函数:状态函数,可序列化 分布式查询执行期间通过网络传输/内存不够的时候写入硬盘

         传入的值激活到某个状态,从该状态取结果

引擎

mergeTree,多种表引擎 最基础 主键索引/数据分区/数据副本/采样

   写入一批数据,数据以数据片段形式写入磁盘,不可修改片段

   后台定期合并片段,相同分区合并一个新的

   分区目录保存到磁盘,数据写入不断创建新分区目录,后台任务合并

数据分区

分区id决定,分区键 *字段表达式声明

  • 不指定分区键,不适用 默认all 所有数据都写入all分区
  • 整形,无法转换日期YYYYMMDD,直接按照整形字符串输出
  • 日期,YYYYMMDD格式化后字符串形式输出,分区ID
  • 其他类型,128位hash取值作为分区id值

http://zhuanlan.zhihu.com/p/657456888

   

本站无任何商业行为
个人在线分享 » 面试杂谈之clickhouse
E-->