Category Archives: Database

历史表、清理、备份恢复

收集了一些资料后,我想谈谈自己这三个概念的理解,请大家指教:    首先,我认为 历史表与数据清理和备份恢复并没有直接的关系,它们的目标并不相同。下文分别进行说明。 历史表============================================    关于历史表,我们要先分析一下业务数据的类型。一般来说,业务数据可能有三种作用:     1. 业务操作执行前的准备数据,或者执行后的结果数据。比如转账前 先要 查看客户 是否有足额人民币,转账后再从 客户账户中 减去 一定数额。     2. 记录业务操作本身的数据。如操作流水。     3.主要 用于查询或统计分析、在日常操作中很少删改、且时效性要求不太高的数据。如 客户两年前的交易记录。   业务操作的准备数据和结果数据,常常会随时间越积越多,这就会使数据的存取越来越慢,影响到日常操作的即时响应。如果越早的数据使用越少,则可以把比较早的数据放到历史表中。当需要存取时,先在当前表中操作,如果当前表操作得不到结果,再到历史表中去操作。通过这种手段,可以提高日常操作的性能   操作流水之类的数据,如果有重要的审计作用而且数据量比较大,也可以采用与上相同的处理方案     这两种数据放到历史表后,即构成上文所说的第三种数据,即仅用于查询或统计分析的数据。由于历史表数据查询很多、变动很少,因此可以多用于一些索引,或采取其他的一些查询优化方案      综上所述, 历史表出于性能需求而建立,并 直接影响到程序逻辑(如存储过程,JAVA代码),对系统设计有显式的影响,因此,历史表的设计应由 开发人员负责。 数据清理=============================================        如果较早的数据允许直接丢弃,则可以将这些数据 清理掉。而且 1.多久以前的数据才可以清理,这应由软件用户决定,要在需求分析时确定 2.数据太多不清理,既会影响查询速度,也会对硬盘空间形成压力 3.历史表和当前表都应该进行数据清理。不过,如果合适的话,也可以把“转移当前部分数据到历史表”和“清理当前表”当成一步 4.数据的清理,可以通过程序逻辑直接实现,如调度线程清理持久化对象,或者在执行新业务操作时清除历史操作的数据(如在新增订单前清除最早的若干订单);也可以在日常运维时采用数据库工具定期清理   总之,数据清理跟 业务需求、 系统性能、 磁盘空间都有关系。 可以让开发人员在程序里实现这些目标, 也可以让运维人员在日常维护操作时手工进行操作 备份与恢复===========================================       备份大概有两种作用:一是保存历史数据,二是在灾难后恢复。不管是哪种,备份后的复本都 与生产系统脱钩,这就是它与历史表的区别。 […]