数据高效转储,生产轻松支撑

news2024/11/24 4:06:58

在使用WINDOWS或智能手机的时候,经常会遇到存储空间不足的问题,鲜有人会打开文件管理系统自己逐个清理,不仅因为底层的系统文件繁多操作耗时,更有其操作专业度高、风险高的问题。这时我们往往会求助各种各样的清理大师,快速又安全的完成数据清理工作。这些“大师”虽说也经常搞点“事情”,但是清理效果倒也不错。

运营商业务支撑系统每天业务量动辄几十万笔,每笔订单一般会经过多个环节,关联写入各种表的数据量几百条,导致日增数据几千万至上亿条。为保障订单处理的效率都会将数据库划分为生产库和历史库,生产库的数据控制在一个较小规模,只要订单竣工归档则需要迁移转储到历史库。

一、太难了

数据迁移往往是某种业务在特定时间段范围内的批量操作,某笔业务会涉及到多张表, 如果迁移遗漏表会导致在归档历史数据的查询出错。比如家庭宽带业务开通历史数据迁移,单张订单关联到46张表的528条记录,缺少一条记录都会导致订单查询功能的报错,表间关联深度最多可到6层,数量繁多关联逻辑复杂,一线运维团队往往不敢轻易下手。

数据迁移是一种事务性任务,必须在归档区写入成功后才能在在途库进行清理。单批次操作几百上千笔业务,几万条数据迁移只要一条出错,都可能意味着整批次迁移工作的停止甚至是回退。尤其在异构迁移归档的时候,从关系型数据要到KV数据库,或者是要重建二级索引表的时候。这些事务保障性操作是非常繁多且严格的。

数据从生产库迁移到历史库后,还有可能因为某些原因需要个别逆向恢复。比如某客户投诉业务某项功能不可用,排查分析后发现是因为某张订单生成的业务指令不正确,需要调整规则后重新再执行一遍。这种业务投诉来得急,需要尽快处理,但这种逆向操作不仅涉及的表跟正向归档一样复杂,并且还要考虑对在途订单数据的影响。

二、常见转储场景

全量转储和增量转储

全量是指对整个数据库或者某个表的数据全部重新备份转移。增量转储针对的是对上次完全转储之后,对所有新增或修改的记录进行转储。业务开通/编排系统面对的绝大多数是增量订单/工单转储。

静态转储和动态转储

静态转储是指当系统中无运行事务时进行转储,转储过程数据库处于一致状态,生产业务中断,适用场景相对有限。动态转储是指转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改,生产业务不会中断,适用场景广泛。但需要处理任务扫描遗漏、表锁、算力使用优先等问题。

同构转储和异构转储

同构转储是指目标库和源头库都基于同样的存储介质/技术/模型结构。数据库本身自带了一些数据导出导入工具,可以快速完成线下数据的简单转储,比如MySQL的outfile、dumpfile等。异构转储的目标和源头之间会存在介质/技术/模型结构的差异,比如从MySQL转储到PG、数据分片字段差异、附件路径转换等,这需要专用工具来解决。

单表转储和多表转储

单表转储过程不涉及其它表,逻辑简单,常见于某些登录日志表。多表转储是生产系统中常见的情况,某些符合条件的业务数据记录分布在多张表上,必须一起迁移,在同一笔事务中完成。否则事务一致性未控制好,会导致生产库业务更新和历史库查询的错误。比如订单、开通流程实例、环节实例、工单、工单属性,必须是一套完整的数据才能实现订单查询功能。

三、怎么破

运营商核心业务支撑系统是7×24不间断运行,每天各类业务量近百万,数据库中增量数据近亿,涉及数百张表。如此繁忙的业务系统,是如何处理业务数据的转储的呢?让我们一探究竟~

一键检测

生产系统中大大小小的表几百张,每张表几百万级的数据量,哪些表数据该做迁移转储,没几个人能都说得清,就算说得清楚的人用运维脚本检测个遍也得用十几分钟以上。一键检测,实时自动构建出鸟瞰全局存储的视图,自动给出给出转储建议和动作。

  • 容量超配预警 

由产品线系统专家对各个表/文件系统的合理数量设定一个合理阈值,对实时存储数据量和容量使用率进行预警。

  • 过期老旧内容 

各个表内的数据记录在各时间段/各类数据占比,比如是否存在2个月前已归档的订单数据,是否还有已下线产品的数据,是否还存有压力测试数据等。

  • 临时备份数据 

