2010-05-23 80 views
2

我知道立方体是优化的数据结构,用于聚合和“分割”大量数据。我只是不知道他们是如何实施的。数据仓库立方体中应用了哪些数据结构和算法?

我可以想象很多这种技术是专有的,但有没有我可以用来开始实施我自己的多维数据集技术的任何资源?

集合论和大量的数学可能涉及(并欢迎作为建议!),但我主要感兴趣的实现:数据结构和查询算法。

谢谢!

+0

这是很有限的,但可能你指出正确的方向的http:// msdn.microsoft.com/en-us/library/bb219339%28CS.70%29.aspx – R0MANARMY 2010-05-23 03:33:13

回答

0

通常,数据仓库使用关系数据库,但这些表不像规范化的可操作关系数据库那样标准化。

数据仓库是面向主题的。数据仓库主题表通常具有以下特征:

  • 许多索引。

  • 没有连接,除了查找表。

  • 重复的数据,主题表是 高度非规范化。

  • 包含派生和聚合信息。

数据仓库中的数据库表以星型模式排列。星型模式基本上是一个包含查找表阵列的主题表。查找表的键是主题表中的外键。如果您绘制主题表的实体关系图,则查找表将围绕主题表,如星形点。

至于查询,这取决于主题表和行数。通常,预计查询需要很长时间(很多分钟,有时需要几个小时)。

这里有一个一般的文章,让你开始:Developing a Data Warehouse Architecture

这里有一个星型架构设计的高度概括:Designing the Star Schema Database

+0

感谢吉尔伯特 - 你可以详细了解如何存储和访问重复,派生和/或聚合的数据?即哈希表键入维度键?也许包含一组聚集等等? – 2010-05-23 15:29:11

+0

嗨,杰夫。看看星型模式链接的图10。采取零售业务的沃尔玛将拥有数万亿的SalesFact行。如果不是汇总表TimeDimension和StoreDimension,则对SalesFact的查询永远不会结束。汇总表回答了大部分常见问题。 实际的数据存储与设计数据仓库无关,因此大多数查询都由汇总表来回答。 现在构建和维护汇总表,这需要定期运行批处理进程。 – 2010-05-23 23:13:37

+0

摘要事实不存储在维度中。那些事实只是聚合在不同的粒度上(可能有不同的维度),但它们仍然存储在事实表中。 – 2010-05-24 05:31:33

1

在星型模式数据库,事实通常是获取并存储在最好的谷物。

因此,让我们的SalesFact例如,从图10中http://www.ciobriefings.com/Publications/WhitePapers/DesigningtheStarSchemaDatabase/tabid/101/Default.aspx

眼下,粮食是产品,时间(每天粒度),商店。假设您希望按月预汇总(这个特定示例不太可能需要预汇总,但如果销售是由客户详细说明的,则按分钟预汇总可能是必要的)。

然后,你将有一个SalesFactMonthly(或添加粮食歧视现有的事实表,因为尺寸是相同的 - 有时在聚合,你可能实际上失去了尺寸就像你可以失去粮食,例如,如果你只是想要由商店而不是按产品)。

ProductID 
TimeID (only linking to DayOfMonth = 1) 
StoredID 
SalesDollars 

而你也这样做会得到:

INSERT INTO SalesFactMonthly (ProductID, TimeID, StoreID, SalesDollars) 
SELECT sf.ProductID 
    ,(SELECT TimeID FROM TimeDimension WHERE Year = td.Year AND Month = td.Month AND DayOfMonth = 1) -- One way to find the single month dimension row 
    ,sf.StoreID 
    ,SUM(sf.SalesDollars) 
FROM SalesFact AS sf 
INNER JOIN TimeDimension AS td 
    ON td.TimeID = sf.TimeID 
GROUP BY td.Year, td.Month 

在立方体会发生什么事是你基本上细粒度明星和预聚集在一起 - 但每个实现是专有的 - 有时你可能不即使在立方体中有最细的数据,也无法报告。但是,您可能希望将数据切片的每种方式都需要存储在该颗粒中,否则无法以这种方式进行分析。