用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年的数据,所有数据都以压缩数据表的形势存放。请问怎么设计数据库的存储形势更好。采用分区表?每月一个分区?
另外请预估一下在线归档数据库需要多大的表空间?数据库磁盘空间有需要多大?有什么测算方法?
------解决方案--------------------1. 各个业务的cvs的数据结构都一样吗?也就是如果设计表,表结构是不是完全一样的?
2. 估算数据量,你可以导入3天或者7天的数据到数据库中,然后平均累加
3. 分区根据你的记录记录数,对于你们的情况,我感觉如果按照日分区,问题不大,如果数据量太大,是否需要考虑根据业务来做子分区
4. cvs文件加载到数据库中,可能需要你们应用开发程序完成
你们的这个整体设计不是非常难,可以给你们做咨询顾问
------解决方案--------------------
1. 500张表,每个表365个分区,整体上来说,一个表365个分区,从oracle 数据库层面来说,没有任何问题
2. 如果你们这些数据不做任何修改,压缩表可以节约不少空间,但是同时带来你加载数据速度变慢,如果有dml操作,那压缩表肯定不行,如果你90天以前的是月分区,30天内的是日分区,那随着时间的推移呢?以后的数据还是日分区吧
3. index是根据你的需求去创建,不是为了index而去index,更应该是为了业务的查询高校而去设置这些