在项目运维过程中可能会存在人为去备份某些表的时候,比如XXX_230405,XXX_BAK等,这些备份表使用后往往有忘记清理。通过对表名称、字段结构、内容进行相似度自动检查,自动全库扫描找出这些无用备份表。

自动识别出数量大于一定阈值且未配置转储规则的表,这些表可能是因为项目组自定义,出厂时未纳入管理范畴的表。

一键转储

生产系统中最常规要做的转储工作是生产库转入历史库,每条业务记录分布在几十个表和多个文件中。每次人工转储,都需要细心的运维人员打开多个转储脚本,按顺序逐表转移清理,表表数据彼此关联,稍有不慎生产事故!一键清理,将这些高风险高专业度操作进行标准化封装,让转储运维操作易如反掌。

  • 查转删检一体化 

封装集成了转储操作的完整过程,包括:计算转储范围、读取源数据并标识、数据转换并写入目标库、完整性校验、源数据清理、表重新统计(确保索引生效)。

  • 多表关联操作支持 

为各系统各场景提供多表数据关联模板化设计能力,通过各产品线研发将多个彼此相关的多表关联关系预先建立起来,配置正确的操作顺序,对各个项目现场的数据转储操作标准化规范化,普通运维人员无需再去关注难以厘清的转储先后逻辑关系。

  • 完整事务化支持 

数据转储完整性一致性的保障,如果数据转储失败,可自动进行脏数据清理恢复,能支持异构库(如MySQL到PG)事务、异构技术事务(如报文从接口单文件到归档压缩文件,接口表的报文目录指针也会随之调整)等多种情况。

自动运行

数据转储是个长期化的运维工作,多数在夜间业务闲时执行,长期安排人员在夜间值班运维无论从成本还是从人员能力要求来说都是不可行的。自动化运行能力,从多方面降低转储过程中的人员参与工作量,降低运维成本。

  • 忙时自动调度 

通常会在预设的闲时时间段内,通过CRON表达式规划转储工作执行计划。在定时执行转储任务的时候,可能会出现突发的业务流(比如半夜从计费发起一大批次的业务开通/关闭单),转储任务调度可智能识别并暂停转储任务,避免与主用业务争抢算力,待突发业务流完结后自动重启。

  • 效率自动评估 

通过效率指标TPKR(每千条数据转储耗时)和TPM(每兆数据转储耗时),评估转储任务执行效率。当TPKR和TPM劣化的时候,主动通知运维进行优化,形成闭环治理。

  • 策略自动优化 

当数据转储能力<数据生成能力的时候,生产库的数据总量势必会积压增加,当这种情况持续一段时间后,转储调度会自动识别发现,根据效率评估结果,重新调整任务调度策略,并通知运维人员进行确认。

四、关键要点

脏数据处理

数据转储任务在执行过程中,由于人为或意外中断,导致待转储源数据既没有被转储到目标库,也不能被下批次的转储任务读取到;又或者是目标库已写入但源头库的数据未清理。因此需要在转储工具周期性的自动检查这些数据,按前任务执行的状态完成断点续行或脏数据清理。

充分预检避免异常

在正式转储前,需要对整个转储环境进行检测,评估当前是否具备转储条件,最大可能避免在转储操作过程中可能的出错或中止。这些预检测的环境值一般可通过数据库专用函数自动查询。

转储目标库容量是否满足本次转储数据的存储

  • 目标库和源头库索引是否存在。如果索引无效,可能会导致单次转储数据的抓取时间过长,转储任务积压

  • 目标库的数据结构是否符合要求,比如:分片表是否已就绪,目标表字段有没有被修改过

  • 目标库的数据结构是否符合要求,比如:分片表是否已就绪,目标表字段有没有被修改过

避免滚雪球灾难

数据转储任务是个长期执行的任务,每到一定周期会自动读取一批次数据进行转储,到下一周期又会反复如上操作。如果下一周期任务执行时,上一周期任务未执行完成,那么系统就会并行2批次任务执行。如此迭代下去,就会产生雪球效应,系统内并行任务积压越多,执行越慢,积压越多,最后导致内存泄漏。因此要控制好并行转储的数量,设定安全阈值。

效率与灵活的平衡

操作过数据库的同学一定有体会,批次操作数据的效率一般都会比单次要高,单次读写1000条数据一定比1000次读写1条数据效率高,那每次数据读取量设置个巨高值,甚至一次读完写完?不尽然。目前经过运营商自己重新封装后的各种数据库都会有单次操作限制。此外单次任务如果读写数据量超高,可能会导致单次任务执行时间超长到10分钟以上。期间如果刚好业务流突发,我们想终止转储任务,要么顶着压力漫长等待,要么KILL进程后修复数据。因此,将单次转储任务合理的控制在1分钟以内是个相对合适的选择。

