【数据归档系】1. 浅谈理解数据归档

目录

什么是数据归档

为什么要做数据归档

引入内容

解决的好处

怎么做数据归档

归档数据定义

归档数据清理

归档数据方案


什么是数据归档

简单一句话总结,就是数据归档是识别非活动、生命周期完结状态的数据将其移出当前生产系统数据库并移入长期存储系统的过程

为什么要做数据归档

问题引入

  • 随着长时间的累积,一些关键的业务系统中积累了大量的历史交易数据,这些历史数据使得这些系统变得越来越庞大,并且在维护上也越来越复杂。
  • 因为数据量的增长已经严重降低了应用程序的性能,降低了应用程序的稳定性,并且消耗了大量的投资,同时对备份(从库存储空间需要做磁盘扩容)与恢复也增加了巨大的负担。
  • 不能永无止境的投入大量资金来升级存储、加大存储容量、提高服务器性能,以此来满足不断增长的数据量。提高存储容量和提高服务器的处理能力只能暂时的解决所面临的问题。

优点

  • 通过数据归档和数据清洗的实施可以有效的提高数据库性能,确保核心业务不会因为长时间数据积累而出现性能问题,从而应用可以更加迅捷地为用户提供优质服务体验
  • 在生产数据库上保存更少的数据能够有效的降低容灾、复制、备份和恢复的成本消耗,降低企业对于IT系统的总体拥有成本,尤其是后期的维护成本。

缺点

  • 需要做对应归档流程设计,定制化做对应的开发任务,并且需要处理一定的逻辑处理
  • 数据归档后,需要设计如何处理归档数据和(不做归档处理的)业务生产数据的查询问题

总结一句话就是:可以提高数据库查询性能,降低在线存储成本

怎么做数据归档

  • 根据业务分析从业务数据在不同的生命周期阶段制定不同的访问和过期策略;设置和执行数据生命周期过程中的数据管理策略
  • 通过制定合理的数据归档方案,制定一套自动化管理的流程,建立归档数据的保留策略,提供归档数据的抽取、归档数据的保存、归档数据的检索等一体化功能,将归档数据从生产系统中迁移到归档数据库上

归档数据定义

系统级定期归档是脱离于具体应用模块的业务逻辑的,一般采取每天归档、月度归档、季度归档、年度归档几个粒度进行。

月度、季度和年度归档是最为常用的归档模式。我们这里拿订单举例,以时间和状态的组合维度为做为归档数据的定义

归档数据清理

一般会根据某个时间戳条件外加一些其他的约束条件筛选符合归档条件的数据。如果处理的数据量比较大,使用delete,处理时间较长,因此一般采用分区表操作来提高归档效率,比如通过交换分区的方式先将数据交换出去,然后再慢慢处理,这样就能避免对生产系统造成较大的影响。

归档数据方案

冷热分离

现有系统庞大的数据量,让查询订单变得格外迟缓,查询一次都要很长时间才会响应,而且多点击几次就会出现宕机。比如业务人员多次查询时或者业务人员在不选择具体时间范围的条件下,数据库的 CPU 会立马狂飙(告警邮件触发),服务器线程也降不下来。尝试了优化表结构、业务代码、索引、SQL 语句等办法来提高响应速度,但这些方法已经到了瓶颈,查询速度还是很慢

在处理数据时,我们可以将数据库分成了冷库和热库 2 个库,不常用数据放冷库(归档库),常用数据放热库(生产库)。通过这样的方法处理后,因为业务人员查询的基本是近期常用的数据,常用的数据量大大减少了,就再也不会出现宕机的情况了,也大大提升了数据库响应速度

(一)什么情况下需要冷热分离

数据走到终态后,只有读没有写的需求,比如订单完结状态;

用户能接受新旧数据分开查询,比如有些电商网站默认只让查询 3 个月内的订单,如果你要查询 3 个月前的订单,还需要访问另外的单独页面(或单独的系统)。

(二)如何判断冷热数据

采用组合字段的方式来区分,比如我们把创建时间 > 3 个月且状态为“已完结”的订单标识为冷数据,其他的当作热数据。

关于判断冷热数据的逻辑,这里还有 2 个注意要点必须说明

  • 如果一个数据被标识为冷数据,业务代码不会再对它进行写操作;
  • 不会同时存在读冷/热数据的需求。

(三)如何触发冷热分离

  • 修改业务代码,通过修改应用程序来触发归档数据逻辑,比如在订单状态发生变化的时候,做对应判断冷热数据的处理。
  • 监听数据库变更日志binlog的方式(canal),应用程序监听canal方式来处理变更数据处理逻辑。
  • 定时任务xxl-job方式,定时扫描数据库表归档数据

处理逻辑需要考虑的事项:

  1. 数据一致性问题

        因为归档数据我们需要将其从热库删除,并且同事迁移到归档库(冷库)。这里就牵扯到数据一致性的问题,如何来保证处理?

    2.  数据量很大问题

       采用定时扫描数据库表归档数据量如果很大,程序如何处理?分批完成处理

    

方案落地步骤

  • 整理数据库中需要那些表需要做归档操作
  • 【前期归档操作】将历史归档数据做对应迁移,同时对应生产库做删除冷数据处理,原有生产库表做分区化管理的话,使用变更分区到其他表完成迁移归档数据库操作
  • 【后期定期归档操作】编写业务程序定时任务方式来完成归档
  •  归档数据查询问题需要额外处理

猜你喜欢

转载自blog.csdn.net/run_boy_2022/article/details/130726018
今日推荐