clickhouse深入浅出

news2024/11/28 0:49:32

基础知识+原理

极致压缩率 极速查询性能

     列式数据库管理 ,读请求多 大批次更新或无更新  读很多但用很少  大量的列   列的值小数值/短字符串   一致性要求低   

     DBMS:动态创建/修改/删除库 表 视图,动态查/增/修/删,用户粒度设库/表权限,分布式,备份恢复

    向量化执行引擎:优化循环,SIMD CPU寄存器实现数据并行;

    数据分片 分布式查询:1分片对应1服务节点 

         本地表=数据分片,分布式表不存数据,本地表访问代理

    列式存储:减少查询所需要扫描的数据量 

       数据压缩LZ4:步长匹配扫描数据,编码转换重复部分 ;降低IO和存储的压力

多线程:

大小写敏感

多样化表引擎:合并树 内存 文件 接口 

多主架构:对等角色 all节点功能相同  规避单点故障

总结:高效列式存储引擎,实现了数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等丰富功能

存储层

列式存储:只需要读取参与计算的列,减少io 加速查询

数据有序存储:按某列sort by,相同sort key数据联系存储 有序摆放,少量block 利用page cache

主键索引:每列按index granularity(8192)划分,第一行mark行  二分查找 index granularity 加速查

数据增改删:alter变更,异步执行时立即返回,实际排队等待执行

   mutation:找到分区 重建 新换旧,不可撤 顺序执行 ,推荐一次性更新大量数据

模块

  •    column列对象 field是基础映射单元,不同类型不同实现 columnString columnArray,单个值field聚合13中数据类型和相应处理逻辑 uint64 null  string array
  • dataType序列化反序列化,具体实现=》对应数据类型的实例,数据读取从column field获取
  • block 表的子集,数据 类型 列名组成,ColumnWithTypeAndName聚合column读取数据,dataType序列化
  • block流,IBlockInputStream(60种)读取 关系运算,IBlockOutputStream输出到下一环节 表引擎相关
  • table IStorage接口,子类实现 DDL read write,查询交给Interpreter解释器处理

ClickHouse特性及底层存储原理-CSDN博客

实践

Java Language Client Options for ClickHouse | ClickHouse Docs

实践这个就先不写了,直接上一个完整的博客例子

springboot整合mybatis-plus、clickhouse、mysql多数据源_springboot 配置mysql 和clickhouse双数据源-CSDN博客

GitCode - 开发者的代码家园

SpringBoot2 集成 ClickHouse 实现高性能数据分析_springboot如何集成clickhouse-CSDN博客

问题 

活动及用户+匹配模块 收集 埋点数据 异步kafka 活动等业务消费 MybatisPlus 写入clickhouse

 消费等TPS大几千, too many  parts

     clickhouse最小操作单元block,写入借助zk的唯一自增的blockId,按照PartitionId_blockId_blockId_0生成data parts,后台merge线程 单次耗时5min,分钟内 多个小文件合并成PartitionId_MinBlockNum_MaxBlockBum_Level,32个merge线程池,频繁插入 merge压力大 处理不了,默认clickhouse一次合并超300个文件就报错了

   解决:少批多条  调小写入的并发数,调大批处理数据size间隔 减少文件个数,1s写入一次 

 每次单条写入

     MybatisPlussavebatch 最大sql   4M,最大单次1000条,再多的话便单条写入      

     改为其他方式写入,原生jdbc/flink,自定义sink 一定批次/执行checkpoint写入一次

 写入性能很差

     clickhouse底层使用httpclient,单条频繁写入效率很低  

解决

   定时任务,有数据 放到队列1  当数据过大|10-15s后  队列1放入队列2    队列2批量写入clickhouse 清空队列1 

优化

  25亿数据  耗时比较长 

大部分按照时间来查询,执行计划分析sql

//打印执行日志:执行日志级别trace
clickhouse-client -u xxxx --password xxxxxx --send_logs_level=trace <<< ‘your query sql’ > /dev/null
没有用到主键索引

 空值使用无意义的字符串填充,clickhouse底层将空值单独文件存储,影响性能

 明确select查询字段

 多线程查询

  7天数据放入一个分区,分区查询

  直接使用count()查询数据量

   使用高级函数,multilf argMax 

   聚合外推

号外:RuoYi 

 RuoYi

若依框架的介绍与基本使用(一起走进若依框架的世界)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

llama2.c与chinese-baby-llama2语言模型本地部署推理

文章目录 简介Github文档克隆源码英文模型编译运行中文模型&#xff08;280M&#xff09;main函数 简介 llama2.c是一个极简的Llama 2 LLM全栈工具&#xff0c;使用一个简单的 700 行 C 文件 ( run.c ) 对其进行推理。llama2.c涉及LLM微调、模型构建、推理端末部署&#xff08…

15.2024

全排列---邻里交换法 代码&#xff1a; public class 第十五题 {static int count;static int a[]{1,2,3,4,5,6,7,8,9};public static void main(String[] args) {f(a,0);System.out.println(count/6);}public static void f(int a[],int step){if(stepa.length-1){if (a[0]a…

大语言模型开源数据集

