大表治理(一)-常见方案
大表治理(二)-归档
大表治理(三)-分库分表
大表治理(四)-分库分表中间件Mycat 和Sharding-Jdbc简介
什么是归档
数据归档是识别非活动数据以及将其移出当前生产系统和数据库并移入长期存储系统的过程。归档目的是为了防止非活动或历史数据丢失或被销毁,按照法规或公司保留政策对其进行保留,以及让需要访问相关数据的用户能够方便地进行访问。
归档的优势
- 通过减少数据库和主存储站点的大小,为应用程序和系统提供更高的性能。
- 通过将非活动数据从成本高昂、高性能的主存储移至更经济实惠的低性能辅助存储,降低存储成本。
- 从主存储备份数据所需的时间更少,而且传输数据所需的 WAN 带宽成本更低。
- 更轻松地遵守监管框架。
- 灾难恢复的成本更低。
业界常用归档方式
- 通过定时任务去同步数据&删除数据 具体实现可以如下:
- 查询出min(id), max(id),然后作为起始边界
- 分批查询数据,利用每批查出来的最大id作为下批的id_min,然后insert数据
- 查询为空后就不再后续操作
- 使用gh-ost进行数据归档,文章参考:zhuanlan.zhihu.com/p/83770402
- 使用pt-archiver进行数据归档,文章参考:www.cnblogs.com/dbabd/p/107…
归档注意事项
- 归档的速率不能过快,不能影响线上正常的业务
- 归档的同时归是否删除原表数据,删除速率过快,会有大量的DML操作,导致binlog洪峰,同时会造成主从延迟
- 删除后的数据,在数据库底层并不会真正清除,只会标记为清除,所以空间并没有被释放,需要通过整理表空洞去释放磁盘空间。具体可以执行以下命令进行表空洞整理(同样需要使用gh-ost类似工具)
alter table table_name engine = innodb