clickhouse深入浅出

基础知识+原理

极致压缩率 极速查询性能

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

     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.rhkb.cn/news/308248.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据治理专家岗位的能力模型

数据治理专家的角色要求其具备全方位的专业素养与技能&#xff0c;不仅要有深厚的业务理解与数据技术功底&#xff0c;还需展现出卓越的领导力、团队协作与沟通能力&#xff0c;以驱动组织内部数据治理工作的高效运行与持续优化。以下是对数据治理专家各项能力的深入解读&#…

mac 配置前端开发环境brew,git,nvm,nrm

我的电脑是mac 3 pro 一、配置Homebrew 打开终端&#xff0c;执行指令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"查看版本 brew -v 安装nvm brew install nvm 再执行 brew reinstall nvm 我这边安装好了…

JavaScript中的Blob、Buffer、ArrayBuffer和TypedArray详解

文章的更新路线&#xff1a;JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题&#xff08;HTML基础知识和CSS基础知识已经更新完毕&#xff09; 正文 摘要&#xff1a;本文详细介绍了JavaS…

kafka学习记录

文章目录 windows单机版kafka搭建步骤主题的增删改查操作消息的生产与消费 Windows集群版kafka搭建步骤 prettyZoo 尚硅谷Kafka教程&#xff0c;2024新版kafka视频&#xff0c;零基础入门到实战 【尚硅谷】Kafka3.x教程&#xff08;从入门到调优&#xff0c;深入全面&#xff0…

python使用uiautomator2操作雷电模拟器9并遇到解决adb 连接emulator-5554 unauthorized问题

之前写过一篇文章 python使用uiautomator2操作雷电模拟器_uiautomator2 雷电模拟器-CSDN博客 上面这篇文章用的是雷电模拟器4&#xff0c;雷电模拟器4.0.78&#xff0c;android版本7.1.2。 今天有空&#xff0c;再使用雷电模拟器9&#xff0c;android版本9来测试一下 uiauto…

谷歌不收录怎么办?

谷歌不收录首先你要确认自己网站有没有出问题&#xff0c;比如你的网站是否已经公开&#xff0c;rboot是否允许搜索引擎进来&#xff0c;网站架构有没有问题&#xff0c;面包屑的结构是否有问题&#xff0c;确保你的网站没问题 接下来就是优化这个过程&#xff0c;有内容&#…

基于博客系统的功能测试和性能测试

目录 项目介绍 项目功能 设计测试用例 功能测试--自动化测试 测试代码 登录测试 博客详情页测试 发布博客测试 删除博客测试 退出账号测试 性能测试 项目介绍 1.博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将…

C语言 数据输入输出

本文 我们来说 数据的输入与输出 及数据的运算 在程序的运算工程中 往往需要输入一些数据 而程序的运算 所得到的运算结果又需要输出给用户 因此 数据的输入与输出 就显得非常重要 在C语言中 不提供专门的输入输出语句 所有的输入输出 都是通过对标准库的调用 来实现的 一般 …

权威Scrum敏捷开发企业级实训/敏捷开发培训课程

课程简介 Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…

idea工具使用Tomcat创建jsp 部署servlet到服务器

使用tomcat创建jsp 在tomcat官网中下载对应windows版本的tomcat文件 Apache Tomcat - Welcome! 解压到系统目录中&#xff0c;记得不要有中文路径 新建一个java项目 点击右上角 点击加号 找到Tomcat Service的 Local 点击右下角的Fix一下&#xff0c;然后ok关闭 再重新打开一…

Python | Leetcode Python题解之第27题移除元素

题目&#xff1a; 题解&#xff1a; class Solution:def removeElement(self, nums: List[int], val: int) -> int:a 0b 0while a < len(nums):if nums[a] ! val:nums[b] nums[a]b 1a 1return b

SpringCloudalibaba之Nacos的配置管理

Nacos的配置管理 放个妹子能增加访问量&#xff1f; 动态配置服务 动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 动态配置消除了配置变更时重新部署应用和服务的需要&#xff0c;让配置管理变得更加高效和敏捷。 配置中心化管…

AI虽强,搜索引擎仍不可或缺

AI 领域正以前所未有的速度发展&#xff0c;大模型的发布变得愈发频繁&#xff0c;模型的规模也在持续扩大。如今&#xff0c;大模型的起点已经攀升至数十亿参数&#xff08;数十 B&#xff0c;B 是 Billion 的简写&#xff0c;10 亿&#xff09;&#xff0c;其功能之广泛&…

搭建个人智能家居 4 -WS2812B-RGB灯

搭建个人智能家居 4 - WS2812B-RGB灯 前言说明ESPHomeHomeAssistant 前言 上一篇文章我们已经完成了第一个外设的添加&#xff08;一个LED灯&#xff09;&#xff0c;今天接着来“壮大”这个系统&#xff0c;添加第二个外设“RGB灯”。 环境搭建可以回顾前面的文章。前文回顾&…

arm工作模式、arm9通用寄存器、异常向量表中irq的异常向量、cpsr中的哪几位是用来设置工作模式以及r13,r14,15别名是什么?有什么作用?

ARM 首先先介绍一下ARM公司。 ARM成立于1990年11月&#xff0c;前身为Acorn计算机公司 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片 提供基于ARM架构的开发设计技术软件工具评估版调试工具应用软件总线架构外围设备单元等等CPU中…

Java 基于微信小程序的智能停车场管理小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【七 (1)FineBI FCP模拟试卷-股票收盘价分析】

目录 文章导航一、字段解释二、需求三、操作步骤1、添加计算字段&#xff08;每月最后一天的收盘价&#xff09;2、绘制折线图 文章导航 【一 简明数据分析进阶路径介绍&#xff08;文章导航&#xff09;】 一、字段解释 Company Name&#xff1a;公司名称 Date&#xff1a;…

亚远景科技-ASPICE 4.0-HWE硬件过程的范围 The Technical Scope of HW process

ASPICE 4.0中的HWE process是电气和电子硬件的技术范畴&#xff0c;涵盖了硬件工程中的需求分析、设计和验证活动&#xff0c;但不包括以下活动&#xff1a; 1. 系统级工程过程。既不包括机电一体MECHATRONIC&#xff0c;也不包括ECU特定电子控制单元的开发。 2. 硬件采购过程…

TQ15EG开发板教程:在MPSOC上运行ADRV9009(vivado2018.3)

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在最后面。在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases选择版…

Python根据主播直播时间段判定订单销售额归属

写在前面&#xff1a;最近在群里看到一个这样的直播电商的场景觉得还是挺有趣的&#xff0c;于是就想用Python来实现。 需求描述&#xff1a;根据主播直播时间段结合销售订单的付款时间判断所属销售的归属 生成主播在线直播时间段数据 from datetime import datetime, timed…