范围分区在数据过期化处理中的应用

在海量数据的数据库设计中,可能需要提前考虑数据库中数据存储的时间问题,或者叫做数据的过期化问题,它的意思是,由于数据量太大,在数据库中只保留特定时长的数据,比如1年,1年前的数据就需要做过期化(归档化)处理。

这时候范围分区就能发挥非常好的作用,就像上面的例子一样,我们可以将表做成每月1个分区,超过1年的分区可以按照用户的需求来进行处理。

对于过期的数据,通常有以下几种处理方式。

1.删除

处理历史数据的方式相当简单,直接删除过期的分区以及分区上的数据(如果每个分区分配一个表空间,那么可以连带表空间也删除,直接释放磁盘空间),释放空间。

在实际生产过程中,为了减少人为干预导致的失误,可以写一个定时任务来完成这样的操作,比如下面的例子。

还是上面的那个表,每个月一个分区。

CREATETABLE sale_data

(sale_id  NUMBER(5),

salesman_nameVARCHAR2(30),

sales_amount  NUMBER(10),

sales_date    DATE)

PARTITION BY RANGE(sales_date)

(

PARTITION sales_2009_1 VALUES LESSTHAN(TO_DATE('01/02/2009','DD/MM/YYYY')),

PARTITION sales_2009_2 VALUES LESSTHAN(TO_DATE('01/03/2009','DD/MM/YYYY')),

PARTITION sales_2009_3 VALUES LESSTHAN(TO_DATE('01/04/2009','DD/MM/YYYY')),

PARTITION sales_2009_4 VALUES LESSTHAN(TO_DATE('01/05/2009','DD/MM/YYYY')),

PARTITION sales_2009_5 VALUES LESSTHAN(TO_DATE('01/06/2009','DD/MM/YYYY')),

PARTITION sales_2009_6 VALUES LESSTHAN(TO_DATE('01/07/2009','DD/MM/YYYY')),

PARTITION sales_2009_7 VALUES LESS THAN(TO_DATE('01/08/2009','DD/MM/YYYY')),

PARTITION sales_2009_8 VALUES LESSTHAN(TO_DATE('01/09/2009','DD/MM/YYYY')),

PARTITION sales_2009_9 VALUES LESSTHAN(TO_DATE('01/10/2009','DD/MM/YYYY')),

PARTITION sales_2009_10 VALUES LESSTHAN(TO_DATE('01/11/2009','DD/MM/YYYY')),

PARTITION sales_2009_11 VALUES LESSTHAN(TO_DATE('01/12/2009','DD/MM/YYYY')),

PARTITION sales_2009_12 VALUES LESSTHAN(TO_DATE('01/01/2010','DD/MM/YYYY')),

PARTITION sales_2010_1 VALUES LESSTHAN(TO_DATE('01/02/2010','DD/MM/YYYY'))

);

使用下面这样的一个存储过程,通过创建一个job,我们就可以定时删除1年以前的旧分区了。

CREATE OR REPLACE PROCEDURE drop_partitionAS

v_part_name   varchar2(100);    --要添加分区表的名称前缀

v_over_time   number;         --过期时间间隔

v_err_num     NUMBER;        --ORA错误号

v_err_msg     VARCHAR2(100); --错误描述

BEGIN

--得到时间最早的分区

select min(partition_name) into v_part_name

from user_tab_partitions where table_name='SALE_DATA';

--取得时间最早的分区到当前的时间间隔

selectmonths_between(sysdate,to_date(substr(min(partition_name),7,8),'yyyy-mm')) into v_over_time

from user_tab_partitions where table_name='SALE_DATA';

--删除最早的分区

if v_over_time>12 then

execute immediate 'alter table sale_datadrop partition '||v_part_name;

end if;

EXCEPTION

WHEN OTHERS THEN

v_err_num := SQLCODE;

v_err_msg := SUBSTR(SQLERRM, 1, 100);

dbms_output.put_line('执行错误: ' ||v_err_num || '错误描述: ' || v_err_msg);

end drop_partition;

创建一个job,每天执行一次。

declare

job number;

begin

dbms_job.submit(job,'drop_partition;',sysdate,'sysdate+1');

end;

这样就可以定时删除过期的分区数据了。

2.移植到离线数据库中,作为历史数据处理

对于一些OLAP系统,业务上通常会考虑对数据进行过期化处理,将过期的数据移植到另外的数据库中保存,这种数据库称作离线数据库或者历史数据库。

将一部分业务切换到历史数据库中,然后对历史数据进行分析处理,比如数据挖掘、报表分析等。

这种数据库设计方式非常普遍,我们要讨论一下在线数据如何迁移到离线数据库中的问题,在这种情况下,分区就会发挥非常大的作用。

下面举一个具体的案例来说明这个过程。

我们称当前业务使用的数据库为在线数据库。比如,按照业务要求,在线数据库中只能存放1年的数据,再早的数据全部转移到离线数据库中变成历史数据。我们可以大致列出这样的一种思路:

(1)在设计在线数据库时,所有需要做数据过期化处理的表,按月创建分区。

(2)每个分区创建在单独的表空间上。

(3)将分区的表空间导出,并复制到离线数据库服务器上。

(4)在离线数据库服务器上将复制过来的数据导入到离线数据库中。

这样就完成了一个分区数据的过期化处理。

3.从数据库中移除,转入归档

在实际生产环境中,第三种对历史数据的处理方式是对历史数据归档,它是一种折中的方式,在成本上比离线数据库要低,但是还能保留历史数据。此处理方式需要一个海量的存储空间来存储过期的数据。

对于过期数据的归档处理,通常有两种方式:

(1)对于数据是通过对平面文件或者专有格式文件加载的方式入库的,比如数据仓库,则可以考虑在加载的同时,将这些数据文件归档到目标存储上面,完成数据备份。

比如有一个数据仓库系统,是通过SQL*Loader方式将数据文件加载入库的,那么在加载完成后,可以同时将这些文件传输到需要归档的存储介质上(可能是一个大的磁盘柜,也可能是磁带机)。以后如果需要使用这些数据,可以将它们复制回来,重新加载入库即可使用。

如图2-1所示是这种方式的示意图。

(2)从数据库中导出历史数据,然后归档。与上一种方式相比,这种方式显然对数据库的资源消耗比较大,但也算是一种方式。

通过传递表空间或者表导出的方式将数据库中的数据导出来,然后将这些文件归档到存储介质上。

如图2-2所示是这种方式的示意图。

本文节选自《让Oracle跑得更快2—基于海量数据的数据库设计与优化》一书。

图书详细信息:http://blog.csdn.net/broadview2006/article/details/6650914

范围分区在数据过期化处理中的应用相关推荐

  1. R语言vtreat包自动处理dataframe的缺失值、使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化)、计算数据列的中位数或者均值并进行数据标准化

    R语言vtreat包自动处理dataframe的缺失值.使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化).计算数据列的中位数或者均值并基于中位数或者均值进行数据标 ...

  2. 马云、马化腾任职清华;微软将数据保存在玻璃中;Visual Studio Online 上线 | 极客头条...

    整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友 ...

  3. php redis hset过期时间,详解Redis中数据过期策略

    相信大家对Redis中数据过期有点了解,本文主要介绍了Redis中的数据过期策略,文中通过示例代码介绍的很详细,相信对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,希望能帮助到大家 ...

  4. 11月5日科技资讯|马云、马化腾任职清华;微软将数据保存在玻璃中;Visual Studio Online 上线 | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 屠 ...

  5. oracle表分区--亿级的数据在oracle表中存储,表分区的一个真实应用场景

    我从来没有操作处理过如此大量的真实数据. 我的一个任务,通过kafka流式处理消息框架 消费 整个城市 其中一种手机网络的信号接入信息. 千万级人口,只要有人使用手机网络,就会产生一条数据,可想而知, ...

  6. 企业机器学习可视化管理平台在信息 化项目管理中的实践研究——以某政务数据治理项目为例-4

    题目:企业机器学习可视化管理平台在信息 化项目管理中的实践研究--以某政务数据治理项目为例  文献引用:[1]王凯.企业机器学习可视化管理平台在信息化项目管理中的实践研究[D].昆明理工大学,2021 ...

  7. redis集合数据过期_关于redis性能问题分析和优化

    一.如何查看Redis性能 info命令输出的数据可以分为10个分类,分别是: server,clients,memory,persistence,stats,replication,cpu,comm ...

  8. [1183]Clickhouse数据表数据分区partition数据生命周期操作

    文章目录 表操作 创建数据库 创建表 删除表 清空表 删除表某个分区 重命名或移动数据表 表字段column操作 添加字段 删除字段 修改字段 修改字段名称 数据分区partition的基本操作 查询 ...

  9. 计网/数据库面试题(更新中ing~~)

    计网/数据库面试题(更新中ing~~) <计算机网络> 1. OSI七层模型.设备 (传输层)协议的多路分用和复用 2. TCP/IP四层模型==五层模型 (传输层)TCP和UDP协议对比 ...

  10. FreeBSD硬盘分区和数据迁移相关资料

    从网上摘录的部分FreeBSD硬盘分区和数据迁移相关资料: HOWTO: Move FreeBSD to a new hard disk FreeBSD 数据迁移方法 FreeBSD的硬盘分区策略 ( ...

最新文章

  1. javascript中的小括号
  2. 单人存档_电子发票归档怎么保存稳当?电子发票存档你都会了吗?
  3. c++ 输出格式控制
  4. 模拟文件管理器的java可以编译但无法运行_在java学习经典问题he解答(6)
  5. linux下挂载移动硬盘(ntfs格式)
  6. java如何获取wsdl文件,如何使用Java获取WSDL文件中的复杂类型?
  7. pdf在html中加载不出来,pdf嵌入html解决办法
  8. 整流八--电网不平衡状态下三相PWM整流器的控制策略
  9. Leetcode 1484题: Group Sold Products By The Date
  10. 用python采集modbus_python modbus_tk库学习记录
  11. HDU 4313 最小生成树
  12. 【Hive】解析复杂json格式字段
  13. 网络安全技术课程小结(一)
  14. 重庆华侨城跨界联合潮牌T.M.D PCP发财潮流文化艺术聚会国庆开档
  15. 联邦学习隐私保护相关知识总结
  16. 目标检测:python实现多种图像数据增强的方法(光照,对比度,遮挡,模糊)
  17. Java的两种分页实现
  18. 认识3DMAX的各种插件
  19. 动态时间规整算法: 从DTW到FastDTW
  20. 骗了全世界130年的钻石骗局 终于栽在中国

热门文章

  1. THINKPHP获取路径
  2. 解决clipboard手机端无法复制的一种思路
  3. C语言中整型常量的表达方式
  4. SVN Error: Unreadable path encountered; access denied;
  5. dom块级元素的各种宽高
  6. 学习python的第六天---1(理论)
  7. bzoj 3561: DZY Loves Math VI
  8. Ubuntu 14.04 安装 JDK 8,ubuntu14.04
  9. 时空旅行+内付费“植物大战僵尸2”下月18日全球同步发行!
  10. spss clementine Twostep Cluster(两步聚类 二阶聚类)