数据转储的可逆性

数据从生产库转储到历史库后,可能会有些意外情况,比如订单已归档,但是后面发现南向的资源中心分配资源错误,需要重新激活订单修正资源配置,那就需要将历史数据转回生产库。因此,在转储模型设计的时候,要考虑原有生产库的信息是否会丢失,是否可转换。由于这种逆向转换是极个别的意外事件,因此可基于数据转储框架将历史库和生产库转置配置即可,封装出一个API在运维页面上以工具按钮的形式开放使用。

面向多场景的可扩展性

数据转储并非简单的表到表的转换,在实际生产中会存在表→压缩表,表→文件,文件→文件的各种场景。比如历史库订单也不会无限膨胀,对于3年以上的数据,会将历史表中的不再用的日志环节数据清理,只保留可用于分析和样本学习的必要核心业务信息,以CSV文本格式进行压缩归档保存。因此转储工具都需要保留灵活的扩展接口,由各业务应用系统的开发团队加以实现所需场景。

五、后语

对于已归档转储出去的业务数据,并非是清理出的垃圾,依旧是有应用价值的。比如分析某些业务的开通效率,或者分析某些经营单元的业务质量,或者分析预测某些业务发展趋势等。

因此在迁移转储设计时,充分考虑这些数据应用场景,规划好技术平台、数据结构模型、存储分区等,后续的数据的价值挖掘和新应用开发将更加的方便。

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

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

相关文章

2个月拿到华为offer,身为00后的我拿30K没问题吧?

背景介绍 美本计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三回国的时间比较短&#xff0c;于是找的实习是在一家初创公司里面做全栈。 本人面…

网络安全CTF工具合集

各种在线工具以及工具整合 CTF资源库|CTF工具下载|CTF工具包|CTF工具集合 逆向工程: GDB – http://www.gnu.org/software/gdb/download/ IDA Pro – Download center Immunity Debugger – http://debugger.immunityinc.com/ OllyDbg – OllyDbg v1.10 radare2 – radare Hop…

MySQL基于成本的优化

MySQL的成本是什么&#xff1f;MySQL在执行一个查询的时候&#xff0c;其实是有多种不同的方案的&#xff0c;但是最终会选择一种成本比较低的方案&#xff0c;那么这个成本都体现在什么地方&#xff1f;如何计算&#xff1f; MySQL的成本 I/O成本 &#xff1a; 把数据从磁盘…

Python 萌新 - 花10分钟学爬虫

前言 Python 新手入门很多时候都会写个爬虫练手&#xff0c;本教程使用 Scrapy 框架&#xff0c;帮你简单快速实现爬虫&#xff0c;并将数据保存至数据库。在机器学习中数据挖掘也是十分重要的&#xff0c;我的数据科学老师曾经说过&#xff0c;好算法不如好数据。 Python助学…

理光打印机连接电脑后不打印的原因及解决方法

理光打印机在使用时&#xff0c;可能会出现正常连接上理光打印机却没有反应的情况&#xff0c;出现无法打印的情况&#xff0c;下面&#xff0c;驱动人生为大家带来理光打印机连接后不打印的解决方案。 驱动人生分析&#xff0c;一般遇到理光打印机连接后不打印的情况&#xf…

第一行代码 第十一章 基于位置的服务

第11章 基于位置的服务 在本章中&#xff0c;我们将要学习一些全新的Android技术&#xff0c;这些技术有别于传统的PC或Web领域的应用技术&#xff0c;是只有在移动设备上才能实现的。 基于位置的服务&#xff08;Location Based Service&#xff09;。由于移动设备相比于电脑…

Prompt Engineering | 编写prompt的原则与策略

&#x1f604; 为了更好地与大模型&#xff08;e.g. chatgpt&#xff09;更好的交流&#xff0c;一起来学习如何写prompt吧&#xff01;&#x1f604; 文章目录 1、简介2、编写prompt的原则与策略2.1、编写清晰、具体的指令2.1.1、策略一&#xff1a;使用分隔符清晰地表示输入的…

js 解析map (处理后端返回对象拼接)

返回的数据 需要的展示效果 解析如下&#xff1a; { title: ‘销售属性’, align: ‘left’, dataIndex: ‘xsshuxing’, width: 200, render(value, record) { let keyValue ‘’; { for (var key in record.otherAttr) { console.log(‘属性&#xff1a;’ key ‘,值&…

