【问题标题】:What data structures and algorithms are applied within data warehouse cubes?数据仓库多维数据集中应用了哪些数据结构和算法?
【发布时间】:2010-06-09 18:35:53
【问题描述】:

我了解多维数据集是用于聚合和“切片”大量数据的优化数据结构。我只是不知道它们是如何实现的。

我可以想象很多这种技术是专有的,但是有什么资源可以用来开始实施我自己的立方体技术吗?

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

谢谢!

【问题讨论】:

标签: sql data-warehouse ssas


【解决方案1】:

有一本很棒的书描述了 SSAS 实现的许多内部细节,包括存储和查询机制细节:

http://www.amazon.com/Microsoft-Server-Analysis-Services-Unleashed/dp/0672330016

【讨论】:

    【解决方案2】:

    在星型模式数据库中,通常以最精细的粒度获取和存储事实。

    让我们以http://www.ciobriefings.com/Publications/WhitePapers/DesigningtheStarSchemaDatabase/tabid/101/Default.aspx 中的图 10 中的 SalesFact 示例为例

    现在,粒度是产品、时间(以一天为粒度)、商店。

    假设您希望按月汇总,预先汇总(此特定示例不太可能需要预先汇总,但如果销售按客户详细说明,按分钟计算,则可能需要预先汇总)。

    然后您将有一个 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
    

    在多维数据集中发生的情况是,您基本上将细粒度星形和预聚合在一起 - 但每个实现都是专有的 - 有时您甚至可能在多维数据集中没有最细粒度的数据,因此无法报告.但是,您可能希望对数据进行切片的每一种方式都需要以该粒度存储,否则您无法以这种方式进行分析。

    【讨论】:

      【解决方案3】:

      通常,数据仓库使用关系数据库,但表不像操作关系数据库那样规范化。

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

      • 许多索引。

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

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

      • 包含派生和汇总信息。

      数据仓库中的数据库表以星型模式排列。星型模式基本上是一个带有一组查找表的主题表。查找表的键是主题表中的外键。如果绘制主题表的实体关系图,查找表会像星点一样围绕主题表。

      就查询而言,这取决于主题表和行数。通常,查询会花费很长时间(几分钟,有时是几小时)。

      这是一篇帮助您入门的一般文章:Developing a Data Warehouse Architecture

      以下是星型模式设计的高级概述:Designing the Star Schema Database

      【讨论】:

      • 谢谢 Gilbert - 您能否更详细地了解如何存储和访问重复、派生和/或聚合的数据? IE。以维度键为键的哈希表?可能包含聚合集合等?
      • 嗨,杰夫。看一下星型模式链接的图 10。沃尔玛,以零售商为例,将拥有数万亿条 SalesFact 行。如果没有汇总表 TimeDimension 和 StoreDimension,对 SalesFact 的查询将永远不会结束。汇总表回答了大多数常见查询。实际的数据存储并不像设计数据仓库那么重要,因此大多数查询都由汇总表回答。现在构建和维护汇总表,这需要定期运行批处理。
      • 汇总事实不存储在维度中。这些事实只是以不同的粒度(可能具有不同的维度)聚合而成,但它们仍存储在事实表中。
      • @Jeff 好的。你告诉我维度是什么。
      • 我在回答中给出了一个生成汇总摘要信息的示例。
      猜你喜欢
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多