clickhouse(十五、存储优化实践)

文章目录

  • 背景
  • 问题定位
  • 优化方式
    • 排序键设计
    • 写入顺序
    • 压缩算法 DoubleDelta
    • LowCardinality
    • 避免使用Nullable
  • 总结

背景

clickhouse集群容量告警,项目中某些表占据大量的存储空间,借此机会对ck的存储优化进行实践学习,并通过多种方式测试验证优化效果。

问题定位

通过查询系统表元数据,定位头部存储的表。之前的文章有具体查询逻辑。如果能通过清理或者是控制表生命周期是最快的方式,不然就要看具体的表各列的存储压缩大小。以下图为例,压缩率在10以下的就是比较低的。
在这里插入图片描述

优化方式

要着手优化,最好标准自然是参考官方的最佳实践。

排序键设计

按基数升序排列关键列,能提升存储压缩率和查询效率。 https://clickhouse.com/docs/en/optimize/sparse-primary-indexes#ordering-key-columns-efficiently
在这里插入图片描述

  • hits_URL_UserID_IsRobot具有复合主键的表(URL, UserID, IsRobot),其中我们按基数降序排列关键列
  • hits_IsRobot_UserID_URL具有复合主键的表(IsRobot, UserID, URL),其中我们按基数按升序对键列进行排序

压缩率:
在这里插入图片描述
查询效率:
在这里插入图片描述
这里官方有提供效果验证,就不在重复。

写入顺序

除了低基数列在前,通过对数据进行排序也能提升压缩效率。 因为ck物理存储同分区里也是分数据块的,一个数据块中的数据更有序也能提升存储效率。
在这里插入图片描述

压缩算法 DoubleDelta

在定位问题时,我们发现唯一键row_key 的压缩率不到2,一部分原因是该字段写入ck时是乱序的,另外就是使用合适的压缩算法。 ck默认的算法是LZ4(原理是按照4字节窗口扫描,查找与之前的值是否匹配)。但如果我们是有序是列,可以使用另外两个压缩算法 Delta/DoubleDelta (Delta编码存储一个基础值以及后续相邻两个数据的差值, Double Delta是在Delta基础上再做一次Delta,等差数列压缩相当优秀)
我们可以看下有序和无序的数据在不同压缩算法的差异。Double Delta再压缩有序列效率可谓“遥遥领先”。
在这里插入图片描述

LowCardinality

低基数建议使用LowCardinality。 相同数据(Android/IOS 枚举)压缩后大小差异近6倍。
在这里插入图片描述

避免使用Nullable

相同数据没有Nullable 压缩率更高
在这里插入图片描述

总结

以上是我们在优化存储时主要尝试的方案,具体优化还要结合业务情况来定。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙NFG交易市场:减少出入金的税和消泡沫

在元宇宙的宏伟画卷中,NFG(非同质化商品)以其独特魅力逐渐崭露头角,成为连接现实世界与数字世界的桥梁。NFG不仅仅是一种商品,更是一种创新的商业模式,为资金的流动与税收优惠带来了新的可能。 首先&#…

QT error: allocation of incomplete type ‘Ui::Server‘

目录 前言 报错内容: 过程解析: 原因分析: daisy.skye的博客 QT合集http://t.csdnimg.cn/wEVbu 前言 最近又开始需要做上位机了,要知道qt上位机对我来说已经3年没有接触了,最开始接触还是毕业时工作中的简单学习和…

【预计IEEE出版】第四届电子信息工程与计算机技术国际学术会议(EIECT 2024)

