接上文:数据库星型模式结构与创建指南(上) 事实粒度 数据的粒度或频度由每个维表的最小级别的粒度决定。例如,事实表可以存储每种产品每周或每月的总数,粒度越低,表中的记录数就越多。粒度也决定了用户可以下钻到的数据事务级别。 数据库星型模式的优点是低一级的事务可以汇总到事实表的粒度。
这加速了作为决策支持过程一部分的查询性能。然而,要创建立方体(Cube),也不一定总是要做事实表的聚集或汇总。 事实表大小 前面讨论了500种产品如何在200家门店中销售,如果累积10年粒度到天的数据,就会在事实表中产生3.56亿条记录。这是表的最大容量。
数据库的星型模式不能存储0值,除非这个0值是……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
事实粒度
数据的粒度或频度由每个维表的最小级别的粒度决定。例如,事实表可以存储每种产品每周或每月的总数,粒度越低,表中的记录数就越多。粒度也决定了用户可以下钻到的数据事务级别。
数据库星型模式的优点是低一级的事务可以汇总到事实表的粒度。这加速了作为决策支持过程一部分的查询性能。然而,要创建立方体(Cube),也不一定总是要做事实表的聚集或汇总。
事实表大小
前面讨论了500种产品如何在200家门店中销售,如果累积10年粒度到天的数据,就会在事实表中产生3.56亿条记录。这是表的最大容量。数据库的星型模式不能存储0值,除非这个0值是有意义的。所以,如果某一天某种产品在某个门店没有销售,系统就不会保存这些为0 值的记录。
即使事实表是很稀疏的,仍然可以在数据库中存放极大数目的记录,占用几乎所有的磁盘空间。粒度越低,事实表越大。在前面的例子中,如果粒度从天变到周,就有可能减少大约5200万条记录。
事实表中字段的数据类型要尽可能的小。在大多数事实表中,所有的字段都是数字型的,其存储空间比定义在维表中的长描述字段要小。
最后,注意每增加一个维度都会极大地增加事实表的大小。如果在前面的例子中仅仅增加一个包括20种可能值的维度,就有可能增加73亿条记录。
变更属性
对于数据库中的星型模式,数据库的属性变更是个问题。例如,图1中的商店维度,如果由于某种原因,商店的区域、地区或地段要改变,那么历史销售的统计数据就不准确了。如果只是在原有的记录上简单地更新了商店的地区,该地区的总销售额还是用目前的结构。这样业务就会“丢失”了历史。
事实上,公司可能想看看在前一年该区域中商店的销售额。更常见的是,业务并不想改变历史数据。一般的方法是为商店创建一个包含新区域的新记录 ,但保留原来的商店记录不变,因而该区域销售的历史数据也不变。这样公司要将商店的情况与历史比较,就只能保留是以前的Storeid。解决方法是保留已有的商店名(源系统中的主键)记录,另外增加 开始日期和结束日期字段来表示每条记录何时是有效的。商店ID是一个保留键,所以每条记录有不同的商店ID,但有相同的商店名称,允许为商店存放访问时间,而不必考虑其结构。
聚集
事实表中的数据总是聚集到事实表的粒度。用户常常要看更高级别聚集值。例如,他们可能想将销售数据按月汇总或按季度汇总。此外,用户可能想知道产品或类别级的汇总数据。
数字值可以用 标准的SQL语句来计算,但是这种计算很花时间,因此,数据库中的星型模式,可以通过预先计算并将数据存放在事实表中从而能更好地存放更高级别的聚集数据。这要求最低级别的记录有值。例如,时间维记录了实际保存的周数,可能在DayOfWeek字段中有一个9这个值来表示这个特定的记录保存着本周的汇总数。
第二种方法是创建另外一个事实表,但粒度是周。这种方法对于存放不同的汇总级别比较有效,但是在检查可能需要的表的数目时问题就来了。为了按产品汇总到周、月、季度和年级别,除了真正的事实表或者是“天”的事实表以外,还需要4个事实表。然而,任何其他的组合,例如按产品子类的周汇总,或按商店的月汇总,这都需要它们自己的事实表。
立方体结构
以上方法在过去曾经使用,但是现在还有更好的方法。这种替代方法通常是构建立方体结构来保存预先计算的值。除了数据库星型模式外,cube设计的目的是要解决在不同级别计算汇集并能对查询快速响应这类问题的。
可能会有已经创建好的数据库模式可用,但如果要选择数据仓库的话,还是要考虑到有多个用户使用,同时会有多个查询运行这样的需求。如果组织中存在这种需求的话,还要支持多个引擎,连接大量的表来运行一个查询。在做任何购买的决定以前,你可能都要测试数据仓库模式以确保与你的业务需求一致。
作者
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
数据库和数据仓库的区别在哪儿?
目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。
-
如何使用服务来平衡Oracle RAC 数据库工作负载
为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。