clickhouse 大表数据归档处理解决办法

news2025/2/26 0:36:56

本文作者为 360 奇舞团前端开发工程师 李彬

一、需求场景

基于目前项目在各个应用上的数据采集,尤其是性能监控上的采集,数据量越来越大,例如pv数据的采集表三个月的数据量已经在3亿+,数据量小的也有几百万,但是目前的常用的查询需求只用查询最近30内的数据,故此,考虑设计一种方案,可以将表中的数据维持在最近1个月上(视为热数据),之前的数据(视为冷数据)做归档处理,但是偶尔可能也会用来查询分析。

二、常见的大表数据处理办法

数据表分区:大多数数据库支持表分区,可以将大表分成多个小表(分区),每个分区在物理上可以作为一个独立的表进行处理。你可以根据数据的访问频率将数据分配到不同的分区,例如,将最近的数据放在一个高性能的存储设备上,将旧的数据放在一个低成本的存储设备上。

为什么要分区:表分区可以在区间内查询对应的数据,降低查询范围 并且索引分区 也可以进一步提高命中率,提升查询效率

分区是指将一个表的数据按照条件分布到不同的文件上面,未分区前都是存放在一个文件上面的,但是它还是指向的同一张表,只是把数据分散到了不同文件而已。

我们首先看一下分区有什么优缺点:

表分区有什么好处?

  1. 与单个磁盘或文件系统分区相比,可以存储更多的数据。

  2. 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

  3. 一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。

  4. 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。

  5. 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。

数据库分表

为什么要分表:分表后,显而易见,单表数据量降低,树的高度变低,查询经历的磁盘io变少,则可以提高效率

分表分为两种 水平分表和垂直分表

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。

水平分表

定义:数据表行的拆分,通俗点就是把数据按照某些规则拆分成多张表或者多个库来存放。分为库内分表和分库。比如一个表有4000万数据,查询很慢,可以分到四个表,每个表有1000万数据
c31186828ec58f53e1d4ae3e1843baef.jpeg

垂直分表

定义:列的拆分,根据表之间的相关性进行拆分。常见的就是一个表把不常用的字段和常用的字段就行拆分,然后利用主键关联。或者一个数据库里面有订单表和用户表,数据量都很大,进行垂直拆分,用户库存用户表的数据,订单库存订单表的数据
e91c02fc9da78e37adff7e7945db611c.jpeg

缺点:垂直分隔的缺点比较明显,数据不在一张表中,会增加join 或 union之类的操作

知道了两个知识后,我们来看一下分库分表的方案

1.取模方案:

拆分之前,先预估一下数据量。比如用户表有4000w数据,现在要把这些数据分到4个表user1 user2 uesr3 user4。比如id = 17,17对4取模为1,加上 ,所以这条数据存到user2表。

注意:进行水平拆分后的表要去掉auto_increment自增长。这时候的id可以用一个id 自增长临时表获得,或者使用 redis incr的方法。
247007dda1c3617fe0bdd5cf1bea969a.jpeg
优点:数据均匀的分到各个表中,出现热点问题的概率很低。

缺点:以后的数据扩容迁移比较困难难,当数据量变大之后,以前分到4个表现在要分到8个表,取模的值就变了,需要重新进行数据迁移。

2.range 范围方案

以范围进行拆分数据,就是在某个范围内的订单,存放到某个表中。比如id=12存放到user1表,id=1300万的存放到user2 表。

f86168563127bd4b87de2dc298e94155.jpeg

优点:有利于将来对数据的扩容

缺点:如果热点数据都存在一个表中,则压力都在一个表中,其他表没有压力。

我们看到以上两种方案 都存在缺点 但是却又是互补的,那么我们将这两个方案结合会怎样呢?

3.hash取模和range方案结合

如下图 我们可以看到 group 组存放id 为0~4000万的数据,然后有三个数据库 DB0 DB1 DB2,DB0里面有四个数据库,DB1 和DB2 有三个数据库

2d056c5f05d437322105ac4d69423900.jpeg

