oracle建立多维数据库,多维数据库 Oracle Essbase 和 IBM Cogons 底层原理

gooood个人博客网站

数据库

多维数据库(Multi Dimensional Database,MDD)使用Dimension(维度)和Cube(数据立方体、数据集市)模型描述数据。

ae63cedf3e8d7d4f4c1096e8d81e1531.png

多维数据模型

关系型数据库(Relational Database,RDB)中的星型结构或雪花型结构就是模拟上述多维模型结构的,但无法提供真正意义上的多维数据分析能力,这里不做过多解释。

下文讲解Oracle Essbase以及IBM Cogons这种真正的多维数据库的原理。

多维数据库中模型结构与事实数据分别以概要文件(profile)和数据块(data block)的形式存在。

a6ffaf659454cfa554cb844bb029d72e.png

profile和data block

概要文件用来描述以下信息:

维度和维度成员信息

与维度相关的层级(Hierarchy)和级别(Level)信息

Cube的描述性信息,以及Cube与维度的关联性

其他描述性的信息,如实体模型属性

Cube中度量数据存放在data block中,data block可以被理解成为多维数组结构,其大小与相关维度的明细成员数量有直接关系。

计算公式:data block size = 维度1明细成员总数 * 维度2明细成员总数 * …… * 维度N明细成员总数

数据块容量等于相关维度明细成员数量的笛卡尔积。

8b710dffa4f1936b773ea8a29b8e17d5.png

数据块大小

明细度量值一般采用double类型,按8bytes算,上图所描述的Cube的数据块大小为480bytes。

除了数据块中的明细度量值外,其他非明细度量值并没有直接存储,因为其可以通过对应的明细度量值计算出来。

0b4209871f017bcb798e246914cb6f10.png

非明细度量值计算方式

一些不存在的度量值会造成数据空洞问题,假设2018年4季度河北省B品牌手机的销售量是未知的,则会在数据块中产生一个空洞。

注意:数据空洞表示不存在的值,与数值0的意义不同,数值0表示一个有意义的值。

如果数据空洞比较多,则数据块的数据密度就会下降,将造成存储空间的浪费。

1d14fc8a6008fdcae799c3ab83981014.png

数据空洞

除了数据空洞问题,还存在数据爆炸问题。数据块大小由全部维度明细成员数量的笛卡尔积决定,假如某个Cube关联三个维度,每个维度明细成员数量均为100,则:data block size = 100 ^ 3 = 1000000,如果度量值按double类型存储(8bytes),数据块文件大约为7.62M。如果每个维度明细成员数量增加至150,则数据块文件将膨胀到25.74M(data block size = 150 ^ 3 * 8bytes / 1024 / 1024)。

当数据块极度膨胀并且存在很多数据空洞的时候,会极大地浪费存储空间,并且可能导致数据存储无法实现。

39d0ee109a37797246f519e1f4bce24f.png

极度膨胀和存在大量空洞的多维数组

为了解决数据空洞和数据膨胀问题,引入了密集维度组合和稀疏维组合的概念。

判断维度组合是密集还是稀疏的原则是看其所对应的明细度量值的存在情况,例如:

北京地区只有ABC三种手机的销售额,天津地区只有BCD三种手机的销售额,河北地区卖出的手机只有AE两种,表明并不是每个地区对于每一种手机都有销售额,所以地区与产品属于稀疏的维度组合。

2018年的四个季度都有手机销售额,所以日期维度自身可以构成密集的维度组合。

注意!在其他讲解多维数据库的文章中都把维度分为稀疏维与密集维,这是非常错误的,对于维度本身来讲没有稀疏与密集之分,稀疏与密集表示的是维度之间的组合!对于有N个维度的Cube而言,如果其只有一个维度退化成索引,或者有N - 1个维度退化成索引,则此时稀疏与密集的维组合只包含一个维度,但这只是一种特例,并不代表维度本身是稀疏或密集的。

在引入稀疏与密集的维度组合之后,原本由于数据空洞和数据爆炸而失控的数据块结构将变成索引和密度相对较高的小数据块结构。

18ee112e02050dac22e007712e36ce3d.png

索引和小数据块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值