EIS-Net

我们提出了一种新的领域泛化框架&#xff08;称为EISNet&#xff09;&#xff0c;该框架利用来自多源领域图像的外在关系监督和内在自我监督学习&#xff0c;学习如何同时在不同领域中进行泛化。 具体而言&#xff0c;我们采用多任务学习范式&#xff0c;通过特征嵌入来构建我…

AI智慧安监视频平台EasyCVR视频出现不能播放的情况排查与解决

EasyCVR基于云边端协同&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台兼容性强、拓展度高&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码、平台级联等功能。 有用户反…

如何动态生成列表视图?

UE5 插件开发指南 前言0 什么是列表视图?1 如何动态生成?1.0 指定ListView生成的条目前言 这里将其拆分成两个问题来分析: (1)什么是列表视图? (2)如何动态生成? 0 什么是列表视图? 列表视图就是用来展示一系列对象的UI列表,在UE编辑器的UserWidget设计窗口中可以找到…

linux 安装 ffmpeg

linux 安装 ffmpeg windows上安装&#xff0c;直接下载压缩包解压。linux安装&#xff0c;找了半天各种技术文章&#xff0c;说最好编译安装&#xff0c;按照步骤安装编译环境编译成功了&#xff0c;但是使用的时候总要安装各种外部库&#xff0c;转码转不了等等问题...... 最…

城市生命线监测系统包括哪些内容?

城市排水、供水、燃气、供热、桥梁、隧道、综合管廊等基础设施是城市正常运转的基石&#xff0c;被称为“城市生命线”。城市生命线一旦出现故障或事故&#xff0c;将会给城市和居民带来巨大的经济和生活损失。通过对城市生命线的实时监测和预警&#xff0c;可以及时发现潜在的…

第十五届“中国电机工程学会杯”数学建模竞赛

第十五届电工杯5月26号就要开始啦&#xff0c;今天给大家回顾第十四届全国大学生电工数学建模竞赛A题&#xff0c;主要从赛题重述和问题分析与代码实战展开。第十五届全国大学生电工数学建模竞赛已经开始报名了哦&#xff0c;后续我也会分享对应的建模思路哦&#xff0c;大家记…

Leetcode452. 用最少数量的箭引爆气球

Every day a Leetcode 题目来源&#xff1a;452. 用最少数量的箭引爆气球 解法1&#xff1a;排序 贪心 题解&#xff1a;用最少数量的箭引爆气球 我们首先随机地射出一支箭&#xff0c;再看一看是否能够调整这支箭地射出位置&#xff0c;使得我们可以引爆更多数目的气球。…

CVPR论文解读 | 点云匹配的旋转不变变压器

原创 | 文 BFT机器人 传统的手工特征描述符通常具有内在的旋转不变性&#xff0c;但是最近的深度匹配器通常通过数据增强来获得旋转不变性。 然而&#xff0c;由于增强旋转数量有限&#xff0c;无法覆盖连续SO&#xff08;3&#xff09;空间中所有可能的旋转&#xff0c;因此这…

VC6.0的工程设置解读Project--Settings

做开发差不多一年多了&#xff0c;突然感觉对VC的工程设置都不是很清楚&#xff0c;天天要和VC见面&#xff0c;虽然通常情况下一般都不会修改工程设置&#xff0c;但是还是有必要对它的一些设置项的来龙去脉有一定的了解&#xff0c;所以狂查资料&#xff0c;稍作整理&#xf…

(仿真)创建 URDF 机器人模(1)

继上一篇基础篇的结束&#xff0c;不用看以前的也可以&#xff0c;这里是不受前面的影响的。 如果你没有这个目录&#xff0c;就创建一个catkin_ws文件夹 然后里面再一个src文件夹就ok了&#xff0c;我在基础篇第一篇的时候就有这个文件夹了&#xff0c;所有我现在是直接进入 …

【 计算机组成原理 】第七章 外围设备

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 文章目录 系列文章目录前言第七章 外围设备7.1 外围设备概述7.1.1 外围设备的一般功能7.1.2 外围…

zabbix安装部署、三分钟分钟部署zabbix监控(超详细)

zabbix安装部署 1&#xff0c;快速安装部署zabbix2&#xff0c;一键脚本安装zabbix 1&#xff0c;快速安装部署zabbix 1&#xff0c;关闭防火墙&#xff0c;selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 #临时 sed -i s/SELINUXenforcing/SE…