对于我们这个项目来说,数据库的存取的性能决定了数据提供的性能。优化的大致的原理只有两个:一是数据分块存放,便于数据的转储和管理;二是中间处理,提高数据提供的速度。

基于上面两个根本的原理,借助于数据仓库的概念,列举数据库的优化方式:

1.分区

在数据仓库中,事实表,索引表,维度表分处于三个不同的表空间当中(在部署的时候,最好是部署到不同的磁盘上)。这样子做的原因就是便于并发操作,其实数据仓库和普通的数据库之间没有严格的界限,主要还是部署上,当然oracle本身会为数据仓库中的“事实表”生成“知识库”等操作,保证更快的数据提供效率,其实可以借助于job和外部程序来调度存储过程实现。基于这个思路,本项目数据库中的索引将和事实表分开维护,当然这称不上分区()。真正的分区是指下面的内容。

分区就是partition/subpartition,对于事实表本身来说,以月为单位作partition挂载到不同表空间上。具体的示例如下:create table T_LOGNODE_RECORD

(

……

CALLIN_HH NUMBER(2) not null,

CALLIN_DD NUMBER(2) not null,

CALLIN_MONTH NUMBER(2) not null,

CALLIN_YEAR NUMBER(4) not null,

MONTH_MOD NUMBER(1) not null

)

PARTITION BY LIST (MONTH_MOD)

(

PARTITION P0 VALUES (0) TABLESPACE TS0,

PARTITION P1 VALUES (1) TABLESPACE TS1,

PARTITION P2 VALUES (DEFAULT) TABLESPACE TS2

);

上述的代码中以MONTH_MOD字段作为分区标准,将T_LOGNODE_RECORD分到三个不同的表空间(TS0,TS1,TS2)中,这里有一个技巧,MONTH_MOD = 月份mod3,这样子可以不需要人工的维护哪个月分入哪个分区。当然简单的以月作为分区之后,对于我们当前的数据库来说还是远远不够的,因为即使是一个月的数据依然是很巨大的,那么需要我们做SUBPARTITION,做法的示例为:

create table T_LOGNODE_RECORD

(

……

CALLIN_DD NUMBER(2) not null,

MONTH_MOD NUMBER(1) not null

)

PARTITION BY RANGE(MONTH_MOD)

SUBPARTITION BY LIST(CALLIN_DD)

SUBPARTITION TEMPLATE

(

SUBPARTITION SUBP1 values (1),

SUBPARTITION SUBP2 values (2),

SUBPARTITION SUBP3 values (3)

)

(

PARTITION P0 VALUES less than (1),

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