日期:2014-05-16  浏览次数:21023 次

用Oracle建立在线归档数据库
公司每天各个业务系统的数据生成落地的CSV文件后大约有100G,记录数最多的表不超过5000万条记录,95%的表不超过20万条记录,每个文本文件中都已经打了时间搓data_date。data_date是8位日期。
下面是对数据利用的需求描述:    
    data_date为最近30天的数据都有可能被重复利用;
    data_date在3天以内的数据被重复利用的概率较高,其余27天重复利用的概率将大幅下降;
    data_date超过30天以上的数据并且在1年以内的数据进入在线的归档数据库;
    data_date超过1年以上的数据移除归档数据库,生成文本文件,每天对每个文本文件进行压缩。(离线存储,与在线归档数据库设计无关)
如果想建立一个以data_date为切片的归档数据库,归档1年的数据,所有数据都以压缩数据表的形势存放。请问怎么设计数据库的存储形势更好。采用分区表?每月一个分区?
    另外请预估一下在线归档数据库需要多大的表空间?数据库磁盘空间有需要多大?有什么测算方法?
oracle 数据库 压缩 存储 设计

------解决方案--------------------
1. 各个业务的cvs的数据结构都一样吗?也就是如果设计表,表结构是不是完全一样的?
2. 估算数据量,你可以导入3天或者7天的数据到数据库中,然后平均累加
3. 分区根据你的记录记录数,对于你们的情况,我感觉如果按照日分区,问题不大,如果数据量太大,是否需要考虑根据业务来做子分区
4. cvs文件加载到数据库中,可能需要你们应用开发程序完成

你们的这个整体设计不是非常难,可以给你们做咨询顾问




------解决方案--------------------
引用:
1、表结构不一样,约有500张表,由于历史原因,当时所有数据都以文件存储。
2、实际上我也是这样做的,但是就是在压缩表和非压缩表,怎样建索引,怎样分区上 纠结,毕竟我不是系统管理员。
3、如果采用日分区,分区的数量会不会太多?我开始是这样想的,30天内的数据采用日分区,30天以上90天以内的数据采用月分区;超过90天但在1年以内的数据,采用压缩表存储在历史数据区内,切且每月一个子分区。1年以上的数据进去归档库,离线存储。
不知道这样妥否?

1. 500张表,每个表365个分区,整体上来说,一个表365个分区,从oracle 数据库层面来说,没有任何问题
2. 如果你们这些数据不做任何修改,压缩表可以节约不少空间,但是同时带来你加载数据速度变慢,如果有dml操作,那压缩表肯定不行,如果你90天以前的是月分区,30天内的是日分区,那随着时间的推移呢?以后的数据还是日分区吧
3. index是根据你的需求去创建,不是为了index而去index,更应该是为了业务的查询高校而去设置这些