假如id为15000 然后对10取模(为啥对10 取模 因为有10个表),取0 然后 落在DB_0,然后在根据range 范围,落在Table_0 里面。
总结:采用hash取模和range方案结合 既可以避免热点数据的问题,也有利于将来对数据的扩容

方案三:冷热归档

为什么要冷热归档:其实原因和方案二类似,都是降低单表数据量,树的高度变低,查询经历的磁盘io变少,则可以提高效率 如果大家的业务数据,有明显的冷热区分,比如:只需要展示近一周或一个月的数据。那么这种情况这一周喝一个月的数据我们称之为热数据,其余数据为冷数据。那么我们可以将冷数据归档在其他的库表中,提高我们热数据的操作效率。

接下来讲一下归档的过程
  1. 创建归档表 创建的归档表 原则上要与原表保持一致

  2. 归档表数据的初始化

0fc463f4502b555f1dcab4a6f464a261.jpeg
3. 新产生的数据也可以按照定时任务同步

  1. 热数据读取DB1库

以上三种方案我们如何选型

bcbb41b84ad4b2422833b7e57979ef6c.jpeg

三、制订适合的解决方案

根据上面三种处理方案,目前年轮适合第三种冷热归档分库的方案
综合考虑之后,选择了一个适合clickhouse的一个方案

96ef89be9afeebfd16308024d968d9c4.jpeg

热数据保持不变,还在default库中,同时各个分片使用复制表引擎,查询和新增数据操作一个分片就行,数据量只保留1个月的量,原先业务代码不用改变。
冷水统一迁移到archive库中,因为不是常操作数据,为节省空间及提高查询效率,故此采用clickhouse分布式表,查询统一经过分布式表聚合,冷数据平均的分布到各个节点上


- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

348e00411b2867d715a81aa238075c7b.png

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

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

相关文章

浅谈 Linux fork 函数

文章目录 前言fork 基本概念代码演示示例1:体会 fork 函数返回值的作用示例2:创建多进程,加深对 fork 函数的理解 前言 本篇介绍 fork 函数。 fork 基本概念 pid_t fork(void) fork 的英文含义是"分叉",在这里就是 …

TypeScript+React Web应用开发实战

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在现代Web开发中,React和TypeScrip…

嵌入式学习day25 Linux

进程基本概念: 1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序&a…

54.仿简道云公式函数实战-文本函数-LOWER

1. LOWER函数 将一个文本字符串中的所有大写字母转换为小写字母 2. 函数用法 LOWER(text) 3. 函数示例 将一个文本字符串中的所有大写字母转换为小写字母。 4. 代码实战 首先我们在function包下创建text包,在text包下创建LowerFunction类,代码如下…

Unity中URP实现水体(水的焦散)

文章目录 前言一、原理1、 通过深度图,得到 对应像素 在 世界空间下的Z值2、得到模型顶点在 观察空间 下的坐标3、由以上两点得到 深度图像素 对应的 xyz 值4、最后,转化到 模型本地空间下,用其对焦散纹理采样 二、实现1、获取深度图2、在顶点…

Kali Linux下载与安装

目录 1 kali官网下载镜像文件 2 VMware打开kali linux文件 3 启动kali-linux-2023.4操作系统 1 kali官网下载镜像文件 kali官网:https://www.kali.org/get-kali/#kali-platforms 进入kali官网主页后看到如图所示界面,左边“Installer Images”界面是…

C++:模版初阶 | STL简介