第四届电子信息工程与计算机技术国际学术会议(EIECT 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Technology 2024年11月15-17日 | 中国 深圳 #往届均已成功见刊、EI检索;先投稿,先送审…

CSS学习|css三种导入方式、基本选择器、层次选择器、结构伪类选择器、属性选择器、字体样式、文本样式

第一个css程序 css程序都是在style标签中书写 打开该网页,可以看到h1标签中的我是标题被渲染成了红色 可以在同级目录下创建一个css目录,专门存放css文件,可以和html分开编写 然后在html页面中,利用link标签以及css文件地址&…

【AI大模型】基于Langchain和Openai借口实现英文翻译中文应用

🚀 作者 :“大数据小禅” 🚀 文章简介 :本专栏后续将持续更新大模型相关文章,从开发到微调到应用,需要下载好的模型包可私。 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 目…

C++ primer例子1实现

问题 代码 Sales_item.h #include<iostream> #include<string> class Sales_item {public:Sales_item(){};Sales_item(std::string insid, int num, double price);friend std::istream& operator>>(std::istream& is, Sales_item& item);frie…

LeetCode-43. 字符串相乘【数学 字符串 模拟】

LeetCode-43. 字符串相乘【数学 字符串 模拟】 题目描述&#xff1a;解题思路一&#xff1a;模拟乘法&#xff0c;两个数中每一位数相乘的时候乘上他们各自的进制数&#xff0c;之后求和。循环时&#xff0c;分别记录各自的进制数背诵版&#xff1a;解题思路三&#xff1a;0 题…

课程标准包括哪些内容

在教育的广阔天地中&#xff0c;课程标准如同一座灯塔&#xff0c;照亮了教师们的教学之路。那么&#xff0c;这座灯塔究竟照亮了哪些关键领域呢&#xff1f; 课程标准为我们指明了教学目标。这些目标是教学活动的航标&#xff0c;指引我们如何根据学生的认知水平和学习需求&a…

防火墙是什么?探讨部署Web防火墙的必要性

如今&#xff0c;多云环境、API安全功能扩展、合作伙伴集成即时可用、可用性和可视化增强以及提高自动化程度已经成为基本要求。伴随企业应用架构的迁移&#xff0c;在用户端&#xff0c;需要在部署环境不断扩展但人员技能有限的情况下&#xff0c;保护数量日益增长的应用安全。…

如何在springboot项目中使用Mybatisplus

文章目录 1.mybatisplus的作用2.mybatisplus使用流程2.1pom.xml文件中增加依赖&#xff08;点击右上角蓝色按钮下载依赖&#xff09;2.2navicat新建数据库&#xff0c;增加application.properties数据库配置2.3 启动类添加注解&#xff0c;增加mapper包操作数据库2.5添加实体类…

如何通过PHP语言实现远程控制多路照明

如何通过PHP语言实现远程控制多路照明呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制多路照明&#xff0c;通过多路控制器&#xff0c;可独立远程控制多路照明。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂…

springboot 图形验证码 前后端分离解决方案 easy-captcha

easy-captcha介绍 easy-captcha&#xff0c;提供了Java图形验证码&#xff0c;支持gif、中文、算术等类型&#xff0c;可用于Java Web、JavaSE等项目&#xff0c;是个很好用的工具库&#xff0c;文档比较完备。 用法 添加maven依赖 <!--图形验证码--><dependency&g…

像图一样交流:为大语言模型编码图

译者 | 高永祺 单位 | 东北大学自然语言处理实验室 原文链接&#xff1a;https://blog.research.google/2024/03/talk-like-graph-encoding-graphs-for.html 1.作者介绍 Bahare Fatemi&#xff0c;谷歌蒙特利尔研究部门的研究科学家&#xff0c;专门从事图表示学习和自然语言…

YOLO-Worldv2两分钟快速部署

本次部署使用的框架基于ultralytics&#xff0c; 并且已经集成最新版本的YOLOv8框架&#xff1a; 一键环境配置 pip install ultralytics基础使用 训练 from ultralytics import YOLOWorld model YOLOWorld(yolov8x-worldv2.pt) results model.train(datacoco8.yaml, epo…

【全开源】知识库文档系统(ThinkPHP+FastAdmin)

&#x1f4da;知识库文档系统&#xff1a;解锁知识的无限可能 一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&a…

高通开发系列 - 借助libhybris库实现Linux系统中使用Andorid库

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 概述Android代码下载和编译aarch64开发环境libhybris下载和编译libhybris测试验证调用库中的函数概述 我主要是基于…

第三方软件测试报告的作用是什么?可全国通用吗?

随着信息技术的发展&#xff0c;市面上的软件产品越来越多&#xff0c;因此软件质量的好坏是软件企业以及用户极为关注的话题。为了更好的保障软件产品质量&#xff0c;将测试工作交给第三方软件测试机构成为了软件企业的首选。第三方软件测试不同于软件开发公司内部测试团队所…

pycharm绘图时中英文不能同时出现 中文出现小框框的问题解决

# 设置字体为微软雅黑&#xff0c;正确显示负号 plt.rcParams[font.sans-serif] [Microsoft YaHei] plt.rcParams[axes.unicode_minus] False

解析数据洁净之道:BI 中如何清洗脏数据?

前言 随着数字化和信息化进程的不断发展&#xff0c;数据已经成为企业的一项不可或缺的重要资源。然而&#xff0c;这些数据往往是庞大的、复杂的&#xff0c;甚至掺杂着很多的无效的、错误的数据。那么如何在这些数据中过滤那些干扰项&#xff0c;保证数据发挥最大的作用呢&a…

html文件使用postcss-pxtorem适配移动端 使用tailwindcss库

项目截图 插件下载 npm i -D postcss8.4.38 postcss-cli10.1.0 postcss-pxtorem6.1.0 tailwindcss3.4.3postcss.config.js & tailwind.config.js postcss.config.js const pxToRem require(postcss-pxtorem) module.exports {plugins: [pxToRem({rootValue: 75,propLi…