本文目标&#xff1a;汇聚目前大语言模型预训练、微调、RM/RL、评测等全流程所需的常见数据集&#xff0c;方便大家使用&#xff0c;本文持续更新。文章篇幅较长&#xff0c;建议收藏后使用。 一、按语料类型分类 1、维基百科类 No.1 Identifying Machine-Paraphrased Plagia…

Matlab:任意的三维Cubic空间中生成大小不一样的小球,并画出截面

生成小球和大球的代码块 clear all clc close all % entorid3D rand(10,3, 0.1,0.9);% for c11 0.05:0.3:0.95 % for c12 0.05:0.3:0.95 % for c13 0.05:0.3:0.95 % [x1,y1,z1] ellipsoid(c11, c12, c13, 0.05, 0.05, 0.05,100); % …

Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色

需求 目前 找到对应的css样式进行修改 修改后 css样式 >>>.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F !important;}第二个问题 修改 表格空数据时&#xff0c;边框颜色 css样式 >>>.el-table::before {background-color: tra…

C/C++的前置++、后置++以及前置--、后置--使用的详细讲解

在c/c语言中&#xff0c;变量的自增和自减经常被使用到&#xff0c;所以今天就来个详细讲解。本次讲解用到的语言是c语言&#xff0c;在c中的原理也是一样的。 变量自增自减分为四种情况&#xff0c;每种情况的结果都有所差异&#xff0c;四种情况分别为前置、后置、前置--、后…

代码整洁之道【2】--函数

关于函数部分的总结 一、函数只做一件事 函数应该只做一件事、做好这件事、只做这件事。 判断函数是否不止做了一件事&#xff0c;还有一个方法&#xff0c;就是看是否能再拆出一个函数&#xff0c;该函数不仅只是单纯地重新 二、函数尽量不要太长 按照作者的理论&#xff…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证&#xff1a; 1.1 消息确认&#xff08;Acknowledgements&#xff09;&#xff1a; 消费者在接收到消息后&#xff0c;默认情况下RabbitMQ会自动确认消息&#xff08;autoAcktrue&#xff09;。为保证消息可靠性&#xff0c;可以…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框&#xff08;忘截图了&#xff09;里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件&#xff08;在我这里好像是VM-Win10 x64.vmx&#xff0c;VM-Win10 x64是我给虚拟机取的名字&#xff09;在被使用中。 找到这个目录&#xff0c;删除.…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中&#xff0c;CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。 搭建…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组&#xff0c;并把原来的数组复制到新数组中 注意&#xff1a; 插入的维度要保证所有数组的长度是相同的如果没有指定轴&#xff0c;数组会被扁平处理 ndarr…

MOMENT: A Family of Open Time-series Foundation Models

MOMENT: A Family of Open Time-series Foundation Models PDF: https://arxiv.org/pdf/2402.03885.pdf Code: https://anonymous.4open.science/r/BETT-773F/README.md 1 概述 MOMENT是一个用于通用时间序列分析的开源基础模型系列。由于缺少大型公共时间序列存储库、时间序…

matlab:有限差分求解纳维尔(Navier)边界的双调和(Biharmonic)方程,边值为零

我们考虑如下形式的双调和方程的数值解 其中&#xff0c;Ω是欧氏空间中的多边形或多面体域&#xff0c;在其中&#xff0c;d为维度&#xff0c;具有分段利普希茨边界&#xff0c;满足内部锥条件&#xff0c;f(x) ∈ L2(Ω)是给定的函数&#xff0c;∆是标准的拉普拉斯算子。算…

JVM规范中的运行时数据区

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

YOLOv9改进策略 :卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,不降低精度的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡…

QT windeployqt打包出现无法正常启动问题

QT 通过windeployqt 打包后出现的问题 原因QT构建选择的是64位的 但是windows下运行的却是32位的 步骤打开32的所在路径 一般在上一级目录会有安装好的64位的MSVC工具 运行打包即可

装饰建材商城网满足家装行业需求,改变传统装修市场

装饰建材商城网满足家装行业需求&#xff0c;改变传统装修市场 随着国内楼市的火爆发展&#xff0c;家装行业可谓是炙手可热。人们关于家装的需求也开始从过去简单的宜居&#xff0c;开始向多元化需求转变&#xff0c;如环保、健康、安全、绿色、时尚等等。加上互联网的快速发展…

电能质量测试仪的功能特点

武汉凯迪正大电能质量测试仪功能特点 1、多通道测量&#xff1a;4个电压通道、4个电流通道同时测量。 2、电气参数测量&#xff1a;可同时测量电压幅值、电流幅值、相位、频率、有功功率、无功功率、功率因数等参数&#xff1b; 3、可测量2-64次的电压谐波和电流谐波含量&am…

C语言:指针详解(1)

目录 一、内存和地址 1.内存 2.究竟该如何理解编址 二、指针变量和地址 1.取地址操作符(&) 2.解引用操作符(*) 3.指针变量的大小 三、指针变量类型的意义 1.指针的解引用 2.指针-整数 3.void*指针 四、const修饰指针 1.const修饰变量 2.const修饰指针变量 五…

【计算机毕业设计】企业仓储管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…