创作不易,感谢支持!! 一、泛型编程思想 如何实现一个通用的交换函数呢? 注:其实swap函数在C的标准库提供了,不需要自己写,这边只是举个例子 void Swap(int& left, int& right) { in…

Linux和Windows集群中部署HTCondor

目录 1、集群架构 2、HTCondor版本 3、Linux系统安装 3.1、HTCondor安装 3.2、中央管理节点配置 3.3、其他节点配置 4、Windwos系统安装 5、安全配置 6、参考 1、集群架构 操作系统IP地址1*Ubuntu22.04192.168.1.742Ubuntu22.04192.168.1.603Ubuntu22.04192.168.1.6…

Ansys Lumerical | 自发参量下变频 (SPDC) 光子源

附件下载 联系工作人员获取附件 此示例演示了如何对真实的光子源进行建模,并将其用作 qINTERCONNECT 的输入。用直波导中一个长度为L且具有χ ( 2 ) 非线性的局部区域计算I型SPDC过程的光子产生速率和波函数,其中泵浦光子被转换为信号和闲置光子对&…

10.广域网技术

1. PPP实验点这里(拓扑代码) 2. PPPoE配置实验点这里(拓扑代码) 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP(链路协商)四、PPP链路建立过程2-PAP/CHAP(认证协商,可选&…

基于x86架构的OpenHarmony应用生态挑战赛等你来战!

为了更快速推进OpenHarmony在PC领域的进一步落地,加快x86架构下基于OpenHarmony的应用生态的繁荣,为北向应用开发者提供一个更加便捷的开发环境,推动OpenHarmony北向应用开发者的增加,助力OpenHarmony在PC领域实现新的突破&#x…

工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集,并通过网络传输到云端或本地数据中心进行分析处理。同时,工业智能网关还具备边缘计算能力,能够在本地…

六、OpenAI之嵌入式(Embedding)

嵌入模式 学习怎么将文本转换成数字,解锁搜索等案例。 新的嵌入模型 text-embedding-3-small 和 text-embedding-3-large,是目前最新的并且性能最好的嵌入模型,成本低,支持多语言,拥有控制所有大小的新参数 1. 什么是…

Halcon 求孔洞的大小和数量

文章目录 适用场景汽车按钮案例 适用场景 在工业中可以利用孔洞的多少和孔洞的大小来分析出产品的缺陷问题,例如一个产品有8个孔洞,孔洞多和少都会被识别为不合格产品,或者求出孔洞的面积,如果孔洞的大小超出一定的范围将视为不合…

3月5日济南,2024生物发酵展全新起航!助力打造生物产业经济新时代

生物发酵是生物产业的重要组成部分,近年来,我国生物产业发展迅猛,生物发酵技术也已广泛应用于食品、农业、医药、饲料、日化、材料等领域,市场前景广阔。2022年5月,国家发改委发布的《“十四五”生物经济发展规划》明确…

如何识别代理服务器的IP地址?

识别一个IP地址是否是由代理服务器发出的,是一项具有挑战性的任务。代理服务器是一种中间网络设备,用于转发客户端的请求和响应,从而隐藏原始客户端的IP地址。由于代理服务器的广泛使用,识别它们对于网络安全、数据分析和市场调研…

Chat2table,简易表格分析助手

一 写在前面 之前用智谱AI的Chatglm3-6b模型写过一个简单的论文阅读助手,可用来辅助论文阅读等。而像表格,如Excel、CSV文件等内容的分析,也是不可忽略的需要,因此本文同样使用Chatglm3-6b来搭建一个表格分析助手,用于…

基于springboot + vue实现的前后端分离-汽车票网上预定系统(项目 + 论文)

项目介绍 系统是一个B/S模式系统,采用Spring Boot框架,MySQL 数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得汽车票网上预订系统管理工作系统化、规范化。本系统的使用使管理人…

如何处理网络攻击对系统造成的损害?

网络攻击对系统造成的损害是当今企业面临的一大挑战。随着互联网的普及和数字化转型的加速,企业的运营越来越依赖于网络,但同时也面临着越来越多的网络安全威胁。一旦企业遭受网络攻击,其系统可能会遭受不同程度的损害,导致数据泄…

ZDH-大数据采集-支持KETTLE任务

目录 项目源码 预览地址 支持KETTLE介绍 新增KETTLE任务 配置调度KETTLE 重要说明 感谢支持 项目源码 zdh_web:GitHub - zhaoyachao/zdh_web: 大数据采集,抽取平台 预览地址 后台管理-登陆 用户名:zyc 密码:123456 支持KETTLE介绍 当